diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..1fb97fc --- /dev/null +++ b/.clang-format @@ -0,0 +1,127 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveMacros: false +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllArgumentsOnNextLine: true +AllowAllConstructorInitializersOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: MultiLine +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Attach +BreakBeforeInheritanceComma: false +BreakInheritanceList: BeforeColon +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 80 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: false +IndentPPDirectives: None +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +ReflowComments: true +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Auto +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 8 +UseTab: Never +... + diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000..4f80d14 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,30 @@ +--- +Checks: [ + '-*', + 'clang-diagnostic-*', + 'clang-analyzer-*', + 'bugprone-*', + 'concurrency-*', + 'cppcoreguidelines-*', + 'modernize-*', + 'readability-*', + '-readability-redundant-access-specifiers', + '-readability-function-cognitive-complexity' + ] +ExtraArgs: ['-Wno-unknown-warning-option'] +FormatStyle: none +HeaderFileExtensions: ['', 'h','hh','hpp','hxx'] +HeaderFilterRegex: '' +ImplementationFileExtensions: ['c','cc','cpp','cxx'] +CheckOptions: + - key: MinimumExceptionNameLength + value: 1 + - key: MinimumLoopCounterNameLength + value: 3 + - key: MinimumParameterNameLength + value: 3 + - key: MinimumVariableNameLength + value: 3 +User: 'scott.e.graves@protonmail.com' +WarningsAsErrors: '' +... diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..37b844d --- /dev/null +++ b/.clangd @@ -0,0 +1,5 @@ +{ + "CompileFlags": { + "Remove": ["-flarge-source-files", "-fext-numeric-literals"] + } +} diff --git a/.cspell/words.txt b/.cspell/words.txt new file mode 100644 index 0000000..4984fb0 --- /dev/null +++ b/.cspell/words.txt @@ -0,0 +1,236 @@ +aarch64 +advapi32 +armv8 +autogen +backwardcpp_project +bcrypt +binutils_version +bitcoinsystem +boost_asio_has_std_string_view +bugprone +cflags +chrono +clsctx_inproc_server +clsid_shelllink +cmake_current_source_dir +cmake_host_win32 +comdlg32 +cpp_httplib_hash +cppcoreguidelines +cppdbg +cppflags +cpphttplib +cppvsdbg +crypto_aead_xchacha20poly1305_ietf_npubbytes +cspan +cstdint +cxxflags +cxxopts_project +cxxstd +d_largefile64_source +d_largefile_source +d_ndebug +dbackward_has_dwarf +dbackward_shared +dbghelp +dbinaries +dboost_root +dbuild_shared_libs +dc_link_args +dcli11_warnings_as_errors +dcmake_cxx_flags +dcpp_args +dcpphttplib_openssl_support +dcpphttplib_tcp_nodelay +dcurl_ca_bundle +dcurl_ca_fallback +dcurl_disable_ldap +dcurl_staticlib +dcurl_use_libpsl +dcurl_use_libssh2 +dcurl_zlib +dcxxopts_build_examples +dcxxopts_build_tests +dcxxopts_enable_install +dcxxopts_enable_warnings +dcxxopts_use_unicode_help +ddebug +ddefault_library +decmult_gen_prec_bits +decmult_window_size +default_handler_is_spdlog +defl_ctx +degl +denable_threaded_resolver +deps +devent__disable_openssl +devent__disable_tests +devent__library_type +dfail_on_warnings +dfmt_test +dfuse_use_version +dgles1 +dgles2 +dhas_setxattr +dhttplib_require_brotli +dhttplib_require_openssl +dhttplib_require_zlib +dinstall_manpages +djson_buildtests +dnana_cmake_enable_audio +dnana_cmake_enable_jpeg +dnana_cmake_enable_png +dnana_cmake_install +dndebug +dopengl +dopenssl_root_dir +dopenssl_use_static_libs +dpng_shared +dpng_static +dpng_tests +dpng_tools +dportable +dproject_enable_backward_cpp +dproject_static_link +drocksdb_install_on_windows +dshared +dspdlog_fmt_external +dthreads_prefer_pthread_flag +duse_libidn2 +duuid_build_tests +dwith_benchmark +dwith_gflags +dwith_iostats_context +dwxuse_opengl +dzlib_use_static_libs +ecdh +endforeach +endfunction +eventlib +expect_streq +fext +fifthgrid +flac_version +flarge +fontconfig_version +freetype2_version +glapi +gmock +googletest +gpath +gtest_version +has_setxattr +hresult +httpapi +httplib +icns +icudata +icui18n +icuuc +iostreams +iphlpapi +istream_reader +libbitcoin +libbitcoinsystem +libcurl +libevent +libexample +libfuse3 +libgmock +libgtest +libiconv_version +libjpeg +libpcre2_version +libpng_project +librocksdb +libsecp256k1 +libsfml +libsodium_type +libspdlog +libuuid +libuuid_include_dirs +libvlc_include_dirs +libvlc_libraries +libvlccore +libvorbis +linkflags +mbig +msvc +msvcr120 +msvcr90 +mswsock +mtune +mwindows +nana +ncrypt +nlohmann_json +nmakeprg +nominmax +nuspell_version +oleaut32 +openal_version +openssldir +ostream_writer +pkgconfig +project_enable_cxxopts +project_enable_fontconfig +project_enable_gtkmm +project_enable_libdsm +project_enable_libiconv +project_enable_libtasn1 +project_enable_winfsp +propgrid +pugi +pugixml_project +pwhash +richtext +rocksdb_library +rpcrt4 +sdl2_no_mwindows +secp256k1 +secur32 +sfml_project +shlwapi +smb_stat_wtime +source_subdir +spdlog +spdlog_project +st_ctim +static-libgcc +static-libstdc++ +stduuid_project +stod +streq +strequal +tolower +uring +userenv +vorbis_version +wall +wcast-align +wconversion +wdouble-promotion +wduplicated-branches +wduplicated-cond +wextra +wformat=2 +win32_find_dataa +winfsp +winhttp +wininet +winspool +wlogical-op +wmisleading-indentation +wno-useless-cast +wnon-virtual-dtor +wnull-dereference +wold-style-cast +woverloaded-virtual +wpedantic +wserialization +wshadow +wsign-conversion +wunused +wxwidgets_version +xattr +xcursor \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..486ec65 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +.cache/ +.vs/ +build*/ +compile_commands.json +cspell.json +deps/ +dist/ +override.sh +scripts/cleanup.cmd +scripts/cleanup.sh +support/Dockerfile +version.cpp +version.rc diff --git a/.jenkins_builds b/.jenkins_builds new file mode 100644 index 0000000..65a7d39 --- /dev/null +++ b/.jenkins_builds @@ -0,0 +1,181 @@ +#!groovy + +pipeline { + agent none + + environment { + PROJECT_TEST_CONFIG_DIR = "/.ci/cpp_build_system/test" + } + + options { + disableConcurrentBuilds() + skipDefaultCheckout() + timestamps() + } + + stages { + stage('Windows') { + agent any + stages { + stage('Checkout') { + steps { + script { + int maxAttempts = 6 + int baseDelay = 10 + for (int attempt = 1; attempt <= maxAttempts; attempt++) { + try { + checkout scm + break + } catch (err) { + if (attempt == maxAttempts) { throw err } + int waitSec = baseDelay * (1 << (attempt - 1)) + echo "Checkout failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..." + sleep time: waitSec, unit: 'SECONDS' + } + } + } + } + } + + stage('win32_shared') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared' } } } + } + stage('win32_shared_crypto') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 1' } } } + } + stage('win32_shared_crypto_no_boost') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 7' } } } + } + stage('win32_shared_dsm') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 2' } } } + } + stage('win32_shared_sqlite') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 3' } } } + } + stage('win32_shared_errors_v1') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 4' } } } + } + stage('win32_shared_fmt') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 5' } } } + } + stage('win32_shared_libevent') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 6' } } } + } + + stage('win32_static') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static' } } } + } + stage('win32_static_crypto') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 1' } } } + } + stage('win32_static_crypto_no_boost') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 7' } } } + } + stage('win32_static_dsm') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 2' } } } + } + stage('win32_static_sqlite') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 3' } } } + } + stage('win32_static_errors_v1') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 4' } } } + } + stage('win32_static_fmt') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 5' } } } + } + stage('win32_static_libevent') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 6' } } } + } + } + } + + stage('Linux') { + agent any + stages { + stage('Checkout') { + steps { + script { + int maxAttempts = 6 + int baseDelay = 10 + for (int attempt = 1; attempt <= maxAttempts; attempt++) { + try { + checkout scm + break + } catch (err) { + if (attempt == maxAttempts) { throw err } + int waitSec = baseDelay * (1 << (attempt - 1)) + echo "Checkout failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..." + sleep time: waitSec, unit: 'SECONDS' + } + } + } + } + } + + stage('linux_shared') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared' } } } + } + stage('linux_shared_crypto') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 1' } } } + } + stage('linux_shared_crypto_no_boost') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 7' } } } + } + stage('linux_shared_dsm') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 2' } } } + } + stage('linux_shared_sqlite') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 3' } } } + } + stage('linux_shared_errors_v1') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 4' } } } + } + stage('linux_shared_fmt') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 5' } } } + } + stage('linux_shared_libevent') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 6' } } } + } + + stage('linux_static') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static' } } } + } + stage('linux_static_crypto') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 1' } } } + } + stage('linux_static_crypto_no_boost') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 7' } } } + } + stage('linux_static_dsm') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 2' } } } + } + stage('linux_static_sqlite') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 3' } } } + } + stage('linux_static_errors_v1') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 4' } } } + } + stage('linux_static_fmt') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 5' } } } + } + stage('linux_static_libevent') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 6' } } } + } + } + } + } +} + +def retryWithBackoff(int maxAttempts, int baseDelaySeconds, Closure body) { + for (int attempt = 1; attempt <= maxAttempts; attempt++) { + try { + body() + return + } catch (err) { + if (attempt == maxAttempts) { throw err } + int waitSec = baseDelaySeconds * (1 << (attempt - 1)) + echo "Step failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..." + sleep time: waitSec, unit: 'SECONDS' + } + } +} diff --git a/.jenkins_macos b/.jenkins_macos new file mode 100644 index 0000000..cbf33a2 --- /dev/null +++ b/.jenkins_macos @@ -0,0 +1,243 @@ +#!groovy +pipeline { + agent none + + environment { + PROJECT_TEST_CONFIG_DIR = "${env.HOME}/.ci/cpp_build_system/test" + } + + options { + disableConcurrentBuilds() + skipDefaultCheckout() + timestamps() + } + + stages { + stage('macOS arm64') { + agent any + stages { + stage('Checkout') { + steps { + script { + int maxAttempts = 6 + int baseDelay = 10 + for (int attempt = 1; attempt <= maxAttempts; attempt++) { + try { + checkout scm + break + } catch (err) { + if (attempt == maxAttempts) { throw err } + int waitSec = baseDelay * (1 << (attempt - 1)) + echo "Checkout failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..." + sleep time: waitSec, unit: 'SECONDS' + } + } + } + } + } + + stage('macos_aarch64_shared') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared' } } + } + } + stage('macos_aarch64_shared_crypto') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 1' } } + } + } + stage('macos_aarch64_shared_crypto_no_boost') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 7' } } + } + } + stage('macos_aarch64_shared_dsm') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 2' } } + } + } + stage('macos_aarch64_shared_sqlite') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 3' } } + } + } + stage('macos_aarch64_shared_errors_v1') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 4' } } + } + } + stage('macos_aarch64_shared_fmt') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 5' } } + } + } + stage('macos_aarch64_shared_libevent') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 6' } } + } + } + stage('macos_aarch64_static') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static' } } + } + } + stage('macos_aarch64_static_crypto') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 1' } } + } + } + stage('macos_aarch64_static_crypto_no_boost') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 7' } } + } + } + stage('macos_aarch64_static_dsm') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 2' } } + } + } + stage('macos_aarch64_static_sqlite') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 3' } } + } + } + stage('macos_aarch64_static_errors_v1') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 4' } } + } + } + stage('macos_aarch64_static_fmt') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 5' } } + } + } + stage('macos_aarch64_static_libevent') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 6' } } + } + } + } + } + + stage('macOS x86_64') { + agent any + stages { + stage('Checkout') { + steps { + script { + int maxAttempts = 6 + int baseDelay = 10 + for (int attempt = 1; attempt <= maxAttempts; attempt++) { + try { + checkout scm + break + } catch (err) { + if (attempt == maxAttempts) { throw err } + int waitSec = baseDelay * (1 << (attempt - 1)) + echo "Checkout failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..." + sleep time: waitSec, unit: 'SECONDS' + } + } + } + } + } + + stage('macos_x86_64_shared') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared "" x86_64' } } + } + } + stage('macos_x86_64_shared_crypto') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 1 x86_64' } } + } + } + stage('macos_x86_64_shared_crypto_no_boost') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 7 x86_64' } } + } + } + stage('macos_x86_64_shared_dsm') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 2 x86_64' } } + } + } + stage('macos_x86_64_shared_sqlite') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 3 x86_64' } } + } + } + stage('macos_x86_64_shared_errors_v1') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 4 x86_64' } } + } + } + stage('macos_x86_64_shared_fmt') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 5 x86_64' } } + } + } + stage('macos_x86_64_shared_libevent') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 6 x86_64' } } + } + } + stage('macos_x86_64_static') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static "" x86_64' } } + } + } + stage('macos_x86_64_static_crypto') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 1 x86_64' } } + } + } + stage('macos_x86_64_static_crypto_no_boost') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 7 x86_64' } } + } + } + stage('macos_x86_64_static_dsm') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 2 x86_64' } } + } + } + stage('macos_x86_64_static_sqlite') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 3 x86_64' } } + } + } + stage('macos_x86_64_static_errors_v1') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 4 x86_64' } } + } + } + stage('macos_x86_64_static_fmt') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 5 x86_64' } } + } + } + stage('macos_x86_64_static_libevent') { + steps { + script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 6 x86_64' } } + } + } + } + } + } +} + +def retryWithBackoff(int maxAttempts, int baseDelaySeconds, Closure body) { + for (int attempt = 1; attempt <= maxAttempts; attempt++) { + try { + body() + return + } catch (err) { + if (attempt == maxAttempts) { throw err } + int waitSec = baseDelaySeconds * (1 << (attempt - 1)) + echo "Step failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..." + sleep time: waitSec, unit: 'SECONDS' + } + } +} + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6f8362e --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2024 sgraves + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..54cffd0 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# cpp-build-system + diff --git a/all_update.sh b/all_update.sh new file mode 100644 index 0000000..8207061 --- /dev/null +++ b/all_update.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +CURRENT_DIR=$(realpath "$0") +CURRENT_DIR=$(dirname "${CURRENT_DIR}") + +function do_update() { + pushd "../$1" + git pull + popd + + ./update_project.sh $1 .. + + pushd "../$1" + scripts/cleanup.sh + git add . + git commit -a -m 'updated build system' + git push + popd +} + +pushd "${CURRENT_DIR}" +git add . +git commit -a -m "updates" +git push + +do_update dxmedia3 +do_update fifthgrid +do_update gamepadx +do_update joule +do_update med +do_update repertory +do_update monitarr +popd diff --git a/cmake/arch.cmake b/cmake/arch.cmake new file mode 100644 index 0000000..36b8aa1 --- /dev/null +++ b/cmake/arch.cmake @@ -0,0 +1,16 @@ +if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4") + message(FATAL_ERROR "32-bit compilation is not supported") +endif() + +if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)") + set(IS_ARM_SYSTEM 1) +endif() + +if(PROJECT_IS_ARM64 AND NOT IS_ARM_SYSTEM AND NOT PROJECT_REQUIRE_ALPINE) + message(FATAL_ERROR "aarch64 cross-compile is not supported") +endif() + +string(REPLACE "_" "-" PROJECT_MARCH ${PROJECT_BUILD_ARCH}) +if("${PROJECT_BUILD_ARCH}" STREQUAL "aarch64") + set(PROJECT_MARCH armv8-a) +endif() diff --git a/cmake/flags.cmake b/cmake/flags.cmake new file mode 100644 index 0000000..78b1e7e --- /dev/null +++ b/cmake/flags.cmake @@ -0,0 +1,123 @@ +list(APPEND PROJECT_COMMON_FLAG_LIST + -D_FILE_OFFSET_BITS=64 + -D_GNU_SOURCE + -D_LARGEFILE64_SOURCE + -D_LARGEFILE_SOURCE + -D_TIME_BITS=64 + -march=${PROJECT_MARCH} + -mtune=generic +) + +if(PROJECT_IS_MINGW) + list(APPEND PROJECT_COMMON_FLAG_LIST + ${PROJECT_COMMON_FLAG_LIST} + -Wa,-mbig-obj + -flarge-source-files + ) +endif() + +list(APPEND PROJECT_DEBUG_FLAG_LIST + -DDEBUG + -D_DEBUG + -Og + -fno-omit-frame-pointer + -g +) + +list(APPEND PROJECT_RELEASE_FLAG_LIST + -DNDEBUG + -D_NDEBUG + -O3 +) + +list(APPEND PROJECT_CXXFLAGS_LIST + -Wall + -Wcast-align + -Wconversion + -Wdouble-promotion + -Wextra + -Wformat=2 + -Wmisleading-indentation + -Wnon-virtual-dtor + -Wnull-dereference + -Wold-style-cast + -Woverloaded-virtual + -Wpedantic + -Wshadow + -Wsign-conversion + -Wunused +) + +if (NOT PROJECT_IS_DARWIN) + list(APPEND PROJECT_CXXFLAGS_LIST + -Wduplicated-branches + -Wduplicated-cond + -Wlogical-op + -Wno-useless-cast + ) +endif() + +list(APPEND PROJECT_CFLAGS_LIST + ${PROJECT_COMMON_FLAG_LIST} + -std=c${CMAKE_C_STANDARD} +) + +list(APPEND PROJECT_CXXFLAGS_LIST + ${PROJECT_COMMON_FLAG_LIST} + -std=gnu++${CMAKE_CXX_STANDARD} +) + +if(NOT PROJECT_IS_DARWIN AND PROJECT_STATIC_LINK) + list(APPEND PROJECT_CMAKE_EXE_LINKER_FLAGS + -static-libgcc + -static-libstdc++ + -static + ) +endif() + +list(JOIN PROJECT_COMMON_FLAG_LIST " " PROJECT_COMMON_FLAG_LIST) +list(JOIN PROJECT_DEBUG_FLAG_LIST " " PROJECT_DEBUG_FLAG_LIST) +list(JOIN PROJECT_RELEASE_FLAG_LIST " " PROJECT_RELEASE_FLAG_LIST) + +list(JOIN PROJECT_CFLAGS_LIST " " PROJECT_CFLAGS_LIST) +list(JOIN PROJECT_CXXFLAGS_LIST " " PROJECT_CXXFLAGS_LIST) + +list(JOIN PROJECT_CMAKE_EXE_LINKER_FLAGS " " PROJECT_CMAKE_EXE_LINKER_FLAGS) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PROJECT_CFLAGS_LIST}") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${PROJECT_DEBUG_FLAG_LIST}") +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${PROJECT_RELEASE_FLAG_LIST}") + +set(CMAKE_CXX_FLAGS "-include cstdint -include utility ${CMAKE_CXX_FLAGS} ${PROJECT_CXXFLAGS_LIST}") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${PROJECT_DEBUG_FLAG_LIST}") +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${PROJECT_RELEASE_FLAG_LIST}") + +set(CMAKE_EXE_LINKER_FLAGS "${PROJECT_CMAKE_EXE_LINKER_FLAGS}") + +set(EXTERNAL_CMAKE_CXX_FLAGS "-include cstdint -include utility ${PROJECT_COMMON_FLAG_LIST}") +if (NOT PROJECT_IS_DARWIN) + set(EXTERNAL_CMAKE_CXX_FLAGS "-fext-numeric-literals ${EXTERNAL_CMAKE_CXX_FLAGS}") +endif() + +list(APPEND PROJECT_EXTERNAL_CMAKE_FLAGS + -DCMAKE_BUILD_TYPE=${PROJECT_CMAKE_BUILD_TYPE} + -DCMAKE_COLOR_MAKEFILE=${CMAKE_COLOR_MAKEFILE} + -DCMAKE_CXX_FLAGS=${EXTERNAL_CMAKE_CXX_FLAGS} + -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} + -DCMAKE_C_FLAGS=${PROJECT_COMMON_FLAG_LIST} + -DCMAKE_C_STANDARD=${CMAKE_C_STANDARD} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_INSTALL_PREFIX=${PROJECT_EXTERNAL_BUILD_ROOT} + -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} +) + +if(CMAKE_TOOLCHAIN_FILE) + list(APPEND PROJECT_EXTERNAL_CMAKE_FLAGS + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + ) +endif() + +string(REPLACE ";" "|" CMAKE_PREFIX_PATH_ALT_SEP "${CMAKE_PREFIX_PATH}") +list(APPEND PROJECT_EXTERNAL_CMAKE_FLAGS + -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP} +) diff --git a/cmake/functions.cmake b/cmake/functions.cmake new file mode 100644 index 0000000..fd1d2ec --- /dev/null +++ b/cmake/functions.cmake @@ -0,0 +1,188 @@ +if (PROJECT_MACOS_ICNS_NAME) + set(PROJECT_MACOS_ICNS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/assets/${PROJECT_MACOS_ICNS_NAME}") +endif() + +function(set_common_target_options name) + target_compile_definitions(${name} PUBLIC + ${PROJECT_DEFINITIONS} + ${${name}_DEFINITIONS} + ) + + target_include_directories(${name} BEFORE PUBLIC + ${PROJECT_EXTERNAL_BUILD_ROOT}/include + ) + + target_link_directories(${name} BEFORE PUBLIC + ${PROJECT_EXTERNAL_BUILD_ROOT}/lib + ) + + if (PROJECT_STATIC_LINK) + target_compile_definitions(${name} PRIVATE U_STATIC_IMPLEMENTATION) + endif() + + target_link_libraries(${name} PRIVATE + ICU::io + ICU::i18n + ICU::uc + ICU::data + ) + + target_include_directories(${name} AFTER PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include + ${name}_INCLUDES + ) + + if(PROJECT_DEPENDENCIES) + add_dependencies(${name} ${PROJECT_DEPENDENCIES}) + endif() + + if(PROJECT_STATIC_LINK) + set_property(TARGET ${name} PROPERTY LINK_SEARCH_START_STATIC 1) + endif() +endfunction(set_common_target_options) + +function(add_project_executable2 name dependencies libraries headers sources is_win32) + if (PROJECT_WINDOWS_VERSION_RC) + list(APPEND sources ${PROJECT_WINDOWS_VERSION_RC}) + endif() + + if (PROJECT_IS_DARWIN AND PROJECT_MACOS_ICNS_SOURCE AND "${name}" STREQUAL "${PROJECT_NAME}") + set_source_files_properties(${PROJECT_MACOS_ICNS_SOURCE} PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources" + ) + + add_executable(${name} + MACOSX_BUNDLE + ${headers} + ${sources} + ${PROJECT_MACOS_ICNS_SOURCE} + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp + ) + + set_target_properties(${name} PROPERTIES + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_ICON_FILE "${PROJECT_MACOS_ICNS_NAME}" + RESOURCE "${PROJECT_MACOS_ICNS_SOURCE}" + ) + else() + add_executable(${name} + ${headers} + ${sources} + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp + ) + endif() + + foreach(dependency ${dependencies}) + set_common_target_options(${dependency}) + endforeach() + + set_common_target_options(${name}) + + if(dependencies) + add_dependencies(${name} ${dependencies}) + endif() + + target_link_libraries(${name} PRIVATE ${libraries}) + + if(PROJECT_ENABLE_SDL AND PROJECT_IS_MINGW) + target_link_libraries(${name} PRIVATE SDL2::SDL2main) + endif () + + if (is_win32 AND PROJECT_IS_MINGW) + target_link_options(${name} PRIVATE -mwindows) + endif() +endfunction(add_project_executable2) + +function(add_project_executable name dependencies libraries) + file(GLOB_RECURSE headers + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hxx + ) + + file(GLOB_RECURSE sources + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx + ) + + if(PROJECT_ENABLE_WXWIDGETS OR PROJECT_ENABLE_SDL OR PROJECT_ENABLE_SFML OR PROJECT_ENABLE_NANA) + set(IS_WIN32 ON) + endif() + + add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}" "${IS_WIN32}") + + if(PROJECT_ENABLE_WXWIDGETS) + target_link_libraries(${name} PRIVATE ${wxWidgets_LIBRARIES}) + endif() +endfunction(add_project_executable) + +function(add_project_library name dependencies libraries additional_sources) + file(GLOB_RECURSE headers + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/*.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/${name}/include/*.hxx + ) + + file(GLOB_RECURSE sources + ${additional_sources} + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx + ) + + add_library(${name} STATIC + ${headers} + ${sources} + ) + + set_common_target_options(${name}) + + set_target_properties(${name} PROPERTIES PREFIX "") + target_link_libraries(${name} PRIVATE ${libraries}) +endfunction(add_project_library) + +function(add_project_test_executable name dependencies libraries) + if(PROJECT_ENABLE_TESTING) + find_package(GTest ${GTEST_VERSION} REQUIRED) + enable_testing() + + file(GLOB_RECURSE headers + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/${name}/include/*.hxx + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/*.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh + ${PROJECT_SUPPORT_DIR}/test/include/*.hpp + ) + + file(GLOB_RECURSE sources + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx + ${PROJECT_SUPPORT_DIR}/test/src/*.cpp + ${additional_sources} + ) + + add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}" OFF) + + target_compile_definitions(${name} PRIVATE -DPROJECT_TESTING) + + target_include_directories(${name} SYSTEM BEFORE + ${GTEST_INCLUDE_DIRS} + ) + + target_include_directories(${name} AFTER PRIVATE + ${PROJECT_SUPPORT_DIR}/test/include + ) + + target_link_libraries(${name} PRIVATE + GTest::gtest + GTest::gmock + ) + endif() +endfunction() diff --git a/cmake/hashes.cmake b/cmake/hashes.cmake new file mode 100644 index 0000000..f8eed6e --- /dev/null +++ b/cmake/hashes.cmake @@ -0,0 +1,43 @@ +set(BINUTILS_HASH ce2017e059d63e67ddb9240e9d4ec49c2893605035cd60e92ad53177f4377237) +set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca) +set(BOOST_HASH 9de758db755e8330a01d995b0a24d09798048400ac25c03fc5ea9be364b13c93) +set(CLI11_HASH 17e02b4cddc2fa348e5dbdbb582c59a3486fa2b2433e70a0c3bacb871334fd55) +set(CPP_HTTPLIB_HASH a66f908f50ccb119769adce44fe1eac75f81b6ffab7c4ac0211bb663ffeb2688) +set(CURL_HASH d4d9a5001b491f5726efe9b50bc4aad03029506e73c9261272e809c64b05e814) +set(CXXOPTS_HASH 3bfc70542c521d4b55a46429d808178916a579b28d048bd8c727ee76c39e2072) +set(EXPAT_HASH 85372797ff0673a8fc4a6be16466bb5a0ca28c0dcf3c6f7ac1686b4a3ba2aabb) +set(FLAC_HASH aea54ed186ad07a34750399cb27fc216a2b62d0ffcd6dc2e3064a3518c3146f8) +set(FMT_HASH aa3e8fbb6a0066c03454434add1f1fc23299e85758ceec0d7d2d974431481e40) +set(FONTCONFIG_HASH 6a33dc555cc9ba8b10caf7695878ef134eeb36d0af366041f639b1da9b6ed220) +set(FREETYPE2_HASH 174d9e53402e1bf9ec7277e22ec199ba3e55a6be2c0740cb18c0ee9850fc8c34) +set(GCC_HASH 7294d65cc1a0558cb815af0ca8c7763d86f7a31199794ede3f630c0d1b0a5723) +set(GTEST_HASH 65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c) +set(ICU_HASH a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2) +set(INNOSETUP_HASH fa73bf47a4da250d185d07561c2bfda387e5e20db77e4570004cf6a133cc10b1) +set(JSON_HASH 4b92eb0c06d10683f7447ce9406cb97cd4b453be18d7279320f7b2f025c10187) +set(LIBDSM_HASH 747c4563d6291303d9b085c9e7dc96ac44f91871dcac3e20480fdcc066eee88a) +set(LIBEVENT_HASH 7180a979aaa7000e1264da484f712d403fcf7679b1e9212c4e3d09f5c93efc24) +set(LIBICONV_HASH 3b08f5f4f9b4eb82f151a7040bfd6fe6c6fb922efe4b1659c66ea933276965e8) +set(LIBJPEG_TURBO_HASH 560f6338b547544c4f9721b18d8b87685d433ec78b3c644c70d77adad22c55e6) +set(LIBPNG_HASH 71158e53cfdf2877bc99bcab33641d78df3f48e6e0daad030afe9cb8c031aa46) +set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1) +set(LIBTASN_HASH 1613f0ac1cf484d6ec0ce3b8c06d56263cc7242f1c23b30d82d23de345a63f7a) +set(MINGW_HASH 5afe822af5c4edbf67daaf45eec61d538f49eef6b19524de64897c6b95828caf) +set(NANA_HASH 56f7b1ed006c750fccf8ef15ab1e83f96751f2dfdcb68d93e5f712a6c9b58bcb) +set(NUSPELL_HASH 5d4baa1daf833a18dc06ae0af0571d9574cc849d47daff6b9ce11dac0a5ded6a) +set(OGG_HASH 83e6704730683d004d20e21b8f7f55dcb3383cdf84c0daedf30bde175f774638) +set(OPENAL_HASH 7e1fecdeb45e7f78722b776c5cf30bd33934b961d7fd2a11e0494e064cc631ce) +set(OPENSSL_HASH b6a5f44b7eb69e3fa35dbf15524405b44837a481d43d81daddde3ff21fcbb8e9) +set(PKG_CONFIG_HASH 6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591) +set(PUGIXML_HASH 655ade57fa703fb421c2eb9a0113b5064bddb145d415dd1f88c79353d90d511a) +set(ROCKSDB_HASH 7ec942baab802b2845188d02bc5d4e42c29236e61bcbc08f5b3a6bdd92290c22) +set(SDL_HASH f50e59da0d383b2c84d43db625c6e23aae58f8f90eabd2944e2138ccc253744b) +set(SECP256K1_HASH 61583939f1f25b92e6401e5b819e399da02562de663873df3056993b40148701) +set(SFML_HASH 15ff4d608a018f287c6a885db0a2da86ea389e516d2323629e4d4407a7ce047f) +set(SPDLOG_HASH 15a04e69c222eb6c01094b5c7ff8a249b36bb22788d72519646fb85feb267e67) +set(SQLITE_HASH 1d3049dd0f830a025a53105fc79fd2ab9431aea99e137809d064d8ee8356b032) +set(STDUUID_HASH b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3) +set(VORBIS_HASH 270c76933d0934e42c5ee0a54a36280e2d87af1de3cc3e584806357e237afd13) +set(WINFSP_HASH 073a70e00f77423e34bed98b86e600def93393ba5822204fac57a29324db9f7a) +set(WXWIDGETS_HASH f936c8d694f9c49a367a376f99c751467150a4ed7cbf8f4723ef19b2d2d9998d) +set(ZLIB_HASH 17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c) diff --git a/cmake/libraries.cmake b/cmake/libraries.cmake new file mode 100644 index 0000000..18a8031 --- /dev/null +++ b/cmake/libraries.cmake @@ -0,0 +1,100 @@ +find_package(PkgConfig REQUIRED) + +set(Boost_USE_STATIC_LIBS ${PROJECT_STATIC_LINK}) +set(CURL_USE_STATIC_LIBS ${PROJECT_STATIC_LINK}) +set(OPENSSL_USE_STATIC_LIBS ${PROJECT_STATIC_LINK}) +set(SFML_STATIC_LIBRARIES ${PROJECT_STATIC_LINK}) +if (PROJECT_IS_DARWIN) + set(ZLIB_USE_STATIC_LIBS OFF) +else() + set(ZLIB_USE_STATIC_LIBS ${PROJECT_STATIC_LINK}) +endif() +set(wxWidgets_USE_STATIC ${PROJECT_STATIC_LINK}) +set(ICU_USE_STATIC_LIBS ${PROJECT_STATIC_LINK}) + +include(cmake/libraries/icu.cmake) +include(cmake/libraries/openssl.cmake) +include(cmake/libraries/boost.cmake) +include(cmake/libraries/backward_cpp.cmake) +include(cmake/libraries/cli11.cmake) +include(cmake/libraries/cpp_httplib.cmake) +include(cmake/libraries/curl.cmake) +include(cmake/libraries/cxxopts.cmake) +include(cmake/libraries/dtl.cmake) +include(cmake/libraries/flac.cmake) +include(cmake/libraries/fmt.cmake) +include(cmake/libraries/fontconfig.cmake) +include(cmake/libraries/freetype2.cmake) +include(cmake/libraries/fuse.cmake) +include(cmake/libraries/fzf.cmake) +include(cmake/libraries/gtkmm.cmake) +include(cmake/libraries/json.cmake) +include(cmake/libraries/libbitcoin_system.cmake) +include(cmake/libraries/libdsm.cmake) +include(cmake/libraries/libevent.cmake) +include(cmake/libraries/libiconv.cmake) +include(cmake/libraries/libjpeg_turbo.cmake) +include(cmake/libraries/libpng.cmake) +include(cmake/libraries/libsodium.cmake) +include(cmake/libraries/libtasn.cmake) +include(cmake/libraries/nana.cmake) +include(cmake/libraries/nuspell.cmake) +include(cmake/libraries/ogg.cmake) +include(cmake/libraries/openal.cmake) +include(cmake/libraries/pugixml.cmake) +include(cmake/libraries/rocksdb.cmake) +include(cmake/libraries/sago_platform_folders.cmake) +include(cmake/libraries/sdl.cmake) +include(cmake/libraries/secp256k1.cmake) +include(cmake/libraries/sfml.cmake) +include(cmake/libraries/spdlog.cmake) +include(cmake/libraries/sqlite.cmake) +include(cmake/libraries/stduuid.cmake) +include(cmake/libraries/testing.cmake) +include(cmake/libraries/tpl.cmake) +include(cmake/libraries/vlc.cmake) +include(cmake/libraries/vorbis.cmake) +include(cmake/libraries/winfsp.cmake) +include(cmake/libraries/wxwidgets.cmake) + +if(PROJECT_BUILD) + find_package(Threads REQUIRED) + find_package(ZLIB REQUIRED) + + include_directories(BEFORE SYSTEM ${ZLIB_INCLUDE_DIRS}) + link_libraries(${ZLIB_LIBRARIES}) + + if(PROJECT_IS_MINGW) + link_libraries( + advapi32 + bcrypt + comdlg32 + crypt32 + dbghelp + gdi32 + httpapi + iphlpapi + kernel32 + mswsock + ncrypt + ole32 + oleaut32 + rpcrt4 + secur32 + shell32 + shlwapi + user32 + userenv + uuid + version + winhttp + wininet + winspool + ws2_32 + ) + elseif(NOT PROJECT_IS_DARWIN) + link_libraries( + uring + ) + endif() +endif() diff --git a/cmake/libraries/backward_cpp.cmake b/cmake/libraries/backward_cpp.cmake new file mode 100644 index 0000000..0b22e8c --- /dev/null +++ b/cmake/libraries/backward_cpp.cmake @@ -0,0 +1,11 @@ +if(PROJECT_ENABLE_BACKWARD_CPP AND PROJECT_BUILD) + if(PROJECT_IS_MINGW) + add_definitions(-DPROJECT_ENABLE_BACKWARD_CPP) + + link_libraries(msvcr90) + else() + add_definitions(-DBACKWARD_HAS_BFD) + + link_libraries(bfd) + endif() +endif() diff --git a/cmake/libraries/boost.cmake b/cmake/libraries/boost.cmake new file mode 100644 index 0000000..f360960 --- /dev/null +++ b/cmake/libraries/boost.cmake @@ -0,0 +1,152 @@ +if(PROJECT_ENABLE_BOOST) + if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM) + set(BOOST_MAJOR_VERSION ${BOOST2_MAJOR_VERSION}) + set(BOOST_MINOR_VERSION ${BOOST2_MINOR_VERSION}) + set(BOOST_PATCH_VERSION ${BOOST2_PATCH_VERSION}) + endif() + + set(BOOST_ROOT ${PROJECT_EXTERNAL_BUILD_ROOT}) + set(BOOST_INCLUDE_DIR ${BOOST_ROOT}/include/boost-${BOOST_MINOR_VERSION}_${BOOST_MINOR_VERSION}) + + set(PROJECT_EXTERNAL_CMAKE_FLAGS + ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBOOST_INCLUDE_DIR=${BOOST_INCLUDE_DIR} + -DBOOST_ROOT=${BOOST_ROOT} + ) + + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_BOOST) + + if (PROJECT_ENABLE_LIBBITCOIN_SYSTEM) + find_package(Boost ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_PATCH_VERSION} EXACT + REQUIRED + COMPONENTS + atomic + chrono + date_time + filesystem + iostreams + locale + log + log_setup + program_options + random + regex + serialization + system + thread + wserialization + ) + else() + if(PROJECT_IS_DARWIN) + set(CMAKE_HAVE_THREADS_LIBRARY 1) + set(CMAKE_THREAD_LIBS_INIT "-lpthread") + set(CMAKE_USE_PTHREADS_INIT 1) + set(CMAKE_USE_WIN32_THREADS_INIT 0) + set(THREADS_PREFER_PTHREAD_FLAG ON) + endif() + + find_package(Boost ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_PATCH_VERSION} + REQUIRED + COMPONENTS + atomic + chrono + date_time + filesystem + iostreams + locale + log + log_setup + program_options + random + regex + serialization + thread + wserialization + ) + endif() + + include_directories(BEFORE SYSTEM + ${Boost_INCLUDE_DIRS} + ) + + link_libraries( + ${Boost_LIBRARIES} + ) + elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + if (PROJECT_ENABLE_LIBBITCOIN_SYSTEM OR NOT CMAKE_HOST_WIN32) + if(PROJECT_CMAKE_BUILD_TYPE STREQUAL "Debug") + set(BOOST_BUILD_TYPE_LOWER debug) + else() + set(BOOST_BUILD_TYPE_LOWER release) + endif() + + if(PROJECT_IS_ARM64) + set(BOOST_ARCH arm) + else() + set(BOOST_ARCH x86) + endif() + + if(PROJECT_STATIC_LINK) + set(BOOST_LINK static) + else() + set(BOOST_LINK "static,shared") + endif() + + set(BOOST_BUILD_ARGS + --openssldir=$ENV{OPENSSL_ROOT_DIR} + --prefix=${PROJECT_EXTERNAL_BUILD_ROOT} + address-model=64 + architecture=${BOOST_ARCH} + cxxstd=20 + cxxstd-dialect=gnu + cxxflags=-std=gnu++${CMAKE_CXX_STANDARD} + cxxstd=${CMAKE_CXX_STANDARD} + define=BOOST_ASIO_HAS_STD_STRING_VIEW + define=BOOST_SYSTEM_NO_DEPRECATED + link=${BOOST_LINK} + linkflags=-std=gnu++${CMAKE_CXX_STANDARD} + threading=multi + variant=${BOOST_BUILD_TYPE_LOWER} + ) + + if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM) + set(BOOST_URL_HASH SHA256=${BOOST2_HASH}) + else() + set(BOOST_URL_HASH SHA256=${BOOST_HASH}) + endif() + + ExternalProject_Add(boost_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/boost_${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_PATCH_VERSION}.tar.gz + URL_HASH ${BOOST_URL_HASH} + BUILD_IN_SOURCE 1 + LIST_SEPARATOR | + CONFIGURE_COMMAND ./bootstrap.sh + --with-libraries=atomic,chrono,date_time,filesystem,iostreams,locale,log,program_options,random,regex,serialization,system,test,thread + BUILD_COMMAND + ./b2 + -sNO_BZIP2=1 + -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL} + ${BOOST_BUILD_ARGS} + INSTALL_COMMAND + ./b2 + -sNO_BZIP2=1 + -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL} + ${BOOST_BUILD_ARGS} + install + ) + + list(APPEND PROJECT_DEPENDENCIES boost_project) + + if(PROJECT_IS_DARWIN OR PROJECT_REQUIRE_ALPINE) + add_dependencies(boost_project icu_project) + endif() + + if (NOT CMAKE_HOST_WIN32) + add_dependencies(boost_project openssl_project) + endif() + endif() + endif() +endif() diff --git a/cmake/libraries/cli11.cmake b/cmake/libraries/cli11.cmake new file mode 100644 index 0000000..842bf2d --- /dev/null +++ b/cmake/libraries/cli11.cmake @@ -0,0 +1,26 @@ +if(PROJECT_ENABLE_CLI11) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_CLI11) + + find_package(CLI11 ${CLI11_VERSION} REQUIRED) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(cli11_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/CLI11-${CLI11_VERSION}.tar.gz + URL_HASH SHA256=${CLI11_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DCLI11_WARNINGS_AS_ERRORS=OFF + -DCLI11_SINGLE_FILE=ON + -DCLI11_BUILD_DOCS=OFF + -DCLI11_BUILD_TESTS=OFF + -DCLI11_BUILD_EXAMPLES=OFF + -DCLI11_INSTALL=ON + ) + + list(APPEND PROJECT_DEPENDENCIES cli11_project) + endif() +endif() diff --git a/cmake/libraries/cpp_httplib.cmake b/cmake/libraries/cpp_httplib.cmake new file mode 100644 index 0000000..57c0ece --- /dev/null +++ b/cmake/libraries/cpp_httplib.cmake @@ -0,0 +1,36 @@ +if(PROJECT_ENABLE_CPP_HTTPLIB) + if(PROJECT_BUILD) + add_definitions( + -DCPPHTTPLIB_OPENSSL_SUPPORT + -DCPPHTTPLIB_TCP_NODELAY=true + -DCPPHTTPLIB_ZLIB_SUPPORT + -DPROJECT_ENABLE_CPP_HTTPLIB + ) + elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + ExternalProject_Add(cpphttplib_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/cpp-httplib-${CPP_HTTPLIB_VERSION}.tar.gz + URL_HASH SHA256=${CPP_HTTPLIB_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DHTTPLIB_REQUIRE_BROTLI=OFF + -DHTTPLIB_REQUIRE_OPENSSL=ON + -DHTTPLIB_REQUIRE_ZLIB=ON + -DHTTPLIB_TEST=OFF + -DHTTPLIB_USE_BROTLI_IF_AVAILABLE=OFF + -DHTTPLIB_USE_OPENSSL_IF_AVAILABLE=ON + -DHTTPLIB_USE_ZLIB_IF_AVAILABLE=ON + -DOPENSSL_USE_STATIC_LIBS=${OPENSSL_USE_STATIC_LIBS} + ) + + list(APPEND PROJECT_DEPENDENCIES cpphttplib_project) + + add_dependencies(cpphttplib_project curl_project) + if (NOT CMAKE_HOST_WIN32) + add_dependencies(cpphttplib_project openssl_project) + endif() + endif() +endif() diff --git a/cmake/libraries/curl.cmake b/cmake/libraries/curl.cmake new file mode 100644 index 0000000..133f17a --- /dev/null +++ b/cmake/libraries/curl.cmake @@ -0,0 +1,56 @@ +if(PROJECT_ENABLE_CURL) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_CURL) + + find_package(CURL ${CURL_VERSION} REQUIRED) + + include_directories(BEFORE SYSTEM ${CURL_INCLUDE_DIRS}) + + link_libraries(CURL::libcurl) + + if (EXISTS ${PROJECT_DIST_DIR}/cacert.pem) + file(REMOVE ${PROJECT_DIST_DIR}/cacert.pem) + endif() + file(DOWNLOAD https://curl.haxx.se/ca/cacert.pem ${PROJECT_DIST_DIR}/cacert.pem) + elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + ExternalProject_Add(curl_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/curl-${CURL_VERSION}.tar.gz + URL_HASH SHA256=${CURL_HASH} + LIST_SEPARATOR | + BUILD_COMMAND + ${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL} + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_CURL_EXE=OFF + -DBUILD_LIBCURL_DOCS=OFF + -DBUILD_MISC_DOCS=OFF + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_CURL=ON + -DBUILD_STATIC_LIBS=ON + -DBUILD_TESTING=OFF + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DCURL_BROTLI=OFF + -DCURL_CA_BUNDLE=./cacert.pem + -DCURL_CA_FALLBACK=ON + -DCURL_DISABLE_LDAP=ON + -DCURL_USE_LIBPSL=OFF + -DCURL_USE_LIBSSH2=OFF + -DCURL_USE_OPENSSL=${PROJECT_ENABLE_OPENSSL} + -DCURL_ZLIB=ON + -DCURL_ZSTD=OFF + -DENABLE_CURL_MANUAL=OFF + -DENABLE_THREADED_RESOLVER=ON + -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR} + -DOPENSSL_USE_STATIC_LIBS=${OPENSSL_USE_STATIC_LIBS} + -DUSE_LIBIDN2=OFF + -DUSE_NGHTTP2=OFF + -DZLIB_USE_STATIC_LIBS=${ZLIB_USE_STATIC_LIBS} + ) + + list(APPEND PROJECT_DEPENDENCIES curl_project) + + if (NOT CMAKE_HOST_WIN32) + add_dependencies(curl_project openssl_project) + endif() + endif() +endif() diff --git a/cmake/libraries/cxxopts.cmake b/cmake/libraries/cxxopts.cmake new file mode 100644 index 0000000..145c5c5 --- /dev/null +++ b/cmake/libraries/cxxopts.cmake @@ -0,0 +1,23 @@ +if(PROJECT_ENABLE_CXXOPTS) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_CXXOPTS) + elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + ExternalProject_Add(cxxopts_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/cxxopts-v${CXXOPTS_VERSION}.tar.gz + URL_HASH SHA256=${CXXOPTS_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DCXXOPTS_BUILD_EXAMPLES=OFF + -DCXXOPTS_BUILD_TESTS=OFF + -DCXXOPTS_ENABLE_INSTALL=ON + -DCXXOPTS_ENABLE_WARNINGS=OFF + -DCXXOPTS_USE_UNICODE_HELP=ON + ) + + list(APPEND PROJECT_DEPENDENCIES cxxopts_project) + endif() +endif() diff --git a/cmake/libraries/dtl.cmake b/cmake/libraries/dtl.cmake new file mode 100644 index 0000000..0fb9fae --- /dev/null +++ b/cmake/libraries/dtl.cmake @@ -0,0 +1,18 @@ +if(PROJECT_ENABLE_DTL) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_DTL) + else() + ExternalProject_Add(dtl_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/dtl-v${DTL_VERSION}.tar.gz + URL_HASH SHA256=d6dcc7834b4117b5c14456ea73b907d0e2bafa5058e3a06b2c504d53517438c5 + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + ) + + list(APPEND PROJECT_DEPENDENCIES dtl_project) + endif() +endif() diff --git a/cmake/libraries/flac.cmake b/cmake/libraries/flac.cmake new file mode 100644 index 0000000..c41af6f --- /dev/null +++ b/cmake/libraries/flac.cmake @@ -0,0 +1,31 @@ +if(PROJECT_ENABLE_FLAC) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_FLAC) + + find_package(FLAC ${FLAC_VERSION} REQUIRED) + + include_directories(BEFORE SYSTEM ${FLAC_INCLUDE_DIRS}) + + link_libraries(FLAC::FLAC) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(flac_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/flac-${FLAC_VERSION}.tar.gz + URL_HASH SHA256=${FLAC_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DBUILD_EXAMPLES=OFF + -DBUILD_PROGRAMS=OFF + -DBUILD_TESTING=OFF + -DBUILD_DOCS=OFF + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DINSTALL_MANPAGES=OFF + ) + + list(APPEND PROJECT_DEPENDENCIES flac_project) + + add_dependencies(flac_project libiconv_project vorbis_project) + endif() +endif() diff --git a/cmake/libraries/fmt.cmake b/cmake/libraries/fmt.cmake new file mode 100644 index 0000000..999cb45 --- /dev/null +++ b/cmake/libraries/fmt.cmake @@ -0,0 +1,26 @@ +if(PROJECT_ENABLE_FMT) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_FMT) + + find_package(fmt ${FMT_VERSION} REQUIRED) + + include_directories(BEFORE SYSTEM ${FMT_INCLUDE_DIRS}) + + link_libraries(fmt::fmt) + elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + ExternalProject_Add(fmt_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/fmt-${FMT_VERSION}.tar.gz + URL_HASH SHA256=${FMT_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DFMT_DOC=OFF + -DFMT_TEST=OFF + ) + + list(APPEND PROJECT_DEPENDENCIES fmt_project) + endif() +endif() diff --git a/cmake/libraries/fontconfig.cmake b/cmake/libraries/fontconfig.cmake new file mode 100644 index 0000000..7216ecc --- /dev/null +++ b/cmake/libraries/fontconfig.cmake @@ -0,0 +1,38 @@ +if(PROJECT_ENABLE_FONTCONFIG) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_FONTCONFIG) + + find_package(Fontconfig ${FONTCONFIG_VERSION} REQUIRED) + + include_directories(BEFORE SYSTEM ${FONTCONFIG_INCLUDE_DIRS}) + + link_libraries(Fontconfig::Fontconfig) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(fontconfig_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/fontconfig-${FONTCONFIG_VERSION}.tar.xz + URL_HASH SHA256=${FONTCONFIG_HASH} + BUILD_IN_SOURCE 1 + LIST_SEPARATOR | + CONFIGURE_COMMAND meson + setup + --prefix=${PROJECT_EXTERNAL_BUILD_ROOT} + _build + BUILD_COMMAND meson + compile + -C _build + INSTALL_COMMAND meson + install + -C _build + ) + + list(APPEND PROJECT_DEPENDENCIES fontconfig_project) + + add_dependencies(fontconfig_project + freetype2_project + libjpeg_turbo_project + libpng_project + ) + endif() +endif() + diff --git a/cmake/libraries/freetype2.cmake b/cmake/libraries/freetype2.cmake new file mode 100644 index 0000000..8ff55f1 --- /dev/null +++ b/cmake/libraries/freetype2.cmake @@ -0,0 +1,32 @@ +if(PROJECT_ENABLE_FREETYPE2) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_FREETYPE2) + + find_package(Freetype ${FREETYPE2_VERSION} REQUIRED) + + include_directories(BEFORE SYSTEM ${FREETYPE_INCLUDE_DIRS}) + + link_libraries(Freetype::Freetype) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(freetype2_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/freetype-${FREETYPE2_VERSION}.tar.gz + URL_HASH SHA256=${FREETYPE2_HASH} + BUILD_IN_SOURCE 1 + LIST_SEPARATOR | + CONFIGURE_COMMAND meson + setup + --prefix=${PROJECT_EXTERNAL_BUILD_ROOT} + _build + BUILD_COMMAND meson + compile + -C _build + INSTALL_COMMAND meson + install + -C _build + ) + + list(APPEND PROJECT_DEPENDENCIES freetype2_project) + endif() +endif() + diff --git a/cmake/libraries/fuse.cmake b/cmake/libraries/fuse.cmake new file mode 100644 index 0000000..6e45d35 --- /dev/null +++ b/cmake/libraries/fuse.cmake @@ -0,0 +1,45 @@ +if(PROJECT_ENABLE_FUSE AND NOT PROJECT_IS_MINGW) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_FUSE) + + include_directories(BEFORE SYSTEM ${PROJECT_FUSE_INCLUDE_DIRS}) + + if(PROJECT_FUSE STREQUAL "fuse3") + add_definitions(-DFUSE_USE_VERSION=30) + if(PROJECT_STATIC_LINK) + link_libraries(libfuse3.a) + else() + link_libraries(fuse3) + endif() + elseif(PROJECT_FUSE STREQUAL "fuse2") + add_definitions(-DFUSE_USE_VERSION=29) + if(PROJECT_STATIC_LINK) + link_libraries(libfuse.a) + else() + link_libraries(fuse) + endif() + endif() + else() + if (PROJECT_IS_DARWIN) + find_library(OSXFUSE NO_CACHE NAMES OSXFUSE) + if (NOT OSXFUSE) + message(FATAL_ERROR "FUSE for macOS not found (https://macfuse.github.io)") + endif () + set(PROJECT_FUSE fuse2) + else() + pkg_check_modules(LIBFUSE3 fuse3>=3.0.0) + if(LIBFUSE3_FOUND) + set(PROJECT_FUSE fuse3) + set(PROJECT_FUSE_INCLUDE_DIRS ${LIBFUSE3_INCLUDE_DIRS}) + else() + pkg_check_modules(LIBFUSE2 fuse>=2.9.0) + if(LIBFUSE2_FOUND) + set(PROJECT_FUSE fuse2) + set(PROJECT_FUSE_INCLUDE_DIRS ${LIBFUSE2_INCLUDE_DIRS}) + else() + message(FATAL_ERROR "fuse library not found") + endif() + endif() + endif() + endif() +endif() diff --git a/cmake/libraries/fzf.cmake b/cmake/libraries/fzf.cmake new file mode 100644 index 0000000..daf4c6a --- /dev/null +++ b/cmake/libraries/fzf.cmake @@ -0,0 +1,3 @@ +if(PROJECT_ENABLE_FZF AND PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_FZF) +endif() diff --git a/cmake/libraries/gtkmm.cmake b/cmake/libraries/gtkmm.cmake new file mode 100644 index 0000000..3e8fa6d --- /dev/null +++ b/cmake/libraries/gtkmm.cmake @@ -0,0 +1,23 @@ +if(PROJECT_ENABLE_GTKMM) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_GTKMM) + + find_package(PNG REQUIRED) + + pkg_check_modules(GTKMM REQUIRED gtkmm-${GTKMM_VERSION}) + + add_definitions(${GTKMM_DEFINITIONS}) + + include_directories( + ${GTKMM_INCLUDE_DIRS} + ${PNG_INCLUDE_DIRS} + ) + + link_directories(${GTKMM_LIBRARY_DIRS}) + + link_libraries( + ${GTKMM_LIBRARIES} + ${PNG_LIBRARIES} + ) + endif() +endif() diff --git a/cmake/libraries/icu.cmake b/cmake/libraries/icu.cmake new file mode 100644 index 0000000..db8a2dd --- /dev/null +++ b/cmake/libraries/icu.cmake @@ -0,0 +1,24 @@ +if((PROJECT_IS_DARWIN OR PROJECT_REQUIRE_ALPINE) AND NOT PROJECT_IS_MINGW AND NOT PROJECT_BUILD) + if(PROJECT_BUILD_SHARED_LIBS) + set(ICU_ENABLE_SHARED yes) + else() + set(ICU_ENABLE_SHARED no) + endif() + + ExternalProject_Add(icu_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/mingw64/icu-release-${ICU_VERSION}.tar.gz + URL_HASH SHA256=${ICU_HASH} + BUILD_IN_SOURCE 1 + LIST_SEPARATOR | + PATCH_COMMAND chmod +x ${PROJECT_3RD_PARTY_DIR}/icu_configure.sh + CONFIGURE_COMMAND cd icu4c/source && ${PROJECT_3RD_PARTY_DIR}/icu_configure.sh + ${PROJECT_MARCH} + ${PROJECT_EXTERNAL_BUILD_ROOT} + ${ICU_ENABLE_SHARED} + BUILD_COMMAND cd icu4c/source && make -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL} + INSTALL_COMMAND cd icu4c/source && make install + ) + + list(APPEND PROJECT_DEPENDENCIES icu_project) +endif() diff --git a/cmake/libraries/json.cmake b/cmake/libraries/json.cmake new file mode 100644 index 0000000..1a08005 --- /dev/null +++ b/cmake/libraries/json.cmake @@ -0,0 +1,29 @@ +if(PROJECT_ENABLE_JSON) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_JSON) + + find_package(nlohmann_json ${JSON_VERSION} REQUIRED) + + if(PROJECT_IS_MINGW AND PROJECT_IS_MINGW_UNIX) + include_directories(BEFORE SYSTEM /mingw64/include/nlohmann) + else() + include_directories(BEFORE SYSTEM ${PROJECT_EXTERNAL_BUILD_ROOT}/include/nlohmann) + endif() + elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + ExternalProject_Add(json_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/json-${JSON_VERSION}.tar.gz + URL_HASH SHA256=${JSON_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DJSON_BuildTests=OFF + -DJSON_Install=ON + -DJSON_MultipleHeaders=OFF + ) + + list(APPEND PROJECT_DEPENDENCIES json_project) + endif() +endif() diff --git a/cmake/libraries/libbitcoin_system.cmake b/cmake/libraries/libbitcoin_system.cmake new file mode 100644 index 0000000..6bbfb2a --- /dev/null +++ b/cmake/libraries/libbitcoin_system.cmake @@ -0,0 +1,51 @@ +if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM) + if(PROJECT_BUILD) + add_definitions( + -DPROJECT_ENABLE_LIBBITCOIN_SYSTEM + -DBC_STATIC + -DECMULT_GEN_PREC_BITS=4 + -DECMULT_WINDOW_SIZE=15 + -DWITH_ICU + ) + + set(LIBBITCOIN_SYSTEM_ROOT ${PROJECT_BUILD_DIR}/external/src/libbitcoin_system_project) + + include_directories(SYSTEM BEFORE ${LIBBITCOIN_SYSTEM_ROOT}/include) + + set(PROJECT_ADDITIONAL_SOURCES + ${PROJECT_ADDITIONAL_SOURCES} + ${LIBBITCOIN_SYSTEM_ROOT}/src/config/*.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/error.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/formats/*.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/math/*.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/math/external/*.c + ${LIBBITCOIN_SYSTEM_ROOT}/src/message/network_address.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/unicode/*.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/utility/istream_reader.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/utility/ostream_writer.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/utility/string.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/dictionary.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/electrum.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/electrum_dictionary.cpp + ${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/mnemonic.cpp + ) + else() + ExternalProject_Add(libbitcoin_system_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/libbitcoin-system-${LIBBITCOIN_SYSTEM_VERSION}.tar.gz + URL_HASH SHA256=0d10d79472e914620223f1ddb9396b0fa92ae5eb0b31acc14b9aa634a01d78b6 + CONFIGURE_COMMAND echo "No configure" + BUILD_COMMAND echo "No build" + INSTALL_COMMAND echo "No install" + ) + + list(APPEND PROJECT_DEPENDENCIES libbitcoin_system_project) + + if(NOT PROJECT_IS_MINGW_UNIX) + add_dependencies(libbitcoin_system_project + boost_project + secp256k1_project + ) + endif() + endif() +endif() diff --git a/cmake/libraries/libdsm.cmake b/cmake/libraries/libdsm.cmake new file mode 100644 index 0000000..ca90233 --- /dev/null +++ b/cmake/libraries/libdsm.cmake @@ -0,0 +1,87 @@ +if(PROJECT_ENABLE_LIBDSM) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_LIBDSM) + + find_library(libdsm_LIBRARIES NAMES libdsm.a) + + link_libraries(${libdsm_LIBRARIES}) + elseif(NOT PROJECT_IS_MINGW) + set(_meson_c_args "-I${PROJECT_EXTERNAL_BUILD_ROOT}/deps/include") + set(_meson_c_link_args "-L${PROJECT_EXTERNAL_BUILD_ROOT}/deps/lib -L${PROJECT_EXTERNAL_BUILD_ROOT}/deps/lib64") + set(_meson_host_arg "") + set(_meson_host_file "${PROJECT_EXTERNAL_BUILD_ROOT}/libdsm_host_machine.ini") + + if(PROJECT_IS_DARWIN) + set(_mac_arch_raw "${CMAKE_OSX_ARCHITECTURES}") + string(TOLOWER "${_mac_arch_raw}" _mac_arch) + + if(_mac_arch MATCHES ";") + set(_meson_c_args "${_meson_c_args}|-arch|arm64|-arch|x86_64") + set(_meson_c_link_args "${_meson_c_link_args}|-arch|arm64|-arch|x86_64") + else() + if(_mac_arch STREQUAL "arm64") + set(_meson_cpu_family "aarch64") + set(_meson_cpu "arm64") + set(_meson_c_args "${_meson_c_args}|-arch|arm64") + set(_meson_c_link_args "${_meson_c_link_args}|-arch|arm64") + elseif(_mac_arch STREQUAL "x86_64") + set(_meson_cpu_family "x86_64") + set(_meson_cpu "x86_64") + set(_meson_c_args "${_meson_c_args}|-arch|x86_64") + set(_meson_c_link_args "${_meson_c_link_args}|-arch|x86_64") + endif() + + if(DEFINED _meson_cpu_family AND DEFINED _meson_cpu) + file(WRITE "${_meson_host_file}" + "[binaries] + c = 'clang' + cpp = 'clang++' + + [host_machine] + system = 'darwin' + cpu_family = '${_meson_cpu_family}' + cpu = '${_meson_cpu}' + endian = 'little' + " + ) + + set(_meson_host_arg "--native-file=${_meson_host_file}") + endif() + endif() + endif() + + ExternalProject_Add(libdsm_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/libdsm-${LIBDSM_VERSION}.tar.gz + URL_HASH SHA256=${LIBDSM_HASH} + BUILD_IN_SOURCE 1 + LIST_SEPARATOR | + PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/libdsm_patch.sh + ${PROJECT_3RD_PARTY_DIR} + ${CMAKE_BINARY_DIR}/external/src/libdsm_project + CONFIGURE_COMMAND meson + setup + -Dc_args="${_meson_c_args}" + -Dcpp_args="${_meson_c_args}" + -Dc_link_args="${_meson_c_link_args}" + -Dcpp_link_args="${_meson_c_link_args}" + ${_meson_host_arg} + --prefix=${PROJECT_EXTERNAL_BUILD_ROOT} + -Dbinaries=false + -Ddefault_library=static + _build + BUILD_COMMAND meson + compile -C _build + INSTALL_COMMAND meson + install -C _build + ) + + list(APPEND PROJECT_DEPENDENCIES libdsm_project) + + add_dependencies(libdsm_project + libiconv_project + libtasn1_project + openssl_project + ) + endif() +endif() diff --git a/cmake/libraries/libevent.cmake b/cmake/libraries/libevent.cmake new file mode 100644 index 0000000..ac86fc6 --- /dev/null +++ b/cmake/libraries/libevent.cmake @@ -0,0 +1,49 @@ +if(PROJECT_ENABLE_LIBEVENT) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_LIBEVENT) + + if(PROJECT_IS_MINGW AND NOT PROJECT_IS_MINGW_UNIX) + pkg_check_modules(LIBEVENT REQUIRED libevent>=${LIBEVENT_VERSION}) + else() + set(LIBEVENT_STATIC_LINK ${PROJECT_STATIC_LINK}) + find_package(Libevent ${LIBEVENT_VERSION} REQUIRED) + endif() + + include_directories(BEFORE SYSTEM ${LIBEVENT_INCLUDE_DIRS}) + if (PROJECT_IS_MINGW_UNIX) + unset(LIBEVENT_LIBRARIES) + set(LIBEVENT_LIBRARIES + /mingw64/lib/libevent.dll.a + /mingw64/lib/libevent_core.dll.a + /mingw64/lib/libevent_extra.dll.a + ) + endif() + link_libraries(${LIBEVENT_LIBRARIES}) + elseif(NOT PROJECT_IS_MINGW) + if(PROJECT_BUILD_SHARED_LIBS) + set(LIBEVENT_LIBRARY_TYPE BOTH) + else() + set(LIBEVENT_LIBRARY_TYPE STATIC) + endif() + + ExternalProject_Add(libevent_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/libevent-${LIBEVENT_VERSION}-stable.tar.gz + URL_HASH SHA256=${LIBEVENT_HASH} + LIST_SEPARATOR | + PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/libevent_patch.sh + ${PROJECT_3RD_PARTY_DIR} + ${CMAKE_BINARY_DIR}/external/src/libevent_project + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DEVENT__DISABLE_OPENSSL=ON + -DEVENT__DISABLE_SAMPLES=ON + -DEVENT__DISABLE_TESTS=ON + -DEVENT__LIBRARY_TYPE=${LIBEVENT_LIBRARY_TYPE} + ) + + list(APPEND PROJECT_DEPENDENCIES libevent_project) + endif() +endif() diff --git a/cmake/libraries/libiconv.cmake b/cmake/libraries/libiconv.cmake new file mode 100644 index 0000000..9844e80 --- /dev/null +++ b/cmake/libraries/libiconv.cmake @@ -0,0 +1,25 @@ +if(PROJECT_ENABLE_LIBICONV) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_LIBICONV) + + find_library(libiconv_LIBRARIES NAMES libiconv.a) + + link_libraries(${libiconv_LIBRARIES}) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(libiconv_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/libiconv-${LIBICONV_VERSION}.tar.gz + URL_HASH SHA256=${LIBICONV_HASH} + BUILD_IN_SOURCE 1 + LIST_SEPARATOR | + CONFIGURE_COMMAND ./configure + --enable-shared=no + --enable-static=yes + --prefix=${PROJECT_EXTERNAL_BUILD_ROOT} + BUILD_COMMAND make -j1 + INSTALL_COMMAND make install + ) + + list(APPEND PROJECT_DEPENDENCIES libiconv_project) + endif() +endif() diff --git a/cmake/libraries/libjpeg_turbo.cmake b/cmake/libraries/libjpeg_turbo.cmake new file mode 100644 index 0000000..f48c23d --- /dev/null +++ b/cmake/libraries/libjpeg_turbo.cmake @@ -0,0 +1,27 @@ +if(PROJECT_ENABLE_LIBJPEG_TURBO) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_LIBJPEG_TURBO) + + find_package(JPEG ${LIBJPEG_TURBO_VERSION} REQUIRED) + + include_directories(${JPEG_INCLUDE_DIRS}) + + link_libraries(JPEG::JPEG) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(libjpeg_turbo_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/libjpeg_turbo-${LIBJPEG_TURBO_VERSION}.tar.gz + URL_HASH SHA256=${LIBJPEG_TURBO_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DENABLE_SHARED=${PROJECT_BUILD_SHARED_LIBS} + -DENABLE_STATIC=ON + ) + + list(APPEND PROJECT_DEPENDENCIES libjpeg_turbo_project) + endif() +endif() + diff --git a/cmake/libraries/libpng.cmake b/cmake/libraries/libpng.cmake new file mode 100644 index 0000000..4de3519 --- /dev/null +++ b/cmake/libraries/libpng.cmake @@ -0,0 +1,30 @@ +if(PROJECT_ENABLE_LIBPNG) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_PNG) + + find_package(PNG ${LIBPNG_VERSION} REQUIRED ) + + include_directories(${PNG_INCLUDE_DIRS}) + + link_libraries(PNG::PNG) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(libpng_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/libpng-v${LIBPNG_VERSION}.tar.gz + URL_HASH SHA256=${LIBPNG_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DENABLE_SHARED=${PROJECT_BUILD_SHARED_LIBS} + -DPNG_SHARED=ON + -DPNG_STATIC=ON + -DPNG_TESTS=OFF + -DPNG_TOOLS=OFF + ) + + list(APPEND PROJECT_DEPENDENCIES libpng_project) + endif() +endif() + diff --git a/cmake/libraries/libsodium.cmake b/cmake/libraries/libsodium.cmake new file mode 100644 index 0000000..b547b59 --- /dev/null +++ b/cmake/libraries/libsodium.cmake @@ -0,0 +1,48 @@ +if(PROJECT_ENABLE_LIBSODIUM) + if(PROJECT_BUILD) + pkg_check_modules(SODIUM libsodium>=${LIBSODIUM_VERSION} REQUIRED) + + add_definitions(-DPROJECT_ENABLE_LIBSODIUM) + + include_directories(BEFORE SYSTEM ${SODIUM_INCLUDE_DIRS}) + + if(PROJECT_IS_MINGW_UNIX) + if(PROJECT_STATIC_LINK) + link_libraries(/mingw64/lib/libsodium.a) + else() + link_libraries(/mingw64/lib/libsodium.dll.a) + endif() + else() + link_libraries(${SODIUM_LIBRARIES}) + endif() + elseif(NOT PROJECT_IS_MINGW) + if(PROJECT_IS_MINGW) + set(LIBSODIUM_TYPE mingw64) + else() + set(LIBSODIUM_TYPE linux) + endif() + + if(PROJECT_BUILD_SHARED_LIBS) + set(LIBSODIUM_ENABLE_SHARED yes) + else() + set(LIBSODIUM_ENABLE_SHARED no) + endif() + + ExternalProject_Add(libsodium_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/libsodium-${LIBSODIUM_VERSION}.tar.gz + URL_HASH SHA256=${LIBSODIUM_HASH} + BUILD_IN_SOURCE 1 + LIST_SEPARATOR | + CONFIGURE_COMMAND ${PROJECT_3RD_PARTY_DIR}/libsodium_configure.sh + ${LIBSODIUM_TYPE} + ${PROJECT_MARCH} + ${PROJECT_EXTERNAL_BUILD_ROOT} + ${LIBSODIUM_ENABLE_SHARED} + BUILD_COMMAND make -j1 + INSTALL_COMMAND make install + ) + + list(APPEND PROJECT_DEPENDENCIES libsodium_project) + endif() +endif() diff --git a/cmake/libraries/libtasn.cmake b/cmake/libraries/libtasn.cmake new file mode 100644 index 0000000..4ecc83c --- /dev/null +++ b/cmake/libraries/libtasn.cmake @@ -0,0 +1,30 @@ +if(PROJECT_ENABLE_LIBTASN) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_LIBTASN) + + find_library(libtasn1_LIBRARIES NAMES libtasn1.a) + + link_libraries(${libtasn1_LIBRARIES}) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(libtasn1_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/libtasn1-${LIBTASN_VERSION}.tar.gz + URL_HASH SHA256=${LIBTASN_HASH} + BUILD_IN_SOURCE 1 + LIST_SEPARATOR | + CONFIGURE_COMMAND ./configure + --disable-doc + --enable-shared=no + --enable-static=yes + --prefix=${PROJECT_EXTERNAL_BUILD_ROOT} + BUILD_COMMAND make -j1 + INSTALL_COMMAND make install + ) + + list(APPEND PROJECT_DEPENDENCIES libtasn1_project) + + if (PROJECT_ENABLE_OPENSSL) + add_dependencies(libtasn1_project openssl_project) + endif() + endif() +endif() diff --git a/cmake/libraries/nana.cmake b/cmake/libraries/nana.cmake new file mode 100644 index 0000000..1776868 --- /dev/null +++ b/cmake/libraries/nana.cmake @@ -0,0 +1,48 @@ +if(PROJECT_ENABLE_NANA) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_NANA) + + find_library(NANA_LIBRARIES NAMES nana REQUIRED) + + if (NOT PROJECT_IS_MINGW) + find_package(X11 REQUIRED) + endif() + + include_directories(SYSTEM ${X11_INCLUDE_DIR}) + + link_libraries( + ${NANA_LIBRARIES} + ${X11_LIBRARIES} + ) + + if (NOT PROJECT_IS_MINGW) + link_libraries( + X11::Xft + X11::Xcursor + ) + endif() + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(nana_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/nana-v${NANA_VERSION}.tar.gz + URL_HASH SHA256=${NANA_HASH} + LIST_SEPARATOR | + PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/nana_patch.sh + ${PROJECT_3RD_PARTY_DIR} + ${CMAKE_BINARY_DIR}/external/src/nana_project + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX=${PROJECT_EXTERNAL_BUILD_ROOT} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DNANA_CMAKE_ENABLE_AUDIO=OFF + -DNANA_CMAKE_ENABLE_JPEG=ON + -DNANA_CMAKE_ENABLE_PNG=ON + -DNANA_CMAKE_INSTALL=ON + ) + + list(APPEND PROJECT_DEPENDENCIES nana_project) + + add_dependencies(nana_project libjpeg_turbo_project libpng_project) + endif() +endif() diff --git a/cmake/libraries/nuspell.cmake b/cmake/libraries/nuspell.cmake new file mode 100644 index 0000000..0e9cd58 --- /dev/null +++ b/cmake/libraries/nuspell.cmake @@ -0,0 +1,27 @@ +if(PROJECT_ENABLE_NUSPELL) + if(PROJECT_BUILD) + find_package(Nuspell ${NUSPELL_VERSION} REQUIRED) + + add_definitions(-DPROJECT_ENABLE_NUSPELL) + + include_directories(BEFORE SYSTEM ${NUSPELL_INCLUDE_DIRS}) + + link_libraries(Nuspell::nuspell) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(nuspell_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/nuspell-v${NUSPELL_VERSION}.tar.gz + URL_HASH SHA256=${NUSPELL_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_DOCS=OFF + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DBUILD_TESTING=OFF + -DBUILD_TOOLS=OFF + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + ) + + list(APPEND PROJECT_DEPENDENCIES nuspell_project) + endif() +endif() diff --git a/cmake/libraries/ogg.cmake b/cmake/libraries/ogg.cmake new file mode 100644 index 0000000..d0b0ed6 --- /dev/null +++ b/cmake/libraries/ogg.cmake @@ -0,0 +1,24 @@ +if(PROJECT_ENABLE_OGG) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_OGG) + + find_package(Ogg ${OGG_VERSION} REQUIRED) + + include_directories(BEFORE SYSTEM ${OGG_INCLUDE_DIRS}) + + link_libraries(Ogg::ogg) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(ogg_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/ogg-v${OGG_VERSION}.tar.gz + URL_HASH SHA256=${OGG_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + ) + + list(APPEND PROJECT_DEPENDENCIES ogg_project) + endif() +endif() diff --git a/cmake/libraries/openal.cmake b/cmake/libraries/openal.cmake new file mode 100644 index 0000000..0544704 --- /dev/null +++ b/cmake/libraries/openal.cmake @@ -0,0 +1,24 @@ +if(PROJECT_ENABLE_OPENAL) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_OPENAL) + + find_package(OpenAL ${OPENAL_VERSION} REQUIRED) + + include_directories(BEFORE SYSTEM ${OPENAL_INCLUDE_DIR}) + + link_libraries(${OPENAL_LIBRARY}) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(openal_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/openal-${OPENAL_VERSION}.tar.gz + URL_HASH SHA256=${OPENAL_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + ) + + list(APPEND PROJECT_DEPENDENCIES openal_project) + endif() +endif() diff --git a/cmake/libraries/openssl.cmake b/cmake/libraries/openssl.cmake new file mode 100644 index 0000000..e90d50e --- /dev/null +++ b/cmake/libraries/openssl.cmake @@ -0,0 +1,59 @@ +set(OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT_DIR}) + +if(PROJECT_ENABLE_OPENSSL) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_OPENSSL) + + find_package(OpenSSL ${OPENSSL_VERSION} REQUIRED) + + include_directories(BEFORE SYSTEM ${OPENSSL_INCLUDE_DIR}) + + link_libraries( + OpenSSL::Crypto + OpenSSL::SSL + ) + elseif(NOT PROJECT_IS_MINGW) + if(PROJECT_IS_MINGW) + set(OPENSSL_COMPILE_TYPE mingw64) + elseif(PROJECT_IS_DARWIN) + if(PROJECT_IS_ARM64) + set(OPENSSL_COMPILE_TYPE darwin64-arm64) + else() + set(OPENSSL_COMPILE_TYPE darwin64-x86_64) + endif() + elseif(PROJECT_IS_ARM64) + set(OPENSSL_COMPILE_TYPE linux-aarch64) + else() + set(OPENSSL_COMPILE_TYPE linux-x86_64) + endif() + + if(PROJECT_IS_MINGW_UNIX) + set(OPENSSL_CROSS_PREFIX "--cross-compile-prefix=x86_64-w64-mingw32-") + endif() + + if(PROJECT_BUILD_SHARED_LIBS) + set(OPENSSL_NO_SHARED shared) + else() + set(OPENSSL_NO_SHARED no-shared) + endif() + + ExternalProject_Add(openssl_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/openssl-${OPENSSL_VERSION}.tar.gz + URL_HASH SHA256=${OPENSSL_HASH} + BUILD_IN_SOURCE 1 + LIST_SEPARATOR | + CONFIGURE_COMMAND ./Configure + ${OPENSSL_COMPILE_TYPE} + ${OPENSSL_CROSS_PREFIX} + --prefix=${PROJECT_EXTERNAL_BUILD_ROOT} + no-apps + no-docs + ${OPENSSL_NO_SHARED} + BUILD_COMMAND make -j1 + INSTALL_COMMAND make install + ) + + list(APPEND PROJECT_DEPENDENCIES openssl_project) + endif() +endif() diff --git a/cmake/libraries/pugixml.cmake b/cmake/libraries/pugixml.cmake new file mode 100644 index 0000000..9f3ebf7 --- /dev/null +++ b/cmake/libraries/pugixml.cmake @@ -0,0 +1,28 @@ +if(PROJECT_ENABLE_PUGIXML) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_PUGIXML) + + find_package(pugixml ${PUGIXML_VERSION} REQUIRED) + + include_directories(BEFORE SYSTEM ${PUGIXML_INCLUDE_DIR}) + + if(PROJECT_STATIC_LINK) + link_libraries(pugixml::static) + else() + link_libraries(pugixml::pugixml) + endif() + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(pugixml_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/pugixml-${PUGIXML_VERSION}.tar.gz + URL_HASH SHA256=${PUGIXML_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + ) + + list(APPEND PROJECT_DEPENDENCIES pugixml_project) + endif() +endif() diff --git a/cmake/libraries/rocksdb.cmake b/cmake/libraries/rocksdb.cmake new file mode 100644 index 0000000..acf9d42 --- /dev/null +++ b/cmake/libraries/rocksdb.cmake @@ -0,0 +1,38 @@ +if(PROJECT_ENABLE_ROCKSDB) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_ROCKSDB) + find_library(ROCKSDB_LIBRARY NAMES librocksdb.a REQUIRED) + link_libraries(${ROCKSDB_LIBRARY}) + elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + ExternalProject_Add(rocksdb_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/rocksdb-${ROCKSDB_VERSION}.tar.gz + URL_HASH SHA256=${ROCKSDB_HASH} + LIST_SEPARATOR | + BUILD_COMMAND + ${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL} + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=OFF + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DFAIL_ON_WARNINGS=OFF + -DPORTABLE=1 + -DROCKSDB_BUILD_SHARED=OFF + -DROCKSDB_INSTALL_ON_WINDOWS=ON + -DWITH_BENCHMARK=OFF + -DWITH_BENCHMARK_TOOLS=OFF + -DWITH_BZ2=OFF + -DWITH_CORE_TOOLS=OFF + -DWITH_EXAMPLES=OFF + -DWITH_GFLAGS=OFF + -DWITH_IOSTATS_CONTEXT=OFF + -DWITH_PERF_CONTEXT=OFF + -DWITH_TESTS=OFF + -DWITH_TOOLS=OFF + -DWITH_TRACE_TOOLS=OFF + -DWITH_ZLIB=ON + ) + + list(APPEND PROJECT_DEPENDENCIES rocksdb_project) + endif() +endif() diff --git a/cmake/libraries/sago_platform_folders.cmake b/cmake/libraries/sago_platform_folders.cmake new file mode 100644 index 0000000..38b80d4 --- /dev/null +++ b/cmake/libraries/sago_platform_folders.cmake @@ -0,0 +1,3 @@ +if(PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS AND PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_SAGO_PLATFORM_FOLDERS) +endif() diff --git a/cmake/libraries/sdl.cmake b/cmake/libraries/sdl.cmake new file mode 100644 index 0000000..eae534c --- /dev/null +++ b/cmake/libraries/sdl.cmake @@ -0,0 +1,33 @@ +if(PROJECT_ENABLE_SDL) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_SDL) + + set(SDL2_NO_MWINDOWS ON) + find_package(SDL2 ${SDL_VERSION} REQUIRED) + + include_directories(SYSTEM ${SDL2_INCLUDE_DIRS}) + + link_libraries(SDL2::SDL2) + elseif(NOT PROJECT_IS_MINGW) + if(PROJECT_BUILD_SHARED_LIBS) + set(SDL_CONFIGURE_OPTS --enable-shared=yes --enable-static=yes) + else() + set(SDL_CONFIGURE_OPTS --enable-shared=no --enable-static=yes) + endif() + + ExternalProject_Add(sdl_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/sdl-${SDL_VERSION}.tar.gz + URL_HASH SHA256=${SDL_HASH} + BUILD_IN_SOURCE 1 + LIST_SEPARATOR | + CONFIGURE_COMMAND ./configure + --prefix=${PROJECT_EXTERNAL_BUILD_ROOT} + ${SDL_CONFIGURE_OPTS} + BUILD_COMMAND make -j1 + INSTALL_COMMAND make install + ) + + list(APPEND PROJECT_DEPENDENCIES sdl_project) + endif() +endif() diff --git a/cmake/libraries/secp256k1.cmake b/cmake/libraries/secp256k1.cmake new file mode 100644 index 0000000..aff0559 --- /dev/null +++ b/cmake/libraries/secp256k1.cmake @@ -0,0 +1,35 @@ +if(PROJECT_ENABLE_SECP256K1) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_SECP256K1) + + pkg_check_modules(SECP256K1 libsecp256k1=${SECP256K1_VERSION} REQUIRED) + + include_directories(BEFORE SYSTEM ${SECP256K1_INCLUDE_DIRS}) + + link_libraries(${SECP256K1_LINK_LIBRARIES}) + elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + if(PROJECT_BUILD_SHARED_LIBS) + set(SECP256K1_ENABLE_SHARED yes) + else() + set(SECP256K1_ENABLE_SHARED no) + endif() + + ExternalProject_Add(secp256k1_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/secp256k1-${SECP256K1_VERSION}.tar.gz + URL_HASH SHA256=${SECP256K1_HASH} + BUILD_IN_SOURCE 1 + LIST_SEPARATOR | + CONFIGURE_COMMAND ./autogen.sh && ./configure + --enable-shared=${SECP256K1_ENABLE_SHARED} + --enable-static=yes + --enable-module-ecdh + --enable-module-recovery + --prefix=${PROJECT_EXTERNAL_BUILD_ROOT} + BUILD_COMMAND make -j1 + INSTALL_COMMAND make install + ) + + list(APPEND PROJECT_DEPENDENCIES secp256k1_project) + endif() +endif() diff --git a/cmake/libraries/sfml.cmake b/cmake/libraries/sfml.cmake new file mode 100644 index 0000000..c9a32e4 --- /dev/null +++ b/cmake/libraries/sfml.cmake @@ -0,0 +1,59 @@ +if(PROJECT_ENABLE_SFML) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_SFML) + + find_package(OpenGL REQUIRED) + find_package(X11 REQUIRED) + + find_package(SFML ${SFML_VERSION} + COMPONENTS + audio + graphics + network + system + window + REQUIRED + ) + + if(NOT PROJECT_BUILD_SHARED_LIBS) + set(SFML_STATIC_LIB_APPEND "-s") + endif() + + link_libraries( + ${X11_LIBRARIES} + sfml-audio${SFML_STATIC_LIB_APPEND} + sfml-graphics${SFML_STATIC_LIB_APPEND} + sfml-network${SFML_STATIC_LIB_APPEND} + sfml-system${SFML_STATIC_LIB_APPEND} + sfml-window${SFML_STATIC_LIB_APPEND} + ) + + include_directories(BEFORE SYSTEM + ${X11_INCLUDE_DIR} + ${SFML_INCLUDE_DIR} + ) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(sfml_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/SFML-${SFML_VERSION}.tar.gz + URL_HASH SHA256=${SFML_HASH} + PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/SFML_patch.sh + LIST_SEPARATOR | + BUILD_COMMAND + ${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL} + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + ) + + list(APPEND PROJECT_DEPENDENCIES sfml_project) + + add_dependencies(sfml_project + flac_project + fontconfig_project + freetype2_project + openal_project + ) + endif() +endif() diff --git a/cmake/libraries/spdlog.cmake b/cmake/libraries/spdlog.cmake new file mode 100644 index 0000000..f5dd23a --- /dev/null +++ b/cmake/libraries/spdlog.cmake @@ -0,0 +1,26 @@ +if(PROJECT_ENABLE_SPDLOG) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_SPDLOG) + + find_package(spdlog ${SPDLOG_VERSION} REQUIRED) + + include_directories(BEFORE SYSTEM ${SPDLOG_INCLUDE_DIRS}) + + link_libraries(spdlog::spdlog) + elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + ExternalProject_Add(spdlog_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/spdlog-${SPDLOG_VERSION}.tar.gz + URL_HASH SHA256=${SPDLOG_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DSPDLOG_BUILD_EXAMPLE=OFF + -DSPDLOG_FMT_EXTERNAL=OFF + -DSPDLOG_FMT_EXTERNAL_HO=OFF + ) + + list(APPEND PROJECT_DEPENDENCIES spdlog_project) + endif() +endif() diff --git a/cmake/libraries/sqlite.cmake b/cmake/libraries/sqlite.cmake new file mode 100644 index 0000000..b37e895 --- /dev/null +++ b/cmake/libraries/sqlite.cmake @@ -0,0 +1,29 @@ +if(PROJECT_ENABLE_SQLITE) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_SQLITE) + if (PROJECT_IS_MINGW AND NOT PROJECT_IS_MINGW_UNIX) + pkg_check_modules(SQLITE3 REQUIRED sqlite3) + include_directories(SYSTEM BEFORE ${SQLITE3_INCLUDE_DIRS}) + link_libraries(${SQLITE3_LIBRARIES}) + else() + set(SQLITE_SYSTEM_ROOT ${PROJECT_BUILD_DIR}/external/src/sqlite_project) + + include_directories(SYSTEM BEFORE ${SQLITE_SYSTEM_ROOT}) + + list(APPEND PROJECT_ADDITIONAL_SOURCES + ${SQLITE_SYSTEM_ROOT}/sqlite3.c + ) + endif() + elseif(NOT PROJECT_IS_MINGW OR PROJECT_IS_MINGW_UNIX) + ExternalProject_Add(sqlite_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/sqlite-amalgamation-${SQLITE_VERSION}.zip + URL_HASH SHA256=${SQLITE_HASH} + CONFIGURE_COMMAND echo "No configure" + BUILD_COMMAND echo "No build" + INSTALL_COMMAND echo "No install" + ) + + list(APPEND PROJECT_DEPENDENCIES sqlite_project) + endif() +endif() diff --git a/cmake/libraries/stduuid.cmake b/cmake/libraries/stduuid.cmake new file mode 100644 index 0000000..74b0db4 --- /dev/null +++ b/cmake/libraries/stduuid.cmake @@ -0,0 +1,27 @@ +if(PROJECT_ENABLE_STDUUID) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_STDUUID) + + find_package(stduuid REQUIRED) + + include_directories(BEFORE SYSTEM ${stduuid_INCLUDE_DIRS}) + + link_libraries(${stduuid_LIBRARIES}) + elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + ExternalProject_Add(stduuid_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/stduuid-${STDUUID_VERSION}.tar.gz + URL_HASH SHA256=${STDUUID_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DUUID_BUILD_TESTS=OFF + -DUUID_ENABLE_INSTALL=ON + -DUUID_USING_CXX20_SPAN=ON + ) + + list(APPEND PROJECT_DEPENDENCIES stduuid_project) + endif() +endif() diff --git a/cmake/libraries/testing.cmake b/cmake/libraries/testing.cmake new file mode 100644 index 0000000..a0012c6 --- /dev/null +++ b/cmake/libraries/testing.cmake @@ -0,0 +1,18 @@ +if (PROJECT_ENABLE_TESTING) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_TESTING) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(gtest_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/googletest-${GTEST_VERSION}.tar.gz + URL_HASH SHA256=${GTEST_HASH} + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + ) + + list(APPEND PROJECT_DEPENDENCIES gtest_project) + endif() +endif() diff --git a/cmake/libraries/tpl.cmake b/cmake/libraries/tpl.cmake new file mode 100644 index 0000000..ffd8604 --- /dev/null +++ b/cmake/libraries/tpl.cmake @@ -0,0 +1,24 @@ +if(PROJECT_ENABLE_TPL) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_TPL) + + find_package(tiny-process-library REQUIRED) + + link_libraries(tiny-process-library::tiny-process-library) + elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32) + ExternalProject_Add(tpl_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/tiny-process-library.tar.gz + URL_HASH SHA256=82e46657e697aff5bf980387c86ef3aa05bb184622abbd75663a4df549c68f73 + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DBUILD_TESTING=OFF + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + ) + + list(APPEND PROJECT_DEPENDENCIES tpl_project) + endif() +endif() + diff --git a/cmake/libraries/vlc.cmake b/cmake/libraries/vlc.cmake new file mode 100644 index 0000000..53824e6 --- /dev/null +++ b/cmake/libraries/vlc.cmake @@ -0,0 +1,16 @@ +if(PROJECT_ENABLE_VLC AND PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_VLC) + if (PROJECT_IS_MINGW) + set(libvlc_INCLUDE_DIRS ${PROJECT_3RD_PARTY_DIR}/vlc/sdk/include) + + set(libvlc_LIBRARIES + ${PROJECT_3RD_PARTY_DIR}/vlc/sdk/lib/libvlc.lib + ${PROJECT_3RD_PARTY_DIR}/vlc/sdk/lib/libvlccore.lib + ) + else() + pkg_check_modules(libvlc REQUIRED libvlc>=${VLC_VERSION}) + endif() + + include_directories(BEFORE SYSTEM ${libvlc_INCLUDE_DIRS}) + link_libraries(${libvlc_LIBRARIES}) +endif() diff --git a/cmake/libraries/vorbis.cmake b/cmake/libraries/vorbis.cmake new file mode 100644 index 0000000..b00f4a8 --- /dev/null +++ b/cmake/libraries/vorbis.cmake @@ -0,0 +1,34 @@ +if(PROJECT_ENABLE_VORBIS) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_VORBIS) + + if(PROJECT_IS_MINGW AND NOT PROJECT_IS_MINGW_UNIX) + pkg_check_modules(VORBIS REQUIRED vorbis>=${VORBIS_VERSION}) + link_libraries(${VORBIS_LINK_LIBRARIES}) + else() + find_package(Vorbis ${VORBIS_VERSION} REQUIRED) + link_libraries(Vorbis::vorbis) + endif() + + include_directories(BEFORE SYSTEM ${VORBIS_INCLUDE_DIRS}) + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(vorbis_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/vorbis-v${VORBIS_VERSION}.tar.gz + URL_HASH SHA256=${VORBIS_HASH} + PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/vorbis_patch.sh + ${PROJECT_3RD_PARTY_DIR} + ${CMAKE_BINARY_DIR}/external/src/vorbis_project + LIST_SEPARATOR | + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 + ) + + list(APPEND PROJECT_DEPENDENCIES vorbis_project) + + add_dependencies(vorbis_project ogg_project) + endif() +endif() diff --git a/cmake/libraries/winfsp.cmake b/cmake/libraries/winfsp.cmake new file mode 100644 index 0000000..9fd0900 --- /dev/null +++ b/cmake/libraries/winfsp.cmake @@ -0,0 +1,15 @@ +if(PROJECT_ENABLE_WINFSP AND PROJECT_IS_MINGW) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_WINFSP) + + include_directories(BEFORE SYSTEM ${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/inc) + + link_directories(BEFORE ${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/lib) + + if(PROJECT_IS_ARM64) + link_libraries(winfsp-a64) + else() + link_libraries(winfsp-x64) + endif() + endif() +endif() diff --git a/cmake/libraries/wxwidgets.cmake b/cmake/libraries/wxwidgets.cmake new file mode 100644 index 0000000..599cd8e --- /dev/null +++ b/cmake/libraries/wxwidgets.cmake @@ -0,0 +1,51 @@ +if(PROJECT_ENABLE_WXWIDGETS) + if(PROJECT_BUILD) + add_definitions(-DPROJECT_ENABLE_WXWIDGETS) + + find_package(OpenGL REQUIRED) + + set(wxWidgets_USE_WINDOWS OFF) + find_package(wxWidgets ${WXWIDGETS_VERSION} REQUIRED + COMPONENTS + net + core + base + gl + adv + xml + aui + html + media + propgrid + qa + ribbon + richtext + stc + webview + xrc + ) + + if(wxWidgets_USE_FILE) + include(${wxWidgets_USE_FILE}) + endif() + elseif(NOT PROJECT_IS_MINGW) + ExternalProject_Add(wxwidgets_project + PREFIX external + URL ${PROJECT_3RD_PARTY_DIR}/wxWidgets-${WXWIDGETS_VERSION}.tar.bz2 + URL_HASH SHA256=${WXWIDGETS_HASH} + LIST_SEPARATOR | + BUILD_COMMAND + ${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL} + CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS} + -DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DBUILD_STATIC_LIBS=ON + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + -DwxBUILD_MONOLITHIC=OFF + -DwxBUILD_SHARED=${PROJECT_BUILD_SHARED_LIBS} + ) + + list(APPEND PROJECT_DEPENDENCIES wxwidgets_project) + + add_dependencies(wxwidgets_project curl_project) + endif() +endif() diff --git a/cmake/options.cmake b/cmake/options.cmake new file mode 100644 index 0000000..b31dc83 --- /dev/null +++ b/cmake/options.cmake @@ -0,0 +1,40 @@ +option(PROJECT_ENABLE_BACKWARD_CPP "Enable backward-cpp" OFF) +option(PROJECT_ENABLE_BOOST "Enable boost libraries" OFF) +option(PROJECT_ENABLE_CLI11 "Enable CLI11 library" OFF) +option(PROJECT_ENABLE_CPP_HTTPLIB "Enable cpp-httplib" OFF) +option(PROJECT_ENABLE_CURL "Enable curl library" OFF) +option(PROJECT_ENABLE_CXXOPTS "Enable cxxopts library" OFF) +option(PROJECT_ENABLE_DTL "Enable DTL" OFF) +option(PROJECT_ENABLE_FLAC "Enable FLAC library" OFF) +option(PROJECT_ENABLE_FMT "Enable fmt library" OFF) +option(PROJECT_ENABLE_FONTCONFIG "Enable fontconfig library" OFF) +option(PROJECT_ENABLE_FREETYPE2 "Enable freetype2 library" OFF) +option(PROJECT_ENABLE_FUSE "Enable FUSE" OFF) +option(PROJECT_ENABLE_FZF "Enable fzf" OFF) +option(PROJECT_ENABLE_GTKMM "Enable gtkmm" OFF) +option(PROJECT_ENABLE_JSON "Enable JSON for Modern C++ library" OFF) +option(PROJECT_ENABLE_LIBBITCOIN_SYSTEM "Enable libbitcoin-system library" OFF) +option(PROJECT_ENABLE_LIBDSM "Enable dsm library" OFF) +option(PROJECT_ENABLE_LIBEVENT "Enable libevent library" OFF) +option(PROJECT_ENABLE_LIBJPEG_TURBO "Enable libjpeg-turbo library" OFF) +option(PROJECT_ENABLE_LIBPNG "Enable libpng library" OFF) +option(PROJECT_ENABLE_LIBSODIUM "Enable libsodium library" OFF) +option(PROJECT_ENABLE_NANA "Enable nana library" OFF) +option(PROJECT_ENABLE_NUSPELL "Enable nuspell" OFF) +option(PROJECT_ENABLE_OGG "Enable OGG library" OFF) +option(PROJECT_ENABLE_OPENAL "Enable OpenAL" OFF) +option(PROJECT_ENABLE_OPENSSL "Enable OpenSSL library" OFF) +option(PROJECT_ENABLE_PUGIXML "Enable PugiXML library" OFF) +option(PROJECT_ENABLE_ROCKSDB "Enable RocksDB library" OFF) +option(PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS "Enable Sago platform folders" OFF) +option(PROJECT_ENABLE_SECP256K1 "Enable secp256k1 library" OFF) +option(PROJECT_ENABLE_SFML "Enable SFML" OFF) +option(PROJECT_ENABLE_SPDLOG "Enable spdlog library" OFF) +option(PROJECT_ENABLE_SQLITE "Enable SQLite" OFF) +option(PROJECT_ENABLE_STDUUID "Enable stduuid library" OFF) +option(PROJECT_ENABLE_TESTING "Enable building unit tests" OFF) +option(PROJECT_ENABLE_TPL "Enable tiny process library" OFF) +option(PROJECT_ENABLE_VLC "Enable VLC" OFF) +option(PROJECT_ENABLE_VORBIS "Enable Vorbis library" OFF) +option(PROJECT_ENABLE_WINFSP "Enable WinFSP" OFF) +option(PROJECT_ENABLE_WXWIDGETS "Enable wxWidgets library" OFF) diff --git a/cmake/os.cmake b/cmake/os.cmake new file mode 100644 index 0000000..b8f2a10 --- /dev/null +++ b/cmake/os.cmake @@ -0,0 +1,23 @@ +if(MSVC) + message(FATAL_ERROR "MSVC will not be supported") +endif() + +if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") + message(FATAL_ERROR "FreeBSD is not currently supported") +endif() + +if(PROJECT_REQUIRE_ALPINE AND NOT PROJECT_IS_ALPINE AND PROJECT_IS_MINGW AND PROJECT_IS_MINGW_UNIX) + message(FATAL_ERROR "Project requires Alpine Linux to build") +endif() + +if (PROJECT_IS_DARWIN) + if (PROJECT_IS_ARM64) + set(CMAKE_OSX_ARCHITECTURES "arm64") + else() + set(CMAKE_OSX_ARCHITECTURES "x86_64") + endif() +endif() + +if (PROJECT_IS_DARWIN AND NOT PROJECT_MACOS_BUNDLE_ID) + message(FATAL_ERROR "'PROJECT_MACOS_BUNDLE_ID' is not set in 'config.sh'") +endif() diff --git a/cmake/settings.cmake b/cmake/settings.cmake new file mode 100644 index 0000000..8a0898b --- /dev/null +++ b/cmake/settings.cmake @@ -0,0 +1,51 @@ +set(CMAKE_COLOR_MAKEFILE OFF) +set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) + +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_STANDARD_REQUIRED ON) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +if(PROJECT_STATIC_LINK) + set(CMAKE_POSITION_INDEPENDENT_CODE OFF) +else() + set(CMAKE_POSITION_INDEPENDENT_CODE ON) +endif() + +set(CMAKE_BUILD_TYPE ${PROJECT_CMAKE_BUILD_TYPE}) + +file(MAKE_DIRECTORY ${PROJECT_EXTERNAL_BUILD_ROOT}/lib) +file(CREATE_LINK ${PROJECT_EXTERNAL_BUILD_ROOT}/lib ${PROJECT_EXTERNAL_BUILD_ROOT}/lib64 SYMBOLIC) + +list(PREPEND CMAKE_PREFIX_PATH + ${PROJECT_EXTERNAL_BUILD_ROOT} + ${PROJECT_EXTERNAL_BUILD_ROOT}/share +) + +if(PROJECT_IS_MINGW) + list(PREPEND CMAKE_PREFIX_PATH + /mingw64 + ) + + include_directories(BEFORE + /mingw64/include + ) + + link_directories(BEFORE + /mingw64/lib + /mingw64/lib64 + ) +endif() + +include_directories(BEFORE SYSTEM + ${PROJECT_SUPPORT_DIR}/include + ${PROJECT_EXTERNAL_BUILD_ROOT}/include +) + +link_directories(BEFORE + ${PROJECT_EXTERNAL_BUILD_ROOT}/lib + ${PROJECT_EXTERNAL_BUILD_ROOT}/lib64 +) diff --git a/common.sh b/common.sh new file mode 100644 index 0000000..fc729ee --- /dev/null +++ b/common.sh @@ -0,0 +1,158 @@ +#!/usr/bin/env bash + +PROJECT_NAME=$1 +DEST_DIR=$2 +IS_UPDATE=$3 +PROJECT_NAME_UPPER=$(echo ${PROJECT_NAME} | tr "[:lower:]" "[:upper:]") + +if [ "$(uname -s)" == "Darwin" ]; then + PROJECT_IS_DARWIN=1 + export SED=gsed +else + export SED=sed +fi + +function error_exit() { + echo $1 + exit $2 +} + +function update_file() { + local FILE=$1 + ${SED} -i "s/FIFTHGRID_/${PROJECT_NAME_UPPER}_/g" "${FILE}" + ${SED} -i "s/fifthgrid/${PROJECT_NAME}/g" "${FILE}" +} + +function update_util_sources() { + for FILE in $(find ${DEST_DIR}/support/include/ -type f -name "*.hpp"); do + update_file "${FILE}" + done + + for FILE in $(find ${DEST_DIR}/support/src/ -type f -name "*.cpp"); do + update_file "${FILE}" + done + + for FILE in $(find ${DEST_DIR}/support/test/ -type f -name "*.hpp"); do + update_file "${FILE}" + done + + for FILE in $(find ${DEST_DIR}/support/test/ -type f -name "*.cpp"); do + update_file "${FILE}" + done +} + +function process_file() { + local FILE_NAME=$1 + local SRC_FILE_NAME=$1 + if [ "$2" != "" ]; then + local DEST_PART=/$2 + fi + if [ "${FILE_NAME}" == "CMakeLists.txt" ]; then + local SRC_FILE_NAME="CMakeLists.txt_" + fi + if [ "${FILE_NAME}" == "main_test.cpp" ]; then + local DEST_FILE=${DEST_DIR}${DEST_PART}/main.cpp + else + local DEST_FILE=${DEST_DIR}${DEST_PART}/${FILE_NAME} + fi + + rsync -av --progress src/${SRC_FILE_NAME} "${DEST_FILE}" || + error_exit "failed to copy ${FILE_NAME}" 1 + + ${SED} -i s/%PROJECT_NAME%/${PROJECT_NAME}/g "${DEST_FILE}" || + error_exit "failed to set project name in ${DEST_FILE}" 1 + + ${SED} -i s/fifthgrid/${PROJECT_NAME}/g "${DEST_FILE}" || + error_exit "failed to set project name in ${DEST_FILE}" 1 + + ${SED} -i s/FIFTHGRID_/${PROJECT_NAME_UPPER}_/g "${DEST_FILE}" || + error_exit "failed to set project name in ${DEST_FILE}" 1 +} + +function update_cmakelists() { + for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do + ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY} + KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY} + ${SED} -i "/%PROJECT_ENABLE%/i \ \ \ \ \ \ -D${ENABLE_NAME}=\$\{${ENABLE_NAME}\}" "${DEST_DIR}/CMakeLists.txt" || + error_exit "failed to set ${ENABLE_NAME} to ${!ENABLE_NAME} in ${DEST_DIR}/CMakeLists.txt" 1 + done + + ${SED} -i "/%PROJECT_ENABLE%/d" "${DEST_DIR}/CMakeLists.txt" || + error_exit "failed to delete %PROJECT_ENABLE% in ${DEST_DIR}/CMakeLists.txt" 1 +} + +function update_config() { + for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do + ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY} + KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY} + if [ "${PROJECT_LIBRARY}" == "TESTING" ]; then + ${SED} -i "/%PROJECT_ENABLE%/i ${ENABLE_NAME}=ON" "${DEST_DIR}/config.sh" || + error_exit "failed to set ${ENABLE_NAME} to ON in ${DEST_DIR}/config.sh" 1 + else + ${SED} -i "/%PROJECT_ENABLE%/i ${ENABLE_NAME}=OFF" "${DEST_DIR}/config.sh" || + error_exit "failed to set ${ENABLE_NAME} to OFF in ${DEST_DIR}/config.sh" 1 + fi + done + + ${SED} -i "/%PROJECT_ENABLE%/d" "${DEST_DIR}/config.sh" || + error_exit "failed to delete %PROJECT_ENABLE% in ${DEST_DIR}/config.sh" 1 +} + +function sync_common() { + rsync -av --progress .clang* "${DEST_DIR}/" || + error_exit "failed to copy .clang*" 1 + + rsync -avh --delete --progress cmake/ "${DEST_DIR}/cmake/" || + error_exit "failed to copy cmake/" 1 + + rsync -avh --delete --progress docker/ "${DEST_DIR}/docker/" || + error_exit "failed to copy docker/" 1 + + rsync -avh --delete --progress src/scripts/ "${DEST_DIR}/scripts/" || + error_exit "failed to copy src/scripts/" 1 + + rsync -avh --delete --progress support/ "${DEST_DIR}/support/" || + error_exit "failed to copy support/" 1 +} + +function sync_create() { + rsync -avh --delete --progress .cspell/* "${DEST_DIR}/.cspell/" || + error_exit "failed to copy .cpsell/" 1 + + rsync -av --progress .gitignore "${DEST_DIR}/" || + error_exit "failed to copy .gitignore" 1 +} + +function create_versions_cmake() { + VERSION_LIST=() + for NAME in "${!PROJECT_VERSIONS[@]}"; do + VERSION_LIST+=("set(${NAME}_VERSION ${PROJECT_VERSIONS[${NAME}]})") + done + (printf "%s\n" "${VERSION_LIST[@]}" | sort) >${DEST_DIR}/cmake/versions.cmake +} + +if [ "${PROJECT_NAME}" == "" ]; then + error_exit "missing project name" 2 +else + if [ "${DEST_DIR}" == "" ]; then + DEST_DIR=${CURRENT_DIR} + fi + DEST_DIR=${DEST_DIR}/${PROJECT_NAME} + + if [ "${IS_UPDATE}" == "0" ] && [ -d "${DEST_DIR}" ]; then + error_exit "dest directory already exists: ${DEST_DIR}" 2 + fi + + mkdir -p "${DEST_DIR}" + DEST_DIR=$(realpath "${DEST_DIR}") + if [ "${IS_UPDATE}" == "1" ] && [ ! -d "${DEST_DIR}" ]; then + error_exit "dest directory not found: ${DEST_DIR}" 2 + fi +fi + +mkdir -p "${DEST_DIR}/${PROJECT_NAME}/${PROJECT_NAME}/include/" +mkdir -p "${DEST_DIR}/${PROJECT_NAME}/${PROJECT_NAME}/src/" +mkdir -p "${DEST_DIR}/${PROJECT_NAME}/${PROJECT_NAME}_test/include/" +mkdir -p "${DEST_DIR}/${PROJECT_NAME}/${PROJECT_NAME}_test/src/" +mkdir -p "${DEST_DIR}/${PROJECT_NAME}/lib${PROJECT_NAME}/include/" +mkdir -p "${DEST_DIR}/${PROJECT_NAME}/lib${PROJECT_NAME}/src/" diff --git a/create_project.cmd b/create_project.cmd new file mode 100644 index 0000000..1ba4267 --- /dev/null +++ b/create_project.cmd @@ -0,0 +1,8 @@ +@echo off + +setlocal + +pushd "%~dp0%" +call src\scripts\setup_msys2.cmd +call mingw64 -no-start ./create_project.sh "%1" "%2" +popd diff --git a/create_project.sh b/create_project.sh new file mode 100644 index 0000000..848101a --- /dev/null +++ b/create_project.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +CURRENT_DIR=$(realpath "$0") +CURRENT_DIR=$(dirname "${CURRENT_DIR}") +. "${CURRENT_DIR}/common.sh" "$1" "$2" 0 + +pushd "${DEST_DIR}" +git init . || error_exit "failed to execute 'git init .'" 1 +popd + +sync_common +sync_create + +. "${CURRENT_DIR}/src/scripts/versions.sh" +. "${CURRENT_DIR}/src/scripts/libraries.sh" + +create_versions_cmake + +process_file .jenkins_builds +process_file .jenkins_macos +process_file .nvimrc +process_file CMakeLists.txt +process_file config.sh +process_file initialize.hpp ${PROJECT_NAME}/lib${PROJECT_NAME}/include +process_file initialize.cpp ${PROJECT_NAME}/lib${PROJECT_NAME}/src +process_file main.cpp ${PROJECT_NAME}/${PROJECT_NAME} +process_file main_test.cpp ${PROJECT_NAME}/${PROJECT_NAME}_test +process_file project.cmake +process_file version.hpp ${PROJECT_NAME}/lib${PROJECT_NAME}/include +process_file version.cpp.in ${PROJECT_NAME} +process_file version.rc.in ${PROJECT_NAME} + +update_config +update_cmakelists + +echo "" >>"${DEST_DIR}/.cspell/words.txt" +echo lib${PROJECT_NAME} >>"${DEST_DIR}/.cspell/words.txt" + +update_util_sources + +pushd "${DEST_DIR}" +git lfs track "*.exe" +git lfs track "*.msi" +git lfs track "*.tar.gz" +git lfs track "*.tar.xz" +git lfs track "*.tgz" +git lfs track "*.zip" +git add .gitattributes +git commit -m "Added .gitattributes" +popd diff --git a/docker/aarch64/alpine b/docker/aarch64/alpine new file mode 100644 index 0000000..192e70b --- /dev/null +++ b/docker/aarch64/alpine @@ -0,0 +1,84 @@ +#comment +FROM arm64v8/alpine:3.22.2 +MAINTAINER Scott E. Graves +CMD bash + +RUN apk update +RUN apk upgrade +RUN apk add \ + autoconf \ + automake \ + bash \ + binutils \ + binutils-dev \ + bison \ + boost-dev \ + bzip2-static \ + cmake \ + diffutils \ + elfutils-dev \ + file \ + fontconfig-dev \ + fontconfig-static \ + freetype \ + freetype-dev \ + freetype-static \ + fuse3 \ + fuse3-dev \ + fuse3-static \ + g++ \ + gcc \ + gflags \ + gflags-dev \ + git \ + git-lfs \ + libogg-dev \ + libogg-static \ + libtool \ + libudev-zero \ + libudev-zero-dev \ + libunwind \ + libunwind-dev \ + libunwind-static \ + liburing \ + liburing-dev \ + libvorbis-dev \ + libvorbis-static \ + libx11-dev \ + libx11-static \ + libxcursor \ + libxcursor-dev \ + libxrandr \ + libxrandr-dev \ + linux-headers \ + make \ + mesa \ + mesa-dev \ + meson \ + musl-dev \ + ninja \ + openal-soft-dev \ + openal-soft-libs \ + openssl \ + patch \ + perl \ + pkgconfig \ + rsync \ + tcl \ + tcl-dev \ + texinfo \ + wget \ + xz \ + xz-dev \ + xz-libs \ + zlib \ + zlib-dev \ + zlib-static \ + zstd \ + zstd-dev \ + zstd-libs \ + zstd-static \ + xz-static + +RUN ln -sf /usr/bin/aclocal-1.17 /usr/bin/aclocal-1.16 +RUN ln -sf /usr/bin/automake-1.17 /usr/bin/automake-1.16 diff --git a/docker/x86_64/alpine b/docker/x86_64/alpine new file mode 100644 index 0000000..8974cfc --- /dev/null +++ b/docker/x86_64/alpine @@ -0,0 +1,84 @@ +#comment +FROM alpine:3.22.2 +MAINTAINER Scott E. Graves +CMD bash + +RUN apk update +RUN apk upgrade +RUN apk add \ + autoconf \ + automake \ + bash \ + binutils \ + binutils-dev \ + bison \ + boost-dev \ + bzip2-static \ + cmake \ + diffutils \ + elfutils-dev \ + file \ + fontconfig-dev \ + fontconfig-static \ + freetype \ + freetype-dev \ + freetype-static \ + fuse3 \ + fuse3-dev \ + fuse3-static \ + g++ \ + gcc \ + gflags \ + gflags-dev \ + git \ + git-lfs \ + libogg-dev \ + libogg-static \ + libtool \ + libudev-zero \ + libudev-zero-dev \ + libunwind \ + libunwind-dev \ + libunwind-static \ + liburing \ + liburing-dev \ + libvorbis-dev \ + libvorbis-static \ + libx11-dev \ + libx11-static \ + libxcursor \ + libxcursor-dev \ + libxrandr \ + libxrandr-dev \ + linux-headers \ + make \ + mesa \ + mesa-dev \ + meson \ + musl-dev \ + ninja \ + openal-soft-dev \ + openal-soft-libs \ + openssl \ + patch \ + perl \ + pkgconfig \ + rsync \ + tcl \ + tcl-dev \ + texinfo \ + wget \ + xz \ + xz-dev \ + xz-libs \ + zlib \ + zlib-dev \ + zlib-static \ + zstd \ + zstd-dev \ + zstd-libs \ + zstd-static \ + xz-static + +RUN ln -sf /usr/bin/aclocal-1.17 /usr/bin/aclocal-1.16 +RUN ln -sf /usr/bin/automake-1.17 /usr/bin/automake-1.16 diff --git a/docker/x86_64/flutter b/docker/x86_64/flutter new file mode 100644 index 0000000..e086270 --- /dev/null +++ b/docker/x86_64/flutter @@ -0,0 +1,47 @@ +FROM debian:latest + +ARG UID=0 +ARG GID=0 + +RUN apt-get update +RUN apt-get install -y \ + bash \ + curl \ + fonts-droid-fallback \ + gdb \ + git \ + lib32stdc++6 \ + libglu1-mesa \ + libstdc++6 \ + python3 \ + unzip \ + wget +RUN apt-get clean + +RUN git clone https://github.com/flutter/flutter.git /flutter +RUN git config --system --add safe.directory /flutter + +ENV PATH="/flutter/bin:/flutter/bin/cache/dart-sdk/bin:${PATH}" + +RUN flutter doctor -v +RUN flutter channel master +RUN flutter upgrade +RUN flutter --disable-analytics + +RUN flutter config --no-analytics +RUN flutter config --enable-web +RUN flutter config --no-cli-animations + +RUN mkdir /nonexistent +RUN chown -R $UID:$GID /nonexistent + +RUN mkdir /.config +RUN chown -R $UID:$GID /.config + +RUN mkdir /.dart-tool +RUN chown -R $UID:$GID /.dart-tool + +RUN mkdir /.pub-cache +RUN chown -R $UID:$GID /.pub-cache + +RUN chown -R $UID:$GID /flutter diff --git a/docker/x86_64/mingw64 b/docker/x86_64/mingw64 new file mode 100644 index 0000000..e3cb821 --- /dev/null +++ b/docker/x86_64/mingw64 @@ -0,0 +1,1189 @@ +#comment +FROM alpine:3.22.2 + +RUN apk update +RUN apk upgrade +RUN apk add \ + autoconf \ + automake \ + bash \ + binutils \ + bison \ + bzip2 \ + clang17-extra-tools \ + cmake \ + curl \ + file \ + flex \ + g++ \ + gcc \ + gettext \ + git \ + git-lfs \ + gmp \ + gmp-dev \ + gperf \ + gtkmm3-dev \ + intltool \ + isl-dev \ + libtool \ + linux-headers \ + make \ + mpc1 \ + mpc1-dev \ + mpfr \ + mpfr-dev \ + ninja \ + openssl \ + p7zip \ + patch \ + perl \ + py3-pip \ + python3 \ + rsync \ + ruby \ + texinfo \ + unzip \ + xvfb \ + wget \ + wine \ + xz \ + zlib \ + zlib-dev + +WORKDIR /mnt +ENV MY_WORKDIR=/mnt + +ARG MINGW_DIR=/mingw64 +ENV MY_MINGW_DIR=${MINGW_DIR} + +ARG MINGW_PREFIX=x86_64-w64-mingw32 +ENV MY_MINGW_PREFIX=${MINGW_PREFIX} + +ARG NUM_JOBS=2 +ENV MY_NUM_JOBS=${NUM_JOBS} + +ARG CXX_STANDARD=20 +ENV MY_CXX_STANDARD=${CXX_STANDARD} + +ARG TOOLCHAIN_FILE_CMAKE=/cmake_toolchain.cmake +ENV MY_TOOLCHAIN_FILE_CMAKE=${TOOLCHAIN_FILE_CMAKE} +RUN echo -e \ + "set(CMAKE_SYSTEM_NAME Windows)\n"\ + "set(CMAKE_CXX_COMPILER ${MY_MINGW_PREFIX}-g++)\n"\ + "set(CMAKE_C_COMPILER ${MY_MINGW_PREFIX}-gcc)\n"\ + "set(CMAKE_FIND_ROOT_PATH ${MY_MINGW_DIR})\n"\ + "set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)\n"\ + "set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)\n"\ + "set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)\n"\ + "set(CMAKE_Fortran_COMPILER ${MY_MINGW_PREFIX}-gfortran)\n"\ + "set(CMAKE_INSTALL_PREFIX ${MY_MINGW_DIR})\n"\ + "set(CMAKE_RC_COMPILER ${MY_MINGW_PREFIX}-windres)\n"\ + > ${MY_TOOLCHAIN_FILE_CMAKE} + +ARG TOOLCHAIN_FILE_MESON=/meson_cross_file.txt +ENV MY_TOOLCHAIN_FILE_MESON=${TOOLCHAIN_FILE_MESON} +RUN echo -e \ + "[binaries]\n"\ + "ar = '${MY_MINGW_PREFIX}-ar'\n"\ + "c = '${MY_MINGW_PREFIX}-gcc'\n"\ + "cpp = '${MY_MINGW_PREFIX}-g++'\n"\ + "ld = '${MY_MINGW_PREFIX}-ld'\n"\ + "objcopy = '${MY_MINGW_PREFIX}-objcopy'\n"\ + "pkg-config = 'pkg-config'\n"\ + "strip = '${MY_MINGW_PREFIX}-strip'\n"\ + "windres = '${MY_MINGW_PREFIX}-windres'\n"\ + "exe_wrapper = 'wine64'\n"\ + "[properties]\n"\ + "c_args = ['-I${MY_MINGW_DIR}/include']\n"\ + "c_link_args = ['-L${MY_MINGW_DIR}/lib', '-L${MY_MINGW_DIR}/lib64']\n"\ + "[host_machine]\n"\ + "cpu = 'x86_64'\n"\ + "cpu_family = 'x86_64'\n"\ + "endian = 'little'\n"\ + "system = 'windows'\n"\ + > ${MY_TOOLCHAIN_FILE_MESON} + +RUN mkdir -p /opt/bin;echo -e \ + "#!/bin/sh\n"\ + "COUNT=0\n"\ + "echo \"Start waiting on \$@\"\n"\ + "while pgrep \"\$@\" > /dev/null; do \n"\ + " echo \"waiting ...\"\n"\ + " sleep 1;\n"\ + " COUNT=\$((COUNT+1))\n"\ + " if [ \$COUNT -eq 60 ]; then\n"\ + " exit 3;\n"\ + " fi\n"\ + "done\n"\ + "echo \"\$@ completed\"\n"\ + > /opt/bin/waitonprocess && \ + chmod +x /opt/bin/waitonprocess && \ + cat /opt/bin/waitonprocess + +RUN echo -e \ + "#!/bin/sh\n"\ + "Xvfb \$DISPLAY &\n"\ + "tokill=\$!\n"\ + "wine wineboot --init\n"\ + "waitonprocess wineserver\n"\ + "\"\$@\"\n"\ + "retval=\$?\n"\ + "kill -15 \$tokill\n"\ + "wine wineboot --shutdown\n"\ + "return \$retval\n"\ + > /opt/bin/wine-x11-run && \ + chmod +x /opt/bin/wine-x11-run && \ + cat /opt/bin/wine-x11-run + +ENV PATH="/opt/bin:${PATH}" +SHELL [ "/bin/bash", "-c" ] + +RUN mkdir -p \ + ${MY_MINGW_DIR}/bin \ + ${MY_MINGW_DIR}/include \ + ${MY_MINGW_DIR}/lib/pkgconfig \ + ${MY_MINGW_DIR}/lib64/pkgconfig + +ADD ./3rd_party /3rd_party + +ARG BINUTILS_VERSION +ENV MY_BINUTILS_VERSION=${BINUTILS_VERSION} +RUN cd /3rd_party/mingw64 && sha256sum -c ./binutils-${MY_BINUTILS_VERSION}.tar.xz.sha256 && cd - \ + && tar xvJf /3rd_party/mingw64/binutils-${MY_BINUTILS_VERSION}.tar.xz \ + && cd binutils-${MY_BINUTILS_VERSION} \ + && ./configure \ + --disable-lto \ + --disable-multilib \ + --disable-nls \ + --disable-plugins \ + --disable-shared \ + --disable-werror \ + --enable-static \ + --prefix=/usr/local \ + --target=${MY_MINGW_PREFIX} \ + --with-system-zlib \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r binutils-${MY_BINUTILS_VERSION} + +ARG MINGW_VERSION +ENV MY_MINGW_VERSION=${MINGW_VERSION} +RUN cd /3rd_party/mingw64 && sha256sum -c ./mingw-w64-v${MY_MINGW_VERSION}.tar.bz2.sha256 && cd - \ + && tar xvjf /3rd_party/mingw64/mingw-w64-v${MY_MINGW_VERSION}.tar.bz2 \ + && mkdir mingw-w64 \ + && cd mingw-w64 \ + && ../mingw-w64-v${MY_MINGW_VERSION}/mingw-w64-headers/configure \ + --enable-sdk=all \ + --host=${MY_MINGW_PREFIX} \ + --prefix=/usr/local/${MY_MINGW_PREFIX} \ + && make install + +ARG GCC_VERSION +ENV MY_GCC_VERSION=${GCC_VERSION} +RUN cd /3rd_party/mingw64 && sha256sum -c ./gcc-${MY_GCC_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/mingw64/gcc-${MY_GCC_VERSION}.tar.gz \ + && (mv gcc-releases-gcc-${MY_GCC_VERSION} gcc-${MY_GCC_VERSION} || echo "") \ + && mkdir gcc \ + && cd gcc \ + && ../gcc-${MY_GCC_VERSION}/configure \ + --disable-libssp \ + --disable-libstdcxx-debug \ + --disable-libstdcxx-pch \ + --disable-multilib \ + --disable-nls \ + --disable-rpath \ + --disable-symvers \ + --disable-werror \ + --disable-win32-registry \ + --enable-checking=release \ + --enable-fully-dynamic-string \ + --enable-graphite \ + --enable-languages=c,c++ \ + --enable-libatomic \ + --enable-libgomp \ + --enable-libstdcxx-filesystem-ts \ + --enable-libstdcxx-time \ + --enable-lto \ + --enable-shared \ + --enable-static \ + --enable-threads=posix \ + --libexecdir=/usr/local/lib \ + --prefix=/usr/local \ + --target=${MY_MINGW_PREFIX} \ + --with-arch=nocona \ + --with-boot-ldflags="-static-libstdc++" \ + --with-gnu-as \ + --with-gnu-ld \ + --with-libiconv \ + --with-native-system-header-dir=/usr/local/include \ + --with-stage1-ldflags="-static-libstdc++" \ + --with-system-zlib \ + --with-tune=generic \ + --with-{gmp,mpfr,mpc,isl}=/usr/local \ + && make -j${MY_NUM_JOBS} all-gcc \ + && make install-gcc + +RUN cd mingw-w64 \ + && ../mingw-w64-v${MY_MINGW_VERSION}/mingw-w64-crt/configure \ + --disable-lib32 \ + --enable-lib64 \ + --enable-wildcard \ + --host=${MY_MINGW_PREFIX} \ + --prefix=/usr/local/${MY_MINGW_PREFIX} \ + && (make || make || make || make) \ + && make install + +RUN cd mingw-w64 \ + && ../mingw-w64-v${MY_MINGW_VERSION}/mingw-w64-libraries/winpthreads/configure \ + --enable-shared \ + --enable-static \ + --host=${MY_MINGW_PREFIX} \ + --prefix=/usr/local/${MY_MINGW_PREFIX} \ + && make -j${MY_NUM_JOBS} \ + && make install + +RUN cd gcc \ + && make -j${MY_NUM_JOBS} \ + && make install + +RUN cp /usr/local/${MY_MINGW_PREFIX}/lib/*.dll ${MY_MINGW_DIR}/bin \ + && cp /usr/local/${MY_MINGW_PREFIX}/bin/*.dll ${MY_MINGW_DIR}/bin \ + && rm -r gcc gcc-${MY_GCC_VERSION} \ + && rm -r mingw-w64 mingw-w64-v${MY_MINGW_VERSION} + +ARG PKG_CONFIG_VERSION +ENV MY_PKG_CONFIG_VERSION=${PKG_CONFIG_VERSION} +RUN cd /3rd_party/mingw64 && sha256sum -c ./pkg-config-${MY_PKG_CONFIG_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/mingw64/pkg-config-${MY_PKG_CONFIG_VERSION}.tar.gz \ + && cd pkg-config-${MY_PKG_CONFIG_VERSION} \ + && ./configure \ + --disable-nls \ + --disable-shared \ + --prefix=/usr/local \ + --with-internal-glib \ + --with-pc-path=${MY_MINGW_DIR}/lib/pkgconfig \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r pkg-config-${MY_PKG_CONFIG_VERSION} + +RUN python3 -m pip install --break-system-packages -U mako +RUN python3 -m pip install --break-system-packages -U meson +RUN python3 -m pip install --break-system-packages -U packaging + +ENV CXXFLAGS="-std=gnu++20" +ENV LDFLAGS="-L${MY_MINGW_DIR}/lib -L${MY_MINGW_DIR}/lib64" +ENV PATH="${MY_MINGW_DIR}/bin:/usr/local/bin:${PATH}" +ENV PKG_CONFIG_PATH="${MY_MINGW_DIR}/lib/pkgconfig:${MY_MINGW_DIR}/lib64/pkgconfig" + +ARG ZLIB_VERSION +ENV MY_ZLIB_VERSION=${ZLIB_VERSION} +RUN cd /3rd_party/mingw64 && sha256sum -c ./zlib-${MY_ZLIB_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/mingw64/zlib-${MY_ZLIB_VERSION}.tar.gz \ + && cd zlib-${MY_ZLIB_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r zlib-${MY_ZLIB_VERSION} + +ARG LIBJPEG_TURBO_VERSION +ENV MY_LIBJPEG_TURBO_VERSION=${LIBJPEG_TURBO_VERSION} +RUN if [ -f "/3rd_party/libjpeg_turbo-${MY_LIBJPEG_TURBO_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./libjpeg_turbo-${MY_LIBJPEG_TURBO_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/libjpeg_turbo-${MY_LIBJPEG_TURBO_VERSION}.tar.gz \ + && cd libjpeg-turbo-${MY_LIBJPEG_TURBO_VERSION} \ + && mkdir _build \ + && cd _build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_SYSTEM_PROCESSOR=AMD64 \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DENABLE_SHARED=ON \ + -DENABLE_STATIC=ON \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r libjpeg-turbo-${MY_LIBJPEG_TURBO_VERSION} \ + ; fi + +ARG LIBPNG_VERSION +ENV MY_LIBPNG_VERSION=${LIBPNG_VERSION} +RUN if [ -f "/3rd_party/libpng-v${MY_LIBPNG_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./libpng-v${MY_LIBPNG_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/libpng-v${MY_LIBPNG_VERSION}.tar.gz \ + && cd libpng-${MY_LIBPNG_VERSION} \ + && mkdir _build \ + && cd _build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DPNG_SHARED=ON \ + -DPNG_STATIC=ON \ + -DPNG_TESTS=OFF \ + -DPNG_TOOLS=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r libpng-${MY_LIBPNG_VERSION} \ + ; fi + +ARG FREETYPE2_VERSION +ENV MY_FREETYPE2_VERSION=${FREETYPE2_VERSION} +RUN if [ -f "/3rd_party/freetype-${MY_FREETYPE2_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./freetype-${MY_FREETYPE2_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/freetype-${MY_FREETYPE2_VERSION}.tar.gz \ + && cd freetype-${MY_FREETYPE2_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW_DIR} \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r freetype-${MY_FREETYPE2_VERSION} \ + ; fi + +ARG EXPAT_VERSION +ENV MY_EXPAT_VERSION=${EXPAT_VERSION} +RUN cd /3rd_party/mingw64 && sha256sum -c ./expat-${MY_EXPAT_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/mingw64/expat-${MY_EXPAT_VERSION}.tar.gz \ + && cd libexpat-*/expat \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DEXPAT_BUILD_DOCS=OFF \ + -DEXPAT_BUILD_EXAMPLES=OFF \ + -DEXPAT_BUILD_TESTS=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r libexpat-* + +ARG FONTCONFIG_VERSION +ENV MY_FONTCONFIG_VERSION=${FONTCONFIG_VERSION} +RUN if [ -f "/3rd_party/fontconfig-${MY_FONTCONFIG_VERSION}.tar.xz" ]; then \ + cd /3rd_party && sha256sum -c ./fontconfig-${MY_FONTCONFIG_VERSION}.tar.xz.sha256 && cd - \ + && tar xvJf /3rd_party/fontconfig-${MY_FONTCONFIG_VERSION}.tar.xz \ + && cd fontconfig-${MY_FONTCONFIG_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW_DIR} \ + -Ddoc=disabled \ + -Dtests=disabled \ + -Dtools=disabled \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r fontconfig-${MY_FONTCONFIG_VERSION} \ + ; fi + +ARG OPENAL_VERSION +ENV MY_OPENAL_VERSION=${OPENAL_VERSION} +RUN if [ -f "/3rd_party/openal-${MY_OPENAL_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./openal-${MY_OPENAL_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/openal-${MY_OPENAL_VERSION}.tar.gz \ + && cd openal-soft-${MY_OPENAL_VERSION} \ + && mkdir _build \ + && cd _build \ + && cmake .. \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && mv ${MY_MINGW_DIR}/bin/OpenAL32.dll ${MY_MINGW_DIR}/bin/openal32.dll \ + && cd ${MY_WORKDIR} \ + && rm -r openal-soft-${MY_OPENAL_VERSION} \ + ; fi + +ARG ICU_VERSION +ENV MY_ICU_VERSION=${ICU_VERSION} +RUN cd /3rd_party/mingw64 && sha256sum -c ./icu-release-${MY_ICU_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/mingw64/icu-release-${MY_ICU_VERSION}.tar.gz \ + && cp -r icu-release-${MY_ICU_VERSION} icu-release-${MY_ICU_VERSION}-cross \ + && cd icu-release-${MY_ICU_VERSION}-cross/icu4c/source \ + && CXXFLAGS="-std=gnu++17" ./configure \ + --disable-samples \ + --disable-tests \ + --enable-shared \ + --enable-static \ + --prefix=/usr/local \ + && make -j${MY_NUM_JOBS} \ + && make install + +RUN cd ${MY_WORKDIR} \ + && cd icu-release-${MY_ICU_VERSION}/icu4c/source \ + && CXXFLAGS="-std=gnu++17" ./configure \ + --build=x86_64-alpine-linux-musl \ + --disable-samples \ + --disable-tests \ + --enable-shared \ + --enable-static \ + --host=${MY_MINGW_PREFIX} \ + --prefix=${MY_MINGW_DIR} \ + --with-cross-build=${MY_WORKDIR}/icu-release-${MY_ICU_VERSION}-cross/icu4c/source \ + && make -j${MY_NUM_JOBS} \ + && make install + +RUN cd ${MY_WORKDIR} \ + && rm -r icu-release-${MY_ICU_VERSION} \ + && rm -r icu-release-${MY_ICU_VERSION}-cross + +ARG OPENSSL_VERSION +ENV MY_OPENSSL_VERSION=${OPENSSL_VERSION} +RUN if [ -f "/3rd_party/openssl-${MY_OPENSSL_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./openssl-${MY_OPENSSL_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/openssl-${MY_OPENSSL_VERSION}.tar.gz \ + && cd openssl-${MY_OPENSSL_VERSION} \ + && ./Configure \ + --cross-compile-prefix=${MY_MINGW_PREFIX}- \ + --prefix=${MY_MINGW_DIR} \ + mingw64 \ + no-shared \ + no-apps \ + no-docs \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r openssl-${MY_OPENSSL_VERSION} \ + ; fi + +ARG BOOST2_MAJOR_VERSION +ENV MY_BOOST2_MAJOR_VERSION=${BOOST2_MAJOR_VERSION} +ARG BOOST2_MINOR_VERSION +ENV MY_BOOST2_MINOR_VERSION=${BOOST2_MINOR_VERSION} +ARG BOOST2_PATCH_VERSION +ENV MY_BOOST2_PATCH_VERSION=${BOOST2_PATCH_VERSION} +ENV MY_BOOST2_VERSION=${MY_BOOST2_MAJOR_VERSION}_${MY_BOOST2_MINOR_VERSION}_${MY_BOOST2_PATCH_VERSION} +RUN if [ -f "/3rd_party/boost_${MY_BOOST2_MAJOR_VERSION}_${MY_BOOST2_MINOR_VERSION}_${MY_BOOST2_PATCH_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./boost_${MY_BOOST2_MAJOR_VERSION}_${MY_BOOST2_MINOR_VERSION}_${MY_BOOST2_PATCH_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/boost_${MY_BOOST2_MAJOR_VERSION}_${MY_BOOST2_MINOR_VERSION}_${MY_BOOST2_PATCH_VERSION}.tar.gz \ + && cd boost_${MY_BOOST2_VERSION} \ + && ./bootstrap.sh \ + --with-libraries=atomic,chrono,date_time,filesystem,iostreams,locale,log,program_options,random,regex,serialization,system,test,thread \ + address-model=64 \ + cxxstd=${MY_CXX_STANDARD} \ + cxxstd-dialect=gnu \ + architecture=x86 \ + link=static,shared \ + target-os=windows \ + threading=multi \ + variant=release \ + && echo "using gcc : mingw : ${MY_MINGW_PREFIX}-g++ ;" \ + >> ./project-config.jam \ + && ./b2 \ + --openssldir=${MY_MINGW_DIR} \ + --prefix=${MY_MINGW_DIR} \ + -j${MY_NUM_JOBS} \ + address-model=64 \ + cxxstd=${MY_CXX_STANDARD} \ + cxxstd-dialect=gnu \ + architecture=x86 \ + link=static,shared \ + target-os=windows \ + toolset=gcc-mingw \ + threading=multi \ + variant=release \ + install \ + && cd ${MY_WORKDIR} \ + && rm -r boost_${MY_BOOST2_VERSION} \ + ; fi + +ARG BOOST_MAJOR_VERSION +ENV MY_BOOST_MAJOR_VERSION=${BOOST_MAJOR_VERSION} +ARG BOOST_MINOR_VERSION +ENV MY_BOOST_MINOR_VERSION=${BOOST_MINOR_VERSION} +ARG BOOST_PATCH_VERSION +ENV MY_BOOST_PATCH_VERSION=${BOOST_PATCH_VERSION} +ENV MY_BOOST_VERSION=${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION}_${MY_BOOST_PATCH_VERSION} +RUN if [ -f "/3rd_party/boost_${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION}_${MY_BOOST_PATCH_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./boost_${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION}_${MY_BOOST_PATCH_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/boost_${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION}_${MY_BOOST_PATCH_VERSION}.tar.gz \ + && cd boost_${MY_BOOST_VERSION} \ + && echo "using gcc : gcc : ${MY_MINGW_PREFIX}-g++ ;" \ + >./user-config.jam \ + && ./bootstrap.sh \ + --with-libraries=atomic,chrono,date_time,filesystem,iostreams,locale,log,program_options,random,regex,serialization,system,test,thread \ + address-model=64 \ + architecture=x86 \ + cxxstd=${MY_CXX_STANDARD} \ + cxxstd-dialect=gnu \ + link=static,shared \ + target-os=windows \ + threading=multi \ + variant=release \ + && ./b2 \ + --openssldir=${MY_MINGW_DIR} \ + --prefix=${MY_MINGW_DIR} \ + --user-config=./user-config.jam \ + -j${MY_NUM_JOBS} \ + address-model=64 \ + architecture=x86 \ + cxxstd=${MY_CXX_STANDARD} \ + cxxstd-dialect=gnu \ + link=static,shared \ + target-os=windows \ + threading=multi \ + variant=release \ + install \ + && cd ${MY_WORKDIR} \ + && rm -r boost_${MY_BOOST_VERSION} \ + ; fi + +ARG OGG_VERSION +ENV MY_OGG_VERSION=${OGG_VERSION} +RUN if [ -f "/3rd_party/ogg-v${MY_OGG_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./ogg-v${MY_OGG_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/ogg-v${MY_OGG_VERSION}.tar.gz \ + && cd libogg-${MY_OGG_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r libogg-${MY_OGG_VERSION} \ + ; fi + +ARG VORBIS_VERSION +ENV MY_VORBIS_VERSION=${VORBIS_VERSION} +RUN if [ -f "/3rd_party/vorbis-v${MY_VORBIS_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./vorbis-v${MY_VORBIS_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/vorbis-v${MY_VORBIS_VERSION}.tar.gz \ + && cd vorbis-${MY_VORBIS_VERSION} \ + && /3rd_party/vorbis_patch.sh /3rd_party . \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r vorbis-${MY_VORBIS_VERSION} \ + ; fi + +ARG FLAC_VERSION +ENV MY_FLAC_VERSION=${FLAC_VERSION} +RUN if [ -f "/3rd_party/flac-${MY_FLAC_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./flac-${MY_FLAC_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/flac-${MY_FLAC_VERSION}.tar.gz \ + && cd flac-${MY_FLAC_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DBUILD_DOCS=OFF \ + -DBUILD_EXAMPLES=OFF \ + -DBUILD_PROGRAMS=OFF \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DBUILD_TESTING=OFF \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DINSTALL_MANPAGES=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r flac-${MY_FLAC_VERSION} \ + ; fi + +ARG SFML_VERSION +ENV MY_SFML_VERSION=${SFML_VERSION} +RUN if [ -f "/3rd_party/SFML-${MY_SFML_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./SFML-${MY_SFML_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/SFML-${MY_SFML_VERSION}.tar.gz \ + && cd SFML-${MY_SFML_VERSION} \ + && sed -i s/set_target_properties\(\$\{target\}\ PROPERTIES\ PREFIX\ \"\"\)// \ + cmake/Macros.cmake \ + && sed -i s/set_target_properties\(\$\{target\}\ PROPERTIES\ IMPORT_SUFFIX\ \"\.a\"\)// \ + cmake/Macros.cmake \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_SYSTEM_PROCESSOR=AMD64 \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r SFML-${MY_SFML_VERSION} \ + ; fi + +ARG SPDLOG_VERSION +ENV MY_SPDLOG_VERSION=${SPDLOG_VERSION} +RUN if [ -f "/3rd_party/spdlog-${MY_SPDLOG_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./spdlog-${MY_SPDLOG_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/spdlog-${MY_SPDLOG_VERSION}.tar.gz \ + && cd spdlog-${MY_SPDLOG_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DSPDLOG_BUILD_EXAMPLE=OFF \ + -DSPDLOG_FMT_EXTERNAL=OFF \ + -DSPDLOG_FMT_EXTERNAL_HO=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r spdlog-${MY_SPDLOG_VERSION} \ + ; fi + +ARG CLI11_VERSION +ENV MY_CLI11_VERSION=${CLI11_VERSION} +RUN if [ -f "/3rd_party/CLI11-${MY_CLI11_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./CLI11-${MY_CLI11_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/CLI11-${MY_CLI11_VERSION}.tar.gz \ + && cd CLI11-${MY_CLI11_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DCLI11_BUILD_DOCS=OFF \ + -DCLI11_BUILD_EXAMPLES=OFF \ + -DCLI11_BUILD_TESTS=OFF \ + -DCLI11_INSTALL=ON \ + -DCLI11_SINGLE_FILE=ON \ + -DCLI11_WARNINGS_AS_ERRORS=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r CLI11-${MY_CLI11_VERSION} \ + ; fi + +ARG CURL_VERSION +ENV MY_CURL_VERSION=${CURL_VERSION} +ARG CURL2_VERSION +ENV MY_CURL2_VERSION=${CURL2_VERSION} +RUN if [ -f "/3rd_party/curl-${MY_CURL_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./curl-${MY_CURL_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/curl-${MY_CURL_VERSION}.tar.gz \ + && cd curl-curl-${MY_CURL2_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DBUILD_CURL_EXE=ON \ + -DBUILD_LIBCURL_DOCS=OFF \ + -DBUILD_MISC_DOCS=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DBUILD_STATIC_LIBS=ON \ + -DBUILD_TESTING=OFF \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DCURL_BROTLI=OFF \ + -DCURL_CA_BUNDLE=./cacert.pem \ + -DCURL_CA_FALLBACK=ON \ + -DCURL_DISABLE_LDAP=ON \ + -DCURL_USE_LIBPSL=OFF \ + -DCURL_USE_LIBSSH2=OFF \ + -DCURL_USE_OPENSSL=ON \ + -DCURL_ZLIB=ON \ + -DENABLE_CURL_MANUAL=OFF \ + -DENABLE_THREADED_RESOLVER=ON \ + -DOPENSSL_USE_STATIC_LIBS=ON \ + -DUSE_LIBIDN2=OFF \ + -DUSE_WIN32_CRYPTO=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r curl-curl-${MY_CURL2_VERSION} \ + ; fi + +ARG CPP_HTTPLIB_VERSION +ENV MY_CPP_HTTPLIB_VERSION=${CPP_HTTPLIB_VERSION} +RUN if [ -f "/3rd_party/cpp-httplib-${MY_CPP_HTTPLIB_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./cpp-httplib-${MY_CPP_HTTPLIB_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/cpp-httplib-${MY_CPP_HTTPLIB_VERSION}.tar.gz \ + && cd cpp-httplib-${MY_CPP_HTTPLIB_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_SYSTEM_VERSION="10.0.0" \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DHTTPLIB_REQUIRE_BROTLI=OFF \ + -DHTTPLIB_REQUIRE_OPENSSL=ON \ + -DHTTPLIB_REQUIRE_ZLIB=ON \ + -DHTTPLIB_TEST=OFF \ + -DHTTPLIB_USE_BROTLI_IF_AVAILABLE=OFF \ + -DHTTPLIB_USE_OPENSSL_IF_AVAILABLE=YES \ + -DHTTPLIB_USE_ZLIB_IF_AVAILABLE=ON \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r cpp-httplib-${MY_CPP_HTTPLIB_VERSION} \ + ; fi + +ARG FMT_VERSION +ENV MY_FMT_VERSION=${FMT_VERSION} +RUN if [ -f "/3rd_party/fmt-${MY_FMT_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./fmt-${MY_FMT_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/fmt-${MY_FMT_VERSION}.tar.gz \ + && cd fmt-${MY_FMT_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DFMT_DOC=OFF \ + -DFMT_TEST=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r fmt-${MY_FMT_VERSION} \ + ; fi + +ARG GTEST_VERSION +ENV MY_GTEST_VERSION=${GTEST_VERSION} +RUN if [ -f "/3rd_party/googletest-${MY_GTEST_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./googletest-${MY_GTEST_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/googletest-${MY_GTEST_VERSION}.tar.gz \ + && cd googletest-${MY_GTEST_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r googletest-${MY_GTEST_VERSION} \ + ; fi + +ARG JSON_VERSION +ENV MY_JSON_VERSION=${JSON_VERSION} +RUN if [ -f "/3rd_party/json-${MY_JSON_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./json-${MY_JSON_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/json-${MY_JSON_VERSION}.tar.gz \ + && cd json-${MY_JSON_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DJSON_BuildTests=OFF \ + -DJSON_Install=ON \ + -DJSON_MultipleHeaders=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r json-${MY_JSON_VERSION} \ + ; fi + +ARG LIBEVENT_VERSION +ENV MY_LIBEVENT_VERSION=${LIBEVENT_VERSION} +RUN if [ -f "/3rd_party/libevent-${MY_LIBEVENT_VERSION}-stable.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./libevent-${MY_LIBEVENT_VERSION}-stable.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/libevent-${MY_LIBEVENT_VERSION}-stable.tar.gz \ + && cd libevent-release-${MY_LIBEVENT_VERSION}-stable \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_C_FLAGS="-include winsock2.h -include ws2tcpip.h -include iphlpapi.h" \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DEVENT__DISABLE_OPENSSL=ON \ + -DEVENT__DISABLE_SAMPLES=ON \ + -DEVENT__DISABLE_TESTS=ON \ + -DEVENT__LIBRARY_TYPE=BOTH \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r libevent-release-${MY_LIBEVENT_VERSION}-stable \ + ; fi + +ARG LIBSODIUM_VERSION +ENV MY_LIBSODIUM_VERSION=${LIBSODIUM_VERSION} +RUN if [ -f "/3rd_party/libsodium-${MY_LIBSODIUM_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./libsodium-${MY_LIBSODIUM_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/libsodium-${MY_LIBSODIUM_VERSION}.tar.gz \ + && cd libsodium-${MY_LIBSODIUM_VERSION}-RELEASE \ + && CFLAGS="-O3 -fomit-frame-pointer -m64 -mtune=generic" ./configure \ + --enable-shared=yes \ + --enable-static=yes \ + --host=${MY_MINGW_PREFIX} \ + --prefix=${MY_MINGW_DIR} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r libsodium-${MY_LIBSODIUM_VERSION}-RELEASE \ + ; fi + +ARG NUSPELL_VERSION +ENV MY_NUSPELL_VERSION=${NUSPELL_VERSION} +RUN if [ -f "/3rd_party/nuspell-v${MY_NUSPELL_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./nuspell-v${MY_NUSPELL_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/nuspell-v${MY_NUSPELL_VERSION}.tar.gz \ + && cd nuspell-${MY_NUSPELL_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DBUILD_DOCS=OFF \ + -DBUILD_TESTING=OFF \ + -DBUILD_TOOLS=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r nuspell-${MY_NUSPELL_VERSION} \ + ; fi + +ARG PUGIXML_VERSION +ENV MY_PUGIXML_VERSION=${PUGIXML_VERSION} +RUN if [ -f "/3rd_party/pugixml-${MY_PUGIXML_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./pugixml-${MY_PUGIXML_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/pugixml-${MY_PUGIXML_VERSION}.tar.gz \ + && cd pugixml-${MY_PUGIXML_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r pugixml-${MY_PUGIXML_VERSION} \ + ; fi + +ARG ROCKSDB_VERSION +ENV MY_ROCKSDB_VERSION=${ROCKSDB_VERSION} +RUN if [ -f "/3rd_party/rocksdb-${MY_ROCKSDB_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./rocksdb-${MY_ROCKSDB_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/rocksdb-${MY_ROCKSDB_VERSION}.tar.gz \ + && cd rocksdb-${MY_ROCKSDB_VERSION} \ + && echo -e "add_definitions(-include cstdint)">>CMakeLists.txt \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DFAIL_ON_WARNINGS=OFF \ + -DPORTABLE=1 \ + -DROCKSDB_INSTALL_ON_WINDOWS=ON \ + -DWITH_BENCHMARK=OFF \ + -DWITH_BENCHMARK_TOOLS=OFF \ + -DWITH_BZ2=OFF \ + -DWITH_CORE_TOOLS=OFF \ + -DWITH_EXAMPLES=OFF \ + -DWITH_GFLAGS=OFF \ + -DWITH_IOSTATS_CONTEXT=OFF \ + -DWITH_PERF_CONTEXT=OFF \ + -DWITH_TESTS=OFF \ + -DWITH_TOOLS=OFF \ + -DWITH_TRACE_TOOLS=OFF \ + -DWITH_ZLIB=ON \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r rocksdb-${MY_ROCKSDB_VERSION} \ + ; fi + +ARG SECP256K1_VERSION +ENV MY_SECP256K1_VERSION=${SECP256K1_VERSION} +RUN if [ -f "/3rd_party/secp256k1-${MY_SECP256K1_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./secp256k1-${MY_SECP256K1_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/secp256k1-${MY_SECP256K1_VERSION}.tar.gz \ + && cd secp256k1-${MY_SECP256K1_VERSION} \ + && ./autogen.sh && ./configure \ + --host=${MY_MINGW_PREFIX} \ + --enable-shared=no \ + --enable-static=yes \ + --enable-module-ecdh \ + --enable-module-recovery \ + --prefix=${MY_MINGW_DIR} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r secp256k1-${MY_SECP256K1_VERSION} \ + ; fi + +ARG STDUUID_VERSION +ENV MY_STDUUID_VERSION=${STDUUID_VERSION} +RUN if [ -f "/3rd_party/stduuid-${MY_STDUUID_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./stduuid-${MY_STDUUID_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/stduuid-${MY_STDUUID_VERSION}.tar.gz \ + && cd stduuid-${MY_STDUUID_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DUUID_BUILD_TESTS=OFF \ + -DUUID_ENABLE_INSTALL=ON \ + -DUUID_USING_CXX20_SPAN=ON \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r stduuid-${MY_STDUUID_VERSION} \ + ; fi + +RUN if [ -f "/3rd_party/tiny-process-library.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./tiny-process-library.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/tiny-process-library.tar.gz \ + && cd tiny-process-library-master \ + && mkdir build \ + && cd build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DBUILD_TESTING=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r tiny-process-library-master \ + ; fi + +ARG WXWIDGETS_VERSION +ENV MY_WXWIDGETS_VERSION=${WXWIDGETS_VERSION} +RUN if [ -f "/3rd_party/wxWidgets-${MY_WXWIDGETS_VERSION}.tar.bz2" ]; then \ + cd /3rd_party && sha256sum -c ./wxWidgets-${MY_WXWIDGETS_VERSION}.tar.bz2.sha256 && cd - \ + && tar xvjf /3rd_party/wxWidgets-${MY_WXWIDGETS_VERSION}.tar.bz2 \ + && cd wxWidgets-${MY_WXWIDGETS_VERSION} \ + && mkdir _build \ + && cd _build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DwxBUILD_MONOLITHIC=OFF \ + -DwxBUILD_SHARED=ON \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r wxWidgets-${MY_WXWIDGETS_VERSION} \ + ; fi + +ARG CXXOPTS_VERSION +ENV MY_CXXOPTS_VERSION=${CXXOPTS_VERSION} +RUN if [ -f "/3rd_party/cxxopts-v${MY_CXXOPTS_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./cxxopts-v${MY_CXXOPTS_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/cxxopts-v${MY_CXXOPTS_VERSION}.tar.gz \ + && cd cxxopts-${MY_CXXOPTS_VERSION} \ + && mkdir _build \ + && cd _build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DCXXOPTS_BUILD_EXAMPLES=OFF \ + -DCXXOPTS_BUILD_TESTS=OFF \ + -DCXXOPTS_ENABLE_INSTALL=ON \ + -DCXXOPTS_ENABLE_WARNINGS=OFF \ + -DCXXOPTS_USE_UNICODE_HELP=ON \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r cxxopts-${MY_CXXOPTS_VERSION} \ + ; fi + +ARG NANA_VERSION +ENV MY_NANA_VERSION=${NANA_VERSION} +RUN if [ -f "/3rd_party/nana-v${MY_NANA_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./nana-v${MY_NANA_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/nana-v${MY_NANA_VERSION}.tar.gz \ + && cd nana-${MY_NANA_VERSION} \ + && /3rd_party/nana_patch.sh /3rd_party . \ + && mkdir _build \ + && cd _build \ + && cmake .. \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \ + -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DNANA_CMAKE_ENABLE_AUDIO=OFF \ + -DNANA_CMAKE_ENABLE_JPEG=ON \ + -DNANA_CMAKE_ENABLE_PNG=ON \ + -DNANA_CMAKE_INSTALL=ON \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r nana-${MY_NANA_VERSION} \ + ; fi + +ARG SDL_VERSION +ENV MY_SDL_VERSION=${SDL_VERSION} +RUN if [ -f "/3rd_party/sdl-${MY_SDL_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./sdl-${MY_SDL_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/sdl-${MY_SDL_VERSION}.tar.gz \ + && cd SDL-release-${MY_SDL_VERSION} \ + && ./configure \ + --host=${MY_MINGW_PREFIX} \ + --enable-shared=yes \ + --enable-static=yes \ + --prefix=${MY_MINGW_DIR} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r SDL-release-${MY_SDL_VERSION} \ + ; fi + +ARG LIBTASN_VERSION +ENV MY_LIBTASN_VERSION=${LIBTASN_VERSION} +RUN if [ -f "/3rd_party/libtasn1-${MY_LIBTASN_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./libtasn1-${MY_LIBTASN_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/libtasn1-${MY_LIBTASN_VERSION}.tar.gz \ + && cd libtasn1-${MY_LIBTASN_VERSION} \ + && ./configure \ + --disable-doc \ + --enable-static=yes \ + --enable-shared=no \ + --host=${MY_MINGW_PREFIX} \ + --prefix=${MY_MINGW_DIR} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r libtasn1-${MY_LIBTASN_VERSION} \ + && echo -e \ + "#!/bin/bash\n"\ + "\n"\ + "wine ${MY_MINGW_DIR}/bin/asn1Parser.exe \$@\n"\ + > ${MY_MINGW_DIR}/bin/asn1Parser \ + && chmod +x ${MY_MINGW_DIR}/bin/asn1Parser \ + ; fi + +ARG LIBICONV_VERSION +ENV MY_LIBICONV_VERSION=${LIBICONV_VERSION} +RUN if [ -f "/3rd_party/libiconv-${MY_LIBICONV_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./libiconv-${MY_LIBICONV_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/libiconv-${MY_LIBICONV_VERSION}.tar.gz \ + && cd libiconv-${MY_LIBICONV_VERSION} \ + && ./configure \ + --enable-static=yes \ + --enable-shared=no \ + --host=${MY_MINGW_PREFIX} \ + --prefix=${MY_MINGW_DIR} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r libiconv-${MY_LIBICONV_VERSION} \ + ; fi + +ARG LIBDSM_VERSION +ENV MY_LIBDSM_VERSION=${LIBDSM_VERSION} +RUN if [ -f "/3rd_party/libdsm-${MY_LIBDSM_VERSION}.tar.gz" ]; then \ + cd /3rd_party && sha256sum -c ./libdsm-${MY_LIBDSM_VERSION}.tar.gz.sha256 && cd - \ + && tar xvzf /3rd_party/libdsm-${MY_LIBDSM_VERSION}.tar.gz \ + && cd libdsm-${MY_LIBDSM_VERSION} \ + && /3rd_party/libdsm_patch.sh /3rd_party . \ + && meson setup \ + --bindir=${MY_MINGW_DIR}/bin \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW_DIR} \ + -Dbinaries=false \ + -Ddefault_library=static \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r libdsm-${MY_LIBDSM_VERSION} \ + ; fi + +ENV DISPLAY=:90 +ENV WINEDEBUG=-all,err+all + +ARG INNOSETUP_VERSION +ENV MY_INNOSETUP_VERSION=${INNOSETUP_VERSION} +RUN rm -rf /root/.wine; \ + wine64 reg add 'HKEY_CURRENT_USER\Software\Wine' /v ShowDotFiles /d Y \ + && while [ ! -f /root/.wine/user.reg ]; do sleep 1; done; \ + wine-x11-run wine64 /3rd_party/mingw64/innosetup-${MY_INNOSETUP_VERSION}.exe /SP- /VERYSILENT /ALLUSERS /SUPPRESSMSGBOXES /DOWNLOADISCRYPT=1 + +ARG UID=1000 +ARG GID=1000 +ARG USERNAME=myuser + +RUN delgroup scanner || echo "no scanner group found" + +RUN addgroup -g $GID $USERNAME && \ + adduser -D -u $UID -G $USERNAME -h /home/$USERNAME $USERNAME + +RUN rsync -av --progress /root/.wine/ /home/$USERNAME/.wine/ && \ + chown -R $UID:$GID -R /home/$USERNAME/.wine/ + +RUN (cp ${MY_MINGW_DIR}/lib/*.dll ${MY_MINGW_DIR}/bin || echo "no dll's found") \ + && chmod 0777 -R ${MY_MINGW_DIR} \ + && rm -rf /3rd_party \ + && rm -rf /root/.wine + +USER $USERNAME +WORKDIR /home/$USERNAME + diff --git a/grab_packages.sh b/grab_packages.sh new file mode 100644 index 0000000..f0afa07 --- /dev/null +++ b/grab_packages.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +CURRENT_DIR=$(realpath "$0") +CURRENT_DIR=$(dirname "${CURRENT_DIR}") + +. "${CURRENT_DIR}/src/scripts/versions.sh" +. "${CURRENT_DIR}/src/scripts/libraries.sh" + +function check_should_update() { + local NAME=$1 + local ITEM_LIST=(${PROJECT_DOWNLOADS[${NAME}]//;/ }) + if [ ! -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}" ] || + [ ! -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}.sha256" ]; then + return 0 + fi + + return 1 +} + +function download_and_update_hash() { + local NAME=$1 + local ITEM_LIST=(${PROJECT_DOWNLOADS[${NAME}]//;/ }) + if [ ! -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}" ] || + [ ! -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}.sha256" ]; then + local CLEANUP_LIST=(${PROJECT_CLEANUP[${NAME}]//:/ }) + if [ "${NAME}" == "GTEST" ]; then + CLEANUP_LIST=(${PROJECT_CLEANUP["TESTING"]//:/ }) + fi + + if [ "${NAME}" != "BOOST" ] && [ "${NAME}" != "BOOST2" ] && [ "${CLEANUP_LIST[0]}" != "" ]; then + rm -r ${CURRENT_DIR}/support/${CLEANUP_LIST[0]} + fi + + rm -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}" + rm -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}.sha256" + + if ! wget ${ITEM_LIST[0]} -O "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}"; then + echo "failed $NAME" + rm -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}" + exit 1 + fi + pushd "${CURRENT_DIR}/support/${ITEM_LIST[2]}" + sha256sum ${ITEM_LIST[1]} >${ITEM_LIST[1]}.sha256 + popd + fi + + local HASH=$(cat support/${ITEM_LIST[2]}/${ITEM_LIST[1]}.sha256 | awk '{print $1}') + HASH_LIST+=("set(${NAME}_HASH ${HASH})") +} + +function create_hashes_cmake() { + for NAME in "${!PROJECT_DOWNLOADS[@]}"; do + if [ "${NAME}" != "BOOST" ] && [ "${NAME}" != "BOOST2" ]; then + download_and_update_hash $NAME + fi + done +} + +pushd "${CURRENT_DIR}" +HASH_LIST=() +create_hashes_cmake + +if check_should_update BOOST || check_should_update BOOST2; then + rm -f support/3rd_party/boost_* +fi + +download_and_update_hash BOOST +download_and_update_hash BOOST2 + +(printf "%s\n" "${HASH_LIST[@]}" | sort) >${CURRENT_DIR}/cmake/hashes.cmake +popd diff --git a/scripts/common.sh b/scripts/common.sh new file mode 100644 index 0000000..e773ae6 --- /dev/null +++ b/scripts/common.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env bash + +SCRIPTS_DIR=$(dirname "$0") +SCRIPTS_DIR=$(realpath ${SCRIPTS_DIR}) + +SOURCE_DIR=${SCRIPTS_DIR}/.. +SOURCE_DIR=$(realpath "${SOURCE_DIR}") + +TEST_DIR=${SOURCE_DIR}/build + +PLATFORM=$1 +BUILD_TYPE=$2 +WITH_TYPE=$3 +BUILD_ARCH=$4 + +if [ "$(uname -s)" == "Darwin" ]; then + export SED=gsed +else + export SED=sed +fi + +function error_exit() { + echo $1 + exit $2 +} + +if [ "${BUILD_TYPE}" != "shared" ] && [ "${BUILD_TYPE}" != "static" ]; then + error_exit "must specify 'shared' or 'static'" 1 +fi + +if [ "${TEST_DIR}" == "" ]; then + error_exit "TEST_DIR is not set" 1 +fi + +mkdir -p "${TEST_DIR}" + +NAME=${PLATFORM}_${BUILD_TYPE} +if [ "${WITH_TYPE}" == "1" ]; then + NAME=${NAME}_crypto +elif [ "${WITH_TYPE}" == "2" ]; then + NAME=${NAME}_dsm +elif [ "${WITH_TYPE}" == "3" ]; then + NAME=${NAME}_sqlite +elif [ "${WITH_TYPE}" == "4" ]; then + NAME=${NAME}_errors_v1 +elif [ "${WITH_TYPE}" == "5" ]; then + NAME=${NAME}_fmt +elif [ "${WITH_TYPE}" == "6" ]; then + NAME=${NAME}_libevent +elif [ "${WITH_TYPE}" == "7" ]; then + NAME=${NAME}_crypto_no_boost +fi + +if [ "${BUILD_ARCH}" != "" ]; then + NAME=${NAME}_libevent_${BUILD_ARCH} +fi + +rm -rf "${TEST_DIR}/${NAME}" + +pushd "${SOURCE_DIR}" +./create_project.sh ${NAME} ${TEST_DIR} || error_exit "failed to create ${PLATFORM} project" 2 +popd + +pushd "${TEST_DIR}/${NAME}" +if [ "${WITH_TYPE}" == "1" ]; then + ${SED} -i "s/PROJECT_ENABLE_LIBSODIUM=OFF/PROJECT_ENABLE_LIBSODIUM=ON/g" ./config.sh + ${SED} -i "s/PROJECT_ENABLE_BOOST=OFF/PROJECT_ENABLE_BOOST=ON/g" ./config.sh + ${SED} -i "s/PROJECT_ENABLE_JSON=OFF/PROJECT_ENABLE_JSON=ON/g" ./config.sh +elif [ "${WITH_TYPE}" == "2" ]; then + ${SED} -i "s/PROJECT_ENABLE_LIBDSM=OFF/PROJECT_ENABLE_LIBDSM=ON/g" ./config.sh +elif [ "${WITH_TYPE}" == "3" ]; then + ${SED} -i "s/PROJECT_ENABLE_SQLITE=OFF/PROJECT_ENABLE_SQLITE=ON/g" ./config.sh +elif [ "${WITH_TYPE}" == "4" ]; then + ${SED} -i "s/PROJECT_ENABLE_V2_ERRORS=ON/PROJECT_ENABLE_V2_ERRORS=OFF/g" ./config.sh +elif [ "${WITH_TYPE}" == "5" ]; then + ${SED} -i "s/PROJECT_ENABLE_FMT=OFF/PROJECT_ENABLE_FMT=ON/g" ./config.sh +elif [ "${WITH_TYPE}" == "6" ]; then + ${SED} -i "s/PROJECT_ENABLE_LIBEVENT=OFF/PROJECT_ENABLE_LIBEVENT=ON/g" ./config.sh +elif [ "${WITH_TYPE}" == "7" ]; then + ${SED} -i "s/PROJECT_ENABLE_LIBSODIUM=OFF/PROJECT_ENABLE_LIBSODIUM=ON/g" ./config.sh +fi + +if [ "${BUILD_TYPE}" == "shared" ]; then + ${SED} -i "s/PROJECT_STATIC_LINK=ON/PROJECT_STATIC_LINK=OFF/g" ./config.sh +fi + +./scripts/make_${PLATFORM}.sh "${BUILD_ARCH}" || error_exit "build ${PLATFORM} ${BUILD_ARCH} failed" 3 +if [ "${PLATFORM}" == "win32" ]; then + ./scripts/run_tests.sh "${BUILD_ARCH}" "" "" 1 1 || error_exit "testing ${PLATFORM} failed" 4 +else + ./scripts/run_tests.sh "${BUILD_ARCH}" || error_exit "testing ${PLATFORM} ${BUILD_ARCH} failed" 4 +fi +popd + +rm -rf "${TEST_DIR}/${NAME}" diff --git a/scripts/test_unix.sh b/scripts/test_unix.sh new file mode 100644 index 0000000..6d4f03d --- /dev/null +++ b/scripts/test_unix.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +SCRIPTS_DIR=$(dirname "$0") +SCRIPTS_DIR=$(realpath ${SCRIPTS_DIR}) + +"${SCRIPTS_DIR}/common.sh" unix "$1" "$2" "$3" diff --git a/scripts/test_win32.sh b/scripts/test_win32.sh new file mode 100644 index 0000000..7962808 --- /dev/null +++ b/scripts/test_win32.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +SCRIPTS_DIR=$(dirname "$0") +SCRIPTS_DIR=$(realpath ${SCRIPTS_DIR}) + +"${SCRIPTS_DIR}/common.sh" win32 "$1" "$2" diff --git a/src/.jenkins_builds b/src/.jenkins_builds new file mode 100644 index 0000000..b8cbde2 --- /dev/null +++ b/src/.jenkins_builds @@ -0,0 +1,88 @@ +#!groovy + +pipeline { + agent none + + environment { + PROJECT_TEST_CONFIG_DIR = "/.ci/%PROJECT_NAME%/test" + } + + options { + disableConcurrentBuilds() + skipDefaultCheckout() + timestamps() + } + + stages { + stage('Build • Test • Deliver') { + agent any + stages { + stage('Checkout') { + steps { + script { + int maxAttempts = 6 + int baseDelay = 10 + for (int attempt = 1; attempt <= maxAttempts; attempt++) { + try { + checkout scm + break + } catch (err) { + if (attempt == maxAttempts) { throw err } + int waitSec = baseDelay * (1 << (attempt - 1)) + echo "Checkout failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..." + sleep time: waitSec, unit: 'SECONDS' + } + } + } + } + } + + stage('linux_x86_64') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh' } } } + } + + stage('mingw64') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_win32.sh' } } } + } + + stage('linux_aarch64') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh aarch64' } } } + } + + stage('test') { + steps { + script { + retryWithBackoff(2, 5) { sh 'scripts/test.sh' } + retryWithBackoff(2, 5) { sh 'scripts/test.sh "" "" "" "" 1 1' } + retryWithBackoff(2, 5) { sh 'scripts/test.sh aarch64' } + } + } + } + + stage('deliver') { + steps { + script { + retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/%PROJECT_NAME% "" "" "" "" 1 1' } + retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/%PROJECT_NAME% "" aarch64' } + retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/%PROJECT_NAME%' } + } + } + } + } + } + } +} + +def retryWithBackoff(int maxAttempts, int baseDelaySeconds, Closure body) { + for (int attempt = 1; attempt <= maxAttempts; attempt++) { + try { + body() + return + } catch (err) { + if (attempt == maxAttempts) { throw err } + int waitSec = baseDelaySeconds * (1 << (attempt - 1)) + echo "Step failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..." + sleep time: waitSec, unit: 'SECONDS' + } + } +} diff --git a/src/.jenkins_macos b/src/.jenkins_macos new file mode 100644 index 0000000..930ed81 --- /dev/null +++ b/src/.jenkins_macos @@ -0,0 +1,82 @@ +#!groovy + +pipeline { + agent none + + environment { + PROJECT_TEST_CONFIG_DIR = "${env.HOME}/.ci/%PROJECT_NAME%/test" + } + + options { + disableConcurrentBuilds() + skipDefaultCheckout() + timestamps() + } + + stages { + stage('Build • Test • Deliver') { + agent any + stages { + stage('Checkout') { + steps { + script { + int maxAttempts = 6 + int baseDelay = 10 + for (int attempt = 1; attempt <= maxAttempts; attempt++) { + try { + checkout scm + break + } catch (err) { + if (attempt == maxAttempts) { throw err } + int waitSec = baseDelay * (1 << (attempt - 1)) + echo "Checkout failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..." + sleep time: waitSec, unit: 'SECONDS' + } + } + } + } + } + + stage('darwin_aarch64') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh aarch64' } } } + } + + stage('darwin_x86_64') { + steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh x86_64' } } } + } + + stage('test') { + steps { + script { + retryWithBackoff(2, 5) { sh 'scripts/test.sh aarch64' } + retryWithBackoff(2, 5) { sh 'scripts/test.sh x86_64' } + } + } + } + + stage('deliver') { + steps { + script { + retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/%PROJECT_NAME% "" aarch64' } + retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/%PROJECT_NAME% "" x86_64' } + } + } + } + } + } + } +} + +def retryWithBackoff(int maxAttempts, int baseDelaySeconds, Closure body) { + for (int attempt = 1; attempt <= maxAttempts; attempt++) { + try { + body() + return + } catch (err) { + if (attempt == maxAttempts) { throw err } + int waitSec = baseDelaySeconds * (1 << (attempt - 1)) + echo "Step failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..." + sleep time: waitSec, unit: 'SECONDS' + } + } +} diff --git a/src/.nvimrc b/src/.nvimrc new file mode 100644 index 0000000..00792b3 --- /dev/null +++ b/src/.nvimrc @@ -0,0 +1,47 @@ +if has('win32') || has('win64') + let &makeprg=".\\scripts\\make_win32.cmd" + let g:nmakeprg=".\\scripts\\make_win32.cmd" + " let g:gtest#gtest_command = "cd build2 && .\\unittests" +else + let &makeprg="./scripts/make_unix.sh" + let g:nmakeprg="./scripts/make_unix.sh" + " let g:gtest#gtest_command = "cd build && ./unittests" +endif +set path+=.,%PROJECT_NAME%/** + +lua << EOF +if vim.env.NV_DARCULA_ENABLE_DAP then + local dap = require("dap") + local g = require("nvim-goodies") + local gos = require("nvim-goodies.os") + local gpath = require("nvim-goodies.path") + + local externalConsole = gos.is_windows + local type = "cppdbg" + local cwd = gpath.create_path("./build") + dap.configurations.cpp = { + { + name = "Main", + type = type, + request = "launch", + program = function() + return gpath.create_path(cwd, "%PROJECT_NAME%") + end, + cwd = cwd, + stopAtEntry = true, + externalConsole=externalConsole, + }, + { + name = "Test", + type = type, + request = "launch", + program = function() + return gpath.create_path(cwd, "%PROJECT_NAME%_tests") + end, + cwd = cwd, + stopAtEntry = true, + externalConsole=externalConsole, + } + } +end +EOF diff --git a/src/CMakeLists.txt_ b/src/CMakeLists.txt_ new file mode 100644 index 0000000..a91ea67 --- /dev/null +++ b/src/CMakeLists.txt_ @@ -0,0 +1,192 @@ +cmake_minimum_required(VERSION 3.27) + +cmake_policy(SET CMP0135 NEW) +cmake_policy(SET CMP0144 NEW) + +if (NOT PROJECT_INTERFACE) + message(FATAL_ERROR "Project must be compiled via 'make_win32.cmd'/'make_win32.sh' or 'make_unix.sh' build scripts. Invoking 'cmake' directly is not supported.") +endif() + +project(${PROJECT_NAME} + DESCRIPTION ${PROJECT_DESC} + HOMEPAGE_URL ${PROJECT_URL} + VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_REVISION_VERSION} +) + +include(CheckIncludeFileCXX) +include(CheckIncludeFiles) +include(ExternalProject) + +check_include_files(sys/xattr.h HAS_SETXATTR) +if(HAS_SETXATTR) + add_definitions(-DHAS_SETXATTR) +endif() + +include(cmake/hashes.cmake) + +include(cmake/versions.cmake) +include(cmake/arch.cmake) +include(cmake/os.cmake) +include(cmake/options.cmake) + +option(PROJECT_REQUIRE_ALPINE "Require Alpine Linux as build system" OFF) +option(PROJECT_STATIC_LINK "Static link executables" OFF) + +if(PROJECT_STATIC_LINK) + add_definitions(-DPROJECT_STATIC_LINK) +endif() + +if(PROJECT_IS_MINGW) + add_definitions(-DPROJECT_IS_MINGW) + if(PROJECT_IS_MINGW_UNIX) + add_definitions(-DPROJECT_IS_MINGW_UNIX) + endif() +endif() + +if(PROJECT_REQUIRE_ALPINE) + add_definitions(-DPROJECT_REQUIRE_ALPINE) +endif() + +if(PROJECT_IS_ARM64) + add_definitions(-DPROJECT_IS_ARM64) +endif() + +if(PROJECT_IS_DARWIN) + add_definitions(-DPROJECT_IS_DARWIN) +endif() + +if(PROJECT_IS_MINGW) + option(PROJECT_ENABLE_WIN32_LONG_PATH_NAMES "Enable path sizes of 32767 characters on Windows" OFF) + if(PROJECT_ENABLE_WIN32_LONG_PATH_NAMES) + add_definitions(-DPROJECT_ENABLE_WIN32_LONG_PATH_NAMES) + endif() +endif() + +if (PROJECT_ENABLE_V2_ERRORS) + add_definitions(-DPROJECT_ENABLE_V2_ERRORS) +endif() + +include(cmake/settings.cmake) + +include(cmake/flags.cmake) +include(cmake/functions.cmake) + +include(cmake/libraries.cmake) + +if(PROJECT_BUILD) + file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.cpp "") + + if (PROJECT_IS_MINGW) + set(PROJECT_WINDOWS_VERSION_RC ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.rc) + file(WRITE ${PROJECT_WINDOWS_VERSION_RC} "") + endif() + + file(GLOB_RECURSE ADDITIONAL_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.cpp + ${PROJECT_SUPPORT_DIR}/src/*.c + ${PROJECT_SUPPORT_DIR}/src/*.cpp + ) + + list(APPEND PROJECT_ADDITIONAL_SOURCES + ${ADDITIONAL_SOURCES} + ) + + include(project.cmake) + + string(REPLACE "\\<" "<" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}") + string(REPLACE "\\<" "<" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}") + string(REPLACE "\\<" "<" PROJECT_DESC "${PROJECT_DESC}") + string(REPLACE "\\>" ">" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}") + string(REPLACE "\\>" ">" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}") + string(REPLACE "\\>" ">" PROJECT_DESC "${PROJECT_DESC}") + + if (PROJECT_IS_MINGW) + if ("${PROJECT_RELEASE_ITER}" STREQUAL "release") + set(PROJECT_PRERELEASE 0) + else() + set(PROJECT_PRERELEASE VS_FF_PRERELEASE) + endif() + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.rc.in + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.rc + @ONLY + ) + endif() + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.cpp.in + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.cpp + @ONLY + ) + + if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.iss.in") + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.iss.in + ${PROJECT_DIST_DIR}/../${PROJECT_NAME}.iss + @ONLY + ) + endif() + + find_package(ICU REQUIRED COMPONENTS data i18n io uc) +else() + message(STATUS "-=[CMake Settings]=-") + message(STATUS " C standard: ${CMAKE_C_STANDARD}") + message(STATUS " C++ standard: ${CMAKE_CXX_STANDARD}") + message(STATUS " CPU architecture: ${PROJECT_MARCH}") +if(PROJECT_ENABLE_FUSE) + message(STATUS " FUSE version: ${PROJECT_FUSE}") +endif() + + string(REPLACE "<" "\\<" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}") + string(REPLACE "<" "\\<" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}") + string(REPLACE "<" "\\<" PROJECT_DESC "${PROJECT_DESC}") + string(REPLACE ">" "\\>" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}") + string(REPLACE ">" "\\>" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}") + string(REPLACE ">" "\\>" PROJECT_DESC "${PROJECT_DESC}") + + add_custom_target(project ALL + DEPENDS ${PROJECT_DEPENDENCIES} + COMMAND cd build && cmake + ${CMAKE_CURRENT_SOURCE_DIR} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DPROJECT_3RD_PARTY_DIR=${PROJECT_3RD_PARTY_DIR} + -DPROJECT_BUILD=ON + -DPROJECT_BUILD_ARCH=${PROJECT_BUILD_ARCH} + -DPROJECT_BUILD_DIR=${PROJECT_BUILD_DIR} + -DPROJECT_BUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} + -DPROJECT_CMAKE_BUILD_TYPE=${PROJECT_CMAKE_BUILD_TYPE} + -DPROJECT_COMPANY_NAME=${PROJECT_COMPANY_NAME} + -DPROJECT_COPYRIGHT=${PROJECT_COPYRIGHT} + -DPROJECT_DESC=${PROJECT_DESC} + -DPROJECT_DIST_DIR=${PROJECT_DIST_DIR} + -DPROJECT_ENABLE_V2_ERRORS=${PROJECT_ENABLE_V2_ERRORS} + -DPROJECT_ENABLE_WIN32_LONG_PATH_NAMES=${PROJECT_ENABLE_WIN32_LONG_PATH_NAMES} +%PROJECT_ENABLE% + -DPROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_EXTERNAL_BUILD_ROOT} + -DPROJECT_FUSE=${PROJECT_FUSE} + -DPROJECT_FUSE_INCLUDE_DIRS=${PROJECT_FUSE_INCLUDE_DIRS} + -DPROJECT_GIT_REV=${PROJECT_GIT_REV} + -DPROJECT_INTERFACE=1 + -DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE} + -DPROJECT_IS_ARM64=${PROJECT_IS_ARM64} + -DPROJECT_IS_DARWIN=${PROJECT_IS_DARWIN} + -DPROJECT_IS_MINGW=${PROJECT_IS_MINGW} + -DPROJECT_IS_MINGW_UNIX=${PROJECT_IS_MINGW_UNIX} + -DPROJECT_MAJOR_VERSION=${PROJECT_MAJOR_VERSION} + -DPROJECT_MACOS_BUNDLE_ID=${PROJECT_MACOS_BUNDLE_ID} + -DPROJECT_MACOS_ICNS_NAME=${PROJECT_MACOS_ICNS_NAME} + -DPROJECT_MINOR_VERSION=${PROJECT_MINOR_VERSION} + -DPROJECT_NAME=${PROJECT_NAME} + -DPROJECT_RELEASE_ITER=${PROJECT_RELEASE_ITER} + -DPROJECT_RELEASE_NUM=${PROJECT_RELEASE_NUM} + -DPROJECT_REQUIRE_ALPINE=${PROJECT_REQUIRE_ALPINE} + -DPROJECT_REVISION_VERSION=${PROJECT_REVISION_VERSION} + -DPROJECT_STATIC_LINK=${PROJECT_STATIC_LINK} + -DPROJECT_SUPPORT_DIR=${PROJECT_SUPPORT_DIR} + -DPROJECT_TOOLCHAIN_FILE_CMAKE=${PROJECT_TOOLCHAIN_FILE_CMAKE} + -DPROJECT_TOOLCHAIN_FILE_MESON=${PROJECT_TOOLCHAIN_FILE_MESON} + -DPROJECT_URL=${PROJECT_URL} + ) +endif() diff --git a/src/config.sh b/src/config.sh new file mode 100644 index 0000000..7032fdf --- /dev/null +++ b/src/config.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +PROJECT_NAME="%PROJECT_NAME%" + +PROJECT_COMPANY_NAME="" +PROJECT_COPYRIGHT="" +PROJECT_DESC="" +PROJECT_URL="" + +PROJECT_MACOS_BUNDLE_ID="com.fifthgrid.${PROJECT_NAME}" +PROJECT_MACOS_ICNS_NAME="" + +PROJECT_MAJOR_VERSION=0 +PROJECT_MINOR_VERSION=0 +PROJECT_REVISION_VERSION=1 +PROJECT_RELEASE_NUM=0 +PROJECT_RELEASE_ITER=alpha + +PROJECT_APP_LIST=(${PROJECT_NAME}) + +PROJECT_PRIVATE_KEY=${DEVELOPER_PRIVATE_KEY} +PROJECT_PUBLIC_KEY=${DEVELOPER_PUBLIC_KEY} + +PROJECT_STATIC_LINK=ON + +PROJECT_MINGW64_COPY_DEPENDENCIES+=() +PROJECT_MSYS2_PACKAGE_LIST+=() + +PROJECT_ENABLE_V2_ERRORS=ON +PROJECT_ENABLE_WIN32_LONG_PATH_NAMES=OFF + +%PROJECT_ENABLE% + +PROJECT_KEEP_BACKWARD_CPP=1 + +if [ "${PROJECT_ENABLE_TESTING}" == "ON" ]; then + PROJECT_APP_LIST+=(${PROJECT_NAME}_test) +fi + +if [ -f "./override.sh" ]; then + . ./override.sh +fi diff --git a/src/initialize.cpp b/src/initialize.cpp new file mode 100644 index 0000000..65d42e2 --- /dev/null +++ b/src/initialize.cpp @@ -0,0 +1,149 @@ +#if defined(PROJECT_ENABLE_CURL) +#include "curl/curl.h" +#endif // defined(PROJECT_ENABLE_CURL) + +#if defined(PROJECT_ENABLE_OPENSSL) +#include "openssl/ssl.h" +#endif // defined(PROJECT_ENABLE_OPENSSL) + +#if defined(PROJECT_REQUIRE_ALPINE) && !defined(PROJECT_IS_MINGW) +#include +#include +#include +#endif // defined(PROJECT_REQUIRE_ALPINE) && !defined(PROJECT_IS_MINGW) + +#if defined(PROJECT_ENABLE_LIBSODIUM) +#include "sodium.h" +#endif // defined(PROJECT_ENABLE_LIBSODIUM) + +#if defined(PROJECT_ENABLE_SQLITE) +#include "sqlite3.h" +#endif // defined(PROJECT_ENABLE_SQLITE) + +#if defined(PROJECT_ENABLE_SPDLOG) +#include + +#include "spdlog/async.h" +#include "spdlog/sinks/stdout_color_sinks.h" +#include "spdlog/spdlog.h" +#endif // defined(PROJECT_ENABLE_SPDLOG) + +#include "initialize.hpp" +#include "utils/error.hpp" + +#if defined(PROJECT_REQUIRE_ALPINE) && !defined(PROJECT_IS_MINGW) +#include "utils/path.hpp" +#endif // defined(PROJECT_REQUIRE_ALPINE) && !defined (PROJECT_IS_MINGW) + +#if defined(__APPLE__) +#include +#endif // defined(__APPLE__) + +namespace { +#if defined(PROJECT_ENABLE_CURL) +bool curl_initialized{false}; +#endif // defined(PROJECT_ENABLE_CURL) + +#if defined(PROJECT_ENABLE_SPDLOG) +bool spdlog_initialized{false}; +#endif // defined(PROJECT_ENABLE_SPDLOG) + +#if defined(PROJECT_ENABLE_SQLITE) +bool sqlite3_initialized{false}; +#endif // defined(PROJECT_ENABLE_SQLITE) +} // namespace + +namespace fifthgrid { +auto project_initialize() -> bool { + FIFTHGRID_USES_FUNCTION_NAME(); + +#if defined(__APPLE__) + std::signal(SIGPIPE, SIG_IGN); +#endif // defined(__APPLE__) + +#if defined(PROJECT_REQUIRE_ALPINE) && !defined(PROJECT_IS_MINGW) + { + static constexpr auto guard_size{4096U}; + static constexpr auto stack_size{8U * 1024U * 1024U}; + + pthread_attr_t attr{}; + pthread_attr_setstacksize(&attr, stack_size); + pthread_attr_setguardsize(&attr, guard_size); + pthread_setattr_default_np(&attr); + } +#endif // defined(PROJECT_REQUIRE_ALPINE) && !defined(PROJECT_IS_MINGW) + +#if defined(PROJECT_ENABLE_SPDLOG) + spdlog::drop_all(); + spdlog::flush_every(std::chrono::seconds(5)); + spdlog::set_pattern("%Y-%m-%d|%T.%e|%^%l%$|%v"); + + spdlog::create_async("console"); + spdlog_initialized = true; +#endif // defined(PROJECT_ENABLE_SPDLOG) + +#if defined(PROJECT_ENABLE_LIBSODIUM) + if (sodium_init() == -1) { + utils::error::handle_error(function_name, "failed to initialize sodium"); + return false; + } +#endif // defined(PROJECT_ENABLE_LIBSODIUM) + +#if defined(PROJECT_ENABLE_OPENSSL) + SSL_library_init(); +#endif // defined(PROJECT_ENABLE_OPENSSL) + +#if defined(PROJECT_ENABLE_CURL) + { + auto res = curl_global_init(CURL_GLOBAL_ALL); + if (res != 0) { + utils::error::handle_error(function_name, + "failed to initialize curl|result|" + + std::to_string(res)); + return false; + } + + curl_initialized = true; + } +#endif // defined(PROJECT_ENABLE_CURL) + +#if defined(PROJECT_ENABLE_SQLITE) + { + auto res = sqlite3_initialize(); + if (res != SQLITE_OK) { + utils::error::handle_error(function_name, + "failed to initialize sqlite3|result|" + + std::to_string(res)); + return false; + } + + sqlite3_initialized = true; + } +#endif // defined(PROJECT_ENABLE_SQLITE) + + return true; +} + +void project_cleanup() { +#if defined(PROJECT_ENABLE_CURL) + if (curl_initialized) { + curl_global_cleanup(); + curl_initialized = false; + } +#endif // defined(PROJECT_ENABLE_CURL) + +#if defined(PROJECT_ENABLE_SQLITE) + if (sqlite3_initialized) { + sqlite3_shutdown(); + sqlite3_initialized = false; + } +#endif // defined(PROJECT_ENABLE_SQLITE) + +#if defined(PROJECT_ENABLE_SPDLOG) + if (spdlog_initialized) { + spdlog::shutdown(); + spdlog_initialized = false; + } +#endif // defined(PROJECT_ENABLE_SPDLOG) +} +} // namespace fifthgrid diff --git a/src/initialize.hpp b/src/initialize.hpp new file mode 100644 index 0000000..040f544 --- /dev/null +++ b/src/initialize.hpp @@ -0,0 +1,10 @@ +#ifndef LIBFIFTHGRID_INCLUDE_INITIALIZE_HPP_ +#define LIBFIFTHGRID_INCLUDE_INITIALIZE_HPP_ + +namespace fifthgrid { +void project_cleanup(); + +[[nodiscard]] auto project_initialize() -> bool; +} // namespace fifthgrid + +#endif // LIBFIFTHGRID_INCLUDE_INITIALIZE_HPP_ diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..6f715a1 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,36 @@ +#if defined(PROJECT_ENABLE_BACKWARD_CPP) +#include "backward.hpp" +#endif // defined(PROJECT_ENABLE_BACKWARD_CPP) + +#include "initialize.hpp" +#include "utils/config.hpp" +#include "utils/error.hpp" + +using namespace fifthgrid; + +auto main(int argc, char **argv) -> int { + FIFTHGRID_USES_FUNCTION_NAME(); + +#if defined(PROJECT_ENABLE_BACKWARD_CPP) + static backward::SignalHandling sh; +#endif // defined(PROJECT_ENABLE_BACKWARD_CPP) + + if (not fifthgrid::project_initialize()) { + fifthgrid::project_cleanup(); + return -1; + } + + int exit_code{0}; + + try { + // TODO Main code here + } catch (const std::exception &e) { + utils::error::handle_exception(function_name, e); + } catch (...) { + utils::error::handle_exception(function_name); + } + + fifthgrid::project_cleanup(); + + return exit_code; +} diff --git a/src/main_test.cpp b/src/main_test.cpp new file mode 100644 index 0000000..d60e23f --- /dev/null +++ b/src/main_test.cpp @@ -0,0 +1,39 @@ +#if defined(PROJECT_ENABLE_BACKWARD_CPP) +#include "backward.hpp" +#endif // defined(PROJECT_ENABLE_BACKWARD_CPP) + +#include "gtest/gtest.h" + +#include "initialize.hpp" +#include "utils/config.hpp" +#include "utils/error.hpp" + +using namespace fifthgrid; + +int PROJECT_TEST_RESULT{0}; + +auto main(int argc, char **argv) -> int { + FIFTHGRID_USES_FUNCTION_NAME(); + +#if defined(PROJECT_ENABLE_BACKWARD_CPP) + static backward::SignalHandling sh; +#endif + + if (not fifthgrid::project_initialize()) { + fifthgrid::project_cleanup(); + return -1; + } + + try { + ::testing::InitGoogleTest(&argc, argv); + PROJECT_TEST_RESULT = RUN_ALL_TESTS(); + } catch (const std::exception &e) { + utils::error::handle_exception(function_name, e); + } catch (...) { + utils::error::handle_exception(function_name); + } + + fifthgrid::project_cleanup(); + + return PROJECT_TEST_RESULT; +} diff --git a/src/project.cmake b/src/project.cmake new file mode 100644 index 0000000..7727aab --- /dev/null +++ b/src/project.cmake @@ -0,0 +1,5 @@ +add_project_library(lib${PROJECT_NAME} "" "" "${PROJECT_ADDITIONAL_SOURCES}") + +add_project_executable(${PROJECT_NAME} lib${PROJECT_NAME} lib${PROJECT_NAME}) + +add_project_test_executable(${PROJECT_NAME}_test lib${PROJECT_NAME} lib${PROJECT_NAME}) diff --git a/src/scripts/cleanup.cmd b/src/scripts/cleanup.cmd new file mode 100644 index 0000000..71111cb --- /dev/null +++ b/src/scripts/cleanup.cmd @@ -0,0 +1,11 @@ +@echo off + +setlocal + +set ARG1=%~1 +set ARG2=%~2 +set ARG3=%~3 + +pushd "%~dp0%" + call mingw64 -no-start ./cleanup.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 +popd diff --git a/src/scripts/cleanup.sh b/src/scripts/cleanup.sh new file mode 100644 index 0000000..b77c0fd --- /dev/null +++ b/src/scripts/cleanup.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +PROJECT_SCRIPTS_DIR=$(dirname "$0") +PROJECT_SCRIPTS_DIR=$(realpath ${PROJECT_SCRIPTS_DIR}) +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1>/dev/null 2>&1 + +for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do + PROJECT_LIBRARY_LOWER=$(echo ${PROJECT_LIBRARY} | tr "[:upper:]" "[:lower:]") + ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY} + KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY} + if [ ${!ENABLE_NAME} == "OFF" ] && [ ${!KEEP_NAME} != "1" ]; then + CLEANUP_LIST=(${PROJECT_CLEANUP[${PROJECT_LIBRARY}]//:/ }) + for CLEANUP_ITEM in "${CLEANUP_LIST[@]}"; do + rm -r ${PROJECT_SUPPORT_DIR}/${CLEANUP_ITEM} + done + + ${SED} -i "/.*\/${PROJECT_LIBRARY_LOWER}\.cmake/d" "${PROJECT_SOURCE_DIR}/cmake/libraries.cmake" + ${SED} -i "/D${ENABLE_NAME}/d" "${PROJECT_SOURCE_DIR}/CMakeLists.txt" + + ${SED} -i "/${ENABLE_NAME}/d" "${PROJECT_SOURCE_DIR}/cmake/options.cmake" + ${SED} -i "/\[${PROJECT_LIBRARY}\]/d" "${PROJECT_SOURCE_DIR}/scripts/libraries.sh" + ${SED} -i "/\ \ ${PROJECT_LIBRARY}/d" "${PROJECT_SOURCE_DIR}/scripts/libraries.sh" + + ${SED} -i "/${PROJECT_LIBRARY}_HASH/d" "${PROJECT_SOURCE_DIR}/cmake/hashes.cmake" + ${SED} -i "/${PROJECT_LIBRARY}2_HASH/d" "${PROJECT_SOURCE_DIR}/cmake/hashes.cmake" + + ${SED} -i "/${PROJECT_LIBRARY}_VERSION/d" "${PROJECT_SOURCE_DIR}/cmake/versions.cmake" + ${SED} -i "/${PROJECT_LIBRARY}2_VERSION/d" "${PROJECT_SOURCE_DIR}/cmake/versions.cmake" + ${SED} -i "/\[${PROJECT_LIBRARY}\]/d" "${PROJECT_SOURCE_DIR}/scripts/versions.sh" + ${SED} -i "/\[${PROJECT_LIBRARY}2\]/d" "${PROJECT_SOURCE_DIR}/scripts/versions.sh" + + rm -f "${PROJECT_SOURCE_DIR}/cmake/libraries/${PROJECT_LIBRARY_LOWER}.cmake" + fi + + if [ ${!ENABLE_NAME} == "ON" ] && [ "${PROJECT_CLEANUP[${PROJECT_LIBRARY}_ON]}" != "" ]; then + CLEANUP_LIST=(${PROJECT_CLEANUP[${PROJECT_LIBRARY}_ON]//:/ }) + for CLEANUP_ITEM in "${CLEANUP_LIST[@]}"; do + rm -r ${PROJECT_SUPPORT_DIR}/${CLEANUP_ITEM} + done + fi +done + +${SED} -i "s/\ OFF)/\ ON)/" "${PROJECT_SOURCE_DIR}/cmake/options.cmake" diff --git a/src/scripts/copy_mingw64_deps.sh b/src/scripts/copy_mingw64_deps.sh new file mode 100644 index 0000000..8f44e5c --- /dev/null +++ b/src/scripts/copy_mingw64_deps.sh @@ -0,0 +1,207 @@ +#!/usr/bin/env bash + +PROJECT_MINGW64_COPY_DEPENDENCIES=() + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1>/dev/null 2>&1 + +if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_STATIC_LINK}" == "OFF" ]; then + mkdir -p "${PROJECT_DIST_DIR}" + rm -f ${PROJECT_DIST_DIR}/*.dll + + PROJECT_MINGW64_COPY_DEPENDENCIES+=( + /mingw64/bin/libgcc_s_seh-1.dll + /mingw64/bin/libstdc++-6.dll + /mingw64/bin/libwinpthread-1.dll + /mingw64/bin/libzlib1.dll + /mingw64/bin/libzstd.dll + /mingw64/bin/zlib1.dll + ) + + if [ "${PROJECT_ENABLE_BACKWARD_CPP}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/msvcr90.dll) + fi + + if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libboost*.dll) + fi + + if [ "${PROJECT_ENABLE_CLI11}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libcli11*.dll) + fi + + if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=( + /mingw64/bin/libcurl*.dll + /mingw64/bin/libnghttp2-*.dll + ) + fi + + if [ "${PROJECT_ENABLE_FLAC}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libFLAC*.dll) + fi + + if [ "${PROJECT_ENABLE_FMT}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libfmt*.dll) + fi + + if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=( + /mingw64/bin/libexpat*.dll + /mingw64/bin/libfontconfig*.dll + ) + fi + + if [ "${PROJECT_ENABLE_FREETYPE2}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libfreetype*.dll) + fi + + if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libdsm.dll) + fi + + if [ "${PROJECT_ENABLE_LIBEVENT}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libevent*.dll) + fi + + if [ "${PROJECT_ENABLE_LIBICONV}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libiconv.dll) + fi + + if [ "${PROJECT_ENABLE_LIBJPEG_TURBO}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libjpeg*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libturbo*.dll) + fi + + if [ "${PROJECT_ENABLE_LIBPNG}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpng*.dll) + fi + + if [ "${PROJECT_ENABLE_LIBSODIUM}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsodium*.dll) + fi + + if [ "${PROJECT_ENABLE_NANA}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libnana*.dll) + fi + + if [ "${PROJECT_ENABLE_NUSPELL}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libnuspell-*.dll) + fi + + if [ "${PROJECT_ENABLE_OGG}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libogg*.dll) + fi + + if [ "${PROJECT_ENABLE_OPENAL}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libopenal*.dll) + fi + + if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=( + /mingw64/bin/libssl*.dll + /mingw64/bin/libcrypt*.dll + ) + fi + + if [ "${PROJECT_ENABLE_PUGIXML}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpugi*.dll) + fi + + if [ "${PROJECT_ENABLE_SDL}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/SDL2*.dll) + fi + + if [ "${PROJECT_ENABLE_SECP256K1}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsecp256k1*.dll) + fi + + if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsfml*.dll) + fi + + if [ "${PROJECT_ENABLE_SPDLOG}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libspdlog*.dll) + fi + + if [ "${PROJECT_ENABLE_SQLITE}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsqlite3-*.dll) + fi + + if [ "${PROJECT_ENABLE_TASN}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libtasn1.dll) + fi + + if [ "${PROJECT_ENABLE_TESTING}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=( + /mingw64/bin/libgtest*.dll + /mingw64/bin/libgmock*.dll + ) + fi + + if [ "${PROJECT_ENABLE_TPL}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libtiny-process*.dll) + fi + + if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libvorbis*.dll) + fi + + if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libLerc.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsharpyuv-*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libdeflate.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libglib-2*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libgraphite2.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libharfbuzz-*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libjbig-*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpcre2-*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libtiff-*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwebp-*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwxbase*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwxm*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/wxbase*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/wxm*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/libwxbase*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/libwxm*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/wxbase*.dll) + PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/wxm*.dll) + fi + + if [ "${PROJECT_ENABLE_SDL}" == "ON" ] || [ "${PROJECT_ENABLE_SFML}" == "ON" ] || + [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ] || [ "${PROJECT_ENABLE_NANA}" == "ON" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=( + /mingw64/bin/libOpenCL*.dll + /mingw64/bin/libopencl*.dll + /mingw64/bin/libgallium_wgl.dll + /mingw64/bin/libva*.dll + /mingw64/bin/opengl*.dll + /mingw64/bin/vulkan*.dll + ) + fi + + rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/bin/*.dll "${PROJECT_DIST_DIR}/" + rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/lib/*.dll "${PROJECT_DIST_DIR}/" + if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then + rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/lib/gcc_x64_dll/*.dll "${PROJECT_DIST_DIR}/" + fi +fi + +if [ "${PROJECT_ENABLE_WINFSP}" == "ON" ]; then + if [ "${PROJECT_BUILD_ARCH}" == "x86_64" ]; then + WINFSP_DLL_PART=x64 + fi + + if [ "${WINFSP_DLL_PART}" != "" ]; then + PROJECT_MINGW64_COPY_DEPENDENCIES+=(${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/bin/winfsp-${WINFSP_DLL_PART}.dll) + fi +fi + +if [ "${PROJECT_ENABLE_VLC}" == "ON" ]; then + rsync -av --progress ${PROJECT_3RD_PARTY_DIR}/vlc/ "${PROJECT_DIST_DIR}/vlc/" +fi + +for PROJECT_DEPENDENCY in "${PROJECT_MINGW64_COPY_DEPENDENCIES[@]}"; do + rsync -av --progress ${PROJECT_DEPENDENCY} "${PROJECT_DIST_DIR}/" +done diff --git a/src/scripts/create_containers.sh b/src/scripts/create_containers.sh new file mode 100644 index 0000000..2d785f2 --- /dev/null +++ b/src/scripts/create_containers.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1>/dev/null 2>&1 + +if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then + . "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$1" "$2" "$3" "$4" "$5" + rm ${PROJECT_SCRIPTS_DIR}/cleanup.* +fi + +function create_containers() { + BUILD_TYPE=$1 + + for FILE in "${PROJECT_SOURCE_DIR}/docker/${BUILD_TYPE}/*"; do + DOCKER_CREATE_ONLY=1 + DOCKER_NAME=$(basename ${FILE}) + DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME} + + . "${PROJECT_SCRIPTS_DIR}/docker_common.sh" + done +} + +create_containers aarch64 +create_containers x86_64 diff --git a/src/scripts/deliver.cmd b/src/scripts/deliver.cmd new file mode 100644 index 0000000..9fe7bf0 --- /dev/null +++ b/src/scripts/deliver.cmd @@ -0,0 +1,13 @@ +@echo off + +setlocal + +set DEST=%~1 +set DIST=%~2 +set ARG1=%~3 +set ARG2=%~4 +set ARG3=%~5 + +pushd "%~dp0%" + call mingw64 -no-start ./deliver.sh "%DEST%" "%DIST%" "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1 +popd diff --git a/src/scripts/deliver.sh b/src/scripts/deliver.sh new file mode 100644 index 0000000..4d54f61 --- /dev/null +++ b/src/scripts/deliver.sh @@ -0,0 +1,103 @@ +#!/usr/bin/env bash + +DEST_DIR=$1 +DIST_DIR=$2 + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$3" "$4" "$5" "$6" "$7" + +function error_exit() { + echo $1 + exit $2 +} + +if [ ! -d "${PROJECT_DIST_DIR}" ]; then + error_exit "dist directory not found: ${PROJECT_DIST_DIR}" 2 +fi + +if [ "${DIST_DIR}" == "" ]; then + DIST_DIR="${PROJECT_DIST_DIR}" +fi +DIST_DIR=$(realpath "${DIST_DIR}") + +if [ ! -d "${DIST_DIR}" ]; then + error_exit "dist directory not found: ${DIST_DIR}" 2 +fi + +if [ "${DEST_DIR}" == "" ]; then + error_exit "dest directory not set" 2 +fi + +if [ ! -d "${DEST_DIR}" ]; then + error_exit "dest directory not found: ${DEST_DIR}" 2 +fi + +pushd "${PROJECT_SOURCE_DIR}" +BRANCH=$(git branch --show-current) +RELEASE=$(grep PROJECT_RELEASE_ITER= ./config.sh | ${SED} s/PROJECT_RELEASE_ITER=//g) +popd + +if [ "${BRANCH}" == "master" ] || [ "${BRANCH}" == "alpha" ] || + [ "${BRANCH}" == "main" ] || [ "${BRANCH}" == "release" ] || + [ "${BRANCH}" == "beta" ] || [ "${BRANCH}" == "rc" ]; then + DEST_DIR=${DEST_DIR}/${RELEASE} +elif [[ ${BRANCH} = *'-alpha-'* ]] || [[ ${BRANCH} = *'-beta-'* ]] || + [[ ${BRANCH} = *'-rc-'* ]] || [[ ${BRANCH} = *'-release-'* ]]; then + DEST_DIR=${DEST_DIR}/nightly +else + error_exit "skipping ${PROJECT_FILE_PART}" 0 +fi + +pushd "${DIST_DIR}" +if [ ! -f "./${PROJECT_OUT_FILE}" ]; then + error_exit "failed to find file: ${PROJECT_OUT_FILE}" 1 +fi + +if [ ! -f "./${PROJECT_OUT_FILE}.sha256" ]; then + error_exit "failed to find file: ${PROJECT_OUT_FILE}.sha256" 1 +fi + +if [ "${PROJECT_PRIVATE_KEY}" != "" ] && [ ! -f "./${PROJECT_OUT_FILE}.sig" ]; then + error_exit "failed to find file: ${PROJECT_OUT_FILE}.sig" 1 +fi + +cp -f ./${PROJECT_OUT_FILE} ${DEST_DIR} || + error_exit "failed to deliver file: ${PROJECT_OUT_FILE}" 1 + +cp -f ./${PROJECT_OUT_FILE}.sha256 ${DEST_DIR} || + error_exit "failed to deliver file: ${PROJECT_OUT_FILE}.sha256" 1 + +if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then + cp -f ./${PROJECT_OUT_FILE}.sig ${DEST_DIR} || + error_exit "failed to deliver file: ${PROJECT_OUT_FILE}.sig" 1 +fi + +if [ "${PROJECT_IS_MINGW}" == "1" ] && [ -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe" ]; then + cp -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe" ${DEST_DIR} || + error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}" 1 + + cp -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sha256" ${DEST_DIR} || + error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sha256" 1 + + if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then + cp -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sig" ${DEST_DIR} || + error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sig" 1 + fi +fi + +if [ "${PROJECT_IS_DARWIN}" == "1" ] && [ -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg" ]; then + cp -f -X "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg" ${DEST_DIR} || + error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg" 1 + + cp -f -X "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sha256" ${DEST_DIR} || + error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sha256" 1 + + if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then + cp -f -X "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sig" ${DEST_DIR} || + error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sig" 1 + fi +fi +popd + +error_exit "delivered ${PROJECT_FILE_PART}" 0 diff --git a/src/scripts/docker_common.sh b/src/scripts/docker_common.sh new file mode 100644 index 0000000..ae0559a --- /dev/null +++ b/src/scripts/docker_common.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +if [ "${PROJECT_BUILD_ARCH}" == "aarch64" ] && + [ "${PROJECT_ENABLE_MULTIARCH_DOCKER}" == "1" ]; then + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes +fi + +if [ "${DOCKER_NAME}" == "mingw64" ]; then + APP_VERSION_BUILD_ARGS=${PROJECT_MINGW64_DOCKER_BUILD_ARGS} + IS_MINGW=1 + IS_UNIX=1 +else + IS_MINGW=0 + IS_UNIX=0 +fi + +if [ "${DOCKER_CREATE_ONLY}" != "1" ]; then + docker stop ${DOCKER_CONTAINER} + docker rm ${DOCKER_CONTAINER} +fi + +pushd "${PROJECT_SOURCE_DIR}/support" +cp -f ${PROJECT_SOURCE_DIR}/docker/${PROJECT_BUILD_ARCH}/${DOCKER_NAME} Dockerfile + +if [ "${PROJECT_BUILD_ARCH}" == "aarch64" ]; then + docker build ${APP_VERSION_BUILD_ARGS} \ + --platform linux/arm64 \ + --build-arg NUM_JOBS=${NUM_JOBS} \ + --build-arg UID=$(id -u) \ + --build-arg GID=$(id -g) \ + --build-arg USERNAME=$(id -un) \ + -t ${DOCKER_TAG} . || exit 1 +else + docker build ${APP_VERSION_BUILD_ARGS} \ + --build-arg NUM_JOBS=${NUM_JOBS} \ + --build-arg UID=$(id -u) \ + --build-arg GID=$(id -g) \ + --build-arg USERNAME=$(id -un) \ + -t ${DOCKER_TAG} . || exit 1 +fi +rm Dockerfile +popd + +if [ "${DOCKER_CREATE_ONLY}" != "1" ]; then + docker run -td \ + --env DEVELOPER_PRIVATE_KEY=${DEVELOPER_PRIVATE_KEY} \ + --env DEVELOPER_PUBLIC_KEY=${DEVELOPER_PUBLIC_KEY} \ + --env MY_NUM_JOBS=${NUM_JOBS} \ + --name ${DOCKER_CONTAINER} \ + -u $(id -u):$(id -g) \ + -v /.ci/${PROJECT_NAME}:/.ci/${PROJECT_NAME}:ro \ + -v ${PROJECT_SOURCE_DIR}:${PROJECT_SOURCE_DIR}:rw,z \ + -w ${PROJECT_SOURCE_DIR} \ + ${DOCKER_TAG} || exit 1 + + if [ "${DOCKER_SHELL}" == "1" ]; then + docker exec -it ${DOCKER_CONTAINER} /bin/bash + else + docker exec \ + ${DOCKER_CONTAINER} \ + /bin/bash -c \ + "${PROJECT_SOURCE_DIR}/scripts/make_common.sh \"${PROJECT_BUILD_ARCH}\" \"${PROJECT_CMAKE_BUILD_TYPE}\" \"${PROJECT_BUILD_CLEAN}\" ${IS_MINGW} ${IS_UNIX}" || exit 1 + fi + + docker stop ${DOCKER_CONTAINER} + docker rm ${DOCKER_CONTAINER} +fi diff --git a/src/scripts/env.sh b/src/scripts/env.sh new file mode 100644 index 0000000..7166d2a --- /dev/null +++ b/src/scripts/env.sh @@ -0,0 +1,441 @@ +#!/usr/bin/env bash + +PROJECT_BUILD_ARCH=$1 +PROJECT_CMAKE_BUILD_TYPE=$2 +PROJECT_BUILD_CLEAN=$3 +PROJECT_IS_MINGW=$4 +PROJECT_IS_MINGW_UNIX=$5 +DISABLE_CREATE_DIRS=$6 + +PROJECT_FLUTTER_BASE_HREF="/" + +if [ "${PROJECT_IS_MINGW}" != "1" ]; then + PROJECT_IS_MINGW_UNIX=0 +fi + +PROJECT_SOURCE_DIR=${PROJECT_SCRIPTS_DIR}/.. +PROJECT_SOURCE_DIR=$(realpath "${PROJECT_SOURCE_DIR}") + +NUM_JOBS=${MY_NUM_JOBS} +if [[ -z "${NUM_JOBS}" ]]; then + NUM_JOBS=$(getconf _NPROCESSORS_ONLN 2>/dev/null || + getconf NPROCESSORS_ONLN 2>/dev/null || echo 1) + if [ "${NUM_JOBS}" -gt "4" ]; then + NUM_JOBS=$(expr ${NUM_JOBS} - 2) + elif [ "${NUM_JOBS}" -gt "1" ]; then + NUM_JOBS=$(expr ${NUM_JOBS} - 1) + fi +fi + +pushd "${PROJECT_SOURCE_DIR}" + +PROJECT_GIT_REV=$(git rev-parse --short HEAD) + +. "${PROJECT_SCRIPTS_DIR}/versions.sh" +. "${PROJECT_SCRIPTS_DIR}/libraries.sh" + +for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do + ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY} + KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY} + if [ "${PROJECT_LIBRARY}" == "TESTING" ]; then + export ${ENABLE_NAME}=ON + else + export ${ENABLE_NAME}=OFF + fi + export ${KEEP_NAME}=0 +done + +PROJECT_APP_LIST=() +PROJECT_CMAKE_OPTS="" +PROJECT_ENABLE_V2_ERRORS=OFF +PROJECT_ENABLE_WIN32_LONG_PATH_NAMES=OFF +PROJECT_IS_ALPINE=0 +PROJECT_IS_ARM64=0 +PROJECT_IS_DARWIN=0 +PROJECT_MINGW64_COPY_DEPENDENCIES=() +PROJECT_MSYS2_PACKAGE_LIST=() +PROJECT_REQUIRE_ALPINE=OFF +PROJECT_STATIC_LINK=OFF +PROJECT_MACOS_BUNDLE_ID="" +PROJECT_MACOS_ICNS_NAME="" + +if [ "$(uname -s)" == "Darwin" ]; then + PROJECT_IS_DARWIN=1 + export SED=gsed +else + export SED=sed +fi + +if [ "${PROJECT_BUILD_ARCH}" == "" ]; then + if [ "$(uname -m)" == "arm64" ]; then + PROJECT_BUILD_ARCH=aarch64 + else + PROJECT_BUILD_ARCH=x86_64 + fi +fi + +if [ "${PROJECT_BUILD_ARCH}" == "aarch64" ]; then + PROJECT_IS_ARM64=1 +fi + +if [ "${PROJECT_BUILD_ARCH}" == "x86_64" ]; then + PROJECT_BUILD_ARCH2="x86-64" +else + PROJECT_BUILD_ARCH2="${PROJECT_BUILD_ARCH}" +fi + +if [ -f /etc/alpine-release ]; then + PROJECT_IS_ALPINE=1 +fi + +if [ "${PROJECT_IS_MINGW}" == "" ]; then + PROJECT_IS_MINGW=0 +fi + +if [ "${PROJECT_IS_MINGW_UNIX}" == "" ]; then + PROJECT_IS_MINGW_UNIX=0 +fi + +. "${PROJECT_SOURCE_DIR}/config.sh" + +if [ "${PROJECT_IS_MINGW}" == "0" ]; then + PROJECT_ENABLE_WIN32_LONG_PATH_NAMES=OFF +fi + +if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then + PROJECT_ENABLE_FLAC=ON + PROJECT_ENABLE_FONTCONFIG=ON + PROJECT_ENABLE_FREETYPE2=ON + PROJECT_ENABLE_OGG=ON + PROJECT_ENABLE_OPENAL=ON + PROJECT_ENABLE_VORBIS=ON + PROJECT_STATIC_LINK=OFF +fi + +if [ "${PROJECT_ENABLE_CPP_HTTPLIB}" == "ON" ]; then + PROJECT_ENABLE_CURL=ON + PROJECT_ENABLE_OPENSSL=ON +fi + +if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then + PROJECT_ENABLE_OPENSSL=ON +fi + +if [ "${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}" == "ON" ]; then + PROJECT_ENABLE_BOOST=ON + PROJECT_ENABLE_SECP256K1=ON +fi + +if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ]; then + PROJECT_ENABLE_FREETYPE2=ON +fi + +if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then + PROJECT_ENABLE_CURL=ON + PROJECT_STATIC_LINK=OFF +fi + +if [ "${PROJECT_ENABLE_SPDLOG}" == "ON" ]; then + PROJECT_ENABLE_FMT=OFF +fi + +if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then + PROJECT_ENABLE_OGG=ON +fi + +if [ "${PROJECT_ENABLE_FLAC}" == "ON" ]; then + PROJECT_ENABLE_LIBICONV=ON + PROJECT_ENABLE_OGG=ON + PROJECT_ENABLE_VORBIS=ON +fi + +if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then + PROJECT_ENABLE_OPENSSL=ON +fi + +if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ] || [ "${PROJECT_ENABLE_NANA}" == "ON" ] || + [ "${PROJECT_ENABLE_SFML}" == "ON" ] || [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ] || + [ "${PROJECT_ENABLE_SDL}" == "ON" ]; then + PROJECT_ENABLE_LIBJPEG_TURBO=ON + PROJECT_ENABLE_LIBPNG=ON +fi + +if [ "${PROJECT_IS_MINGW}" == "1" ]; then + PROJECT_ENABLE_BACKWARD_CPP=OFF +fi + +if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then + PROJECT_ENABLE_LIBICONV=ON + PROJECT_ENABLE_LIBTASN=ON + PROJECT_ENABLE_OPENSSL=ON +fi + +if [ "${PROJECT_CMAKE_BUILD_TYPE}" == "" ]; then + PROJECT_CMAKE_BUILD_TYPE=RelWithDebInfo +fi + +PROJECT_CMAKE_BUILD_TYPE_LOWER=$(echo "${PROJECT_CMAKE_BUILD_TYPE}" | tr '[:upper:]' '[:lower:]') +if [ "${PROJECT_CMAKE_BUILD_TYPE_LOWER}" == "release" ]; then + PROJECT_CMAKE_BUILD_TYPE=RelWithDebInfo +elif [ "${PROJECT_CMAKE_BUILD_TYPE_LOWER}" == "debug" ]; then + PROJECT_CMAKE_BUILD_TYPE=Debug +fi + +if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" != "1" ]; then + PROJECT_STATIC_LINK=OFF +fi + +if [ "${PROJECT_STATIC_LINK}" == "ON" ]; then + PROJECT_BUILD_SHARED_LIBS=OFF + PROJECT_ENABLE_BACKWARD_CPP=OFF + PROJECT_LINK_TYPE=static + if [ "${PROJECT_IS_DARWIN}" == "0" ]; then + PROJECT_REQUIRE_ALPINE=ON + else + PROJECT_REQUIRE_ALPINE=OFF + fi +else + PROJECT_BUILD_SHARED_LIBS=ON + PROJECT_LINK_TYPE=shared + PROJECT_REQUIRE_ALPINE=OFF +fi + +PROJECT_BUILD_DIR=${PROJECT_SOURCE_DIR}/build/${PROJECT_CMAKE_BUILD_TYPE_LOWER}/${PROJECT_LINK_TYPE} +PROJECT_DIST_DIR=${PROJECT_SOURCE_DIR}/dist/${PROJECT_CMAKE_BUILD_TYPE_LOWER}/${PROJECT_LINK_TYPE} + +if [ "${PROJECT_IS_MINGW}" == "1" ]; then + PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/win32 + PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/win32 +elif [ "${PROJECT_IS_DARWIN}" == "1" ]; then + PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/darwin + PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/darwin +else + PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/linux + PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/linux +fi + +if [ "${PROJECT_IS_ARM64}" == "1" ]; then + PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/aarch64 + PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/aarch64 +else + PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/x86_64 + PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/x86_64 +fi + +PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/${PROJECT_NAME} +PROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_BUILD_DIR}/deps + +PROJECT_SUPPORT_DIR=${PROJECT_SOURCE_DIR}/support +PROJECT_3RD_PARTY_DIR=${PROJECT_SUPPORT_DIR}/3rd_party + +if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then + if [ "${PROJECT_IS_MINGW}" == "1" ]; then + OPENSSL_ROOT_DIR=/mingw64 + else + OPENSSL_ROOT_DIR=${PROJECT_EXTERNAL_BUILD_ROOT} + fi +fi + +if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then + PROJECT_TOOLCHAIN_FILE_CMAKE=/cmake_toolchain.cmake + PROJECT_TOOLCHAIN_FILE_MESON=/meson_cross_file.txt + PROJECT_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=${PROJECT_TOOLCHAIN_FILE_CMAKE} ${PROJECT_CMAKE_OPTS}" +fi + +if [ -f "${PROJECT_SOURCE_DIR}/cmake/versions.cmake" ]; then + VERSIONS=($(${SED} -e s/\ /=/g -e s/set\(//g -e s/\)//g "${PROJECT_SOURCE_DIR}/cmake/versions.cmake")) + + PROJECT_MINGW64_DOCKER_BUILD_ARGS=() + + for VERSION in "${VERSIONS[@]}"; do + LOOKUP_NAME=$(echo ${VERSION} | ${SED} s/_VERSION.*// | sed s/GTEST/TESTING/g) + ENABLE_NAME=PROJECT_ENABLE_${LOOKUP_NAME} + if [ "${!ENABLE_NAME}" != "OFF" ]; then + PROJECT_MINGW64_DOCKER_BUILD_ARGS+=("--build-arg ${VERSION}") + fi + done + + PROJECT_MINGW64_DOCKER_BUILD_ARGS=${PROJECT_MINGW64_DOCKER_BUILD_ARGS[*]} +fi + +PROJECT_CMAKE_OPTS="-DPROJECT_3RD_PARTY_DIR=${PROJECT_3RD_PARTY_DIR} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_ARCH=${PROJECT_BUILD_ARCH} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_DIR=${PROJECT_BUILD_DIR} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_CMAKE_BUILD_TYPE=${PROJECT_CMAKE_BUILD_TYPE} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_DIST_DIR=${PROJECT_DIST_DIR} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_V2_ERRORS=${PROJECT_ENABLE_V2_ERRORS} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_WIN32_LONG_PATH_NAMES=${PROJECT_ENABLE_WIN32_LONG_PATH_NAMES} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_EXTERNAL_BUILD_ROOT} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_GIT_REV=${PROJECT_GIT_REV} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_IS_DARWIN=${PROJECT_IS_DARWIN} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_IS_MINGW_UNIX=${PROJECT_IS_MINGW_UNIX} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_MACOS_BUNDLE_ID=${PROJECT_MACOS_BUNDLE_ID} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_MACOS_ICNS_NAME=${PROJECT_MACOS_ICNS_NAME} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_MAJOR_VERSION=${PROJECT_MAJOR_VERSION} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_MINOR_VERSION=${PROJECT_MINOR_VERSION} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_NAME=${PROJECT_NAME} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_RELEASE_ITER=${PROJECT_RELEASE_ITER} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_RELEASE_NUM=${PROJECT_RELEASE_NUM} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_REQUIRE_ALPINE=${PROJECT_REQUIRE_ALPINE} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_REVISION_VERSION=${PROJECT_REVISION_VERSION} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_STATIC_LINK=${PROJECT_STATIC_LINK} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_SUPPORT_DIR=${PROJECT_SUPPORT_DIR} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_TOOLCHAIN_FILE_CMAKE=${PROJECT_TOOLCHAIN_FILE_CMAKE} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_TOOLCHAIN_FILE_MESON=${PROJECT_TOOLCHAIN_FILE_MESON} ${PROJECT_CMAKE_OPTS}" + +for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do + ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY} + PROJECT_CMAKE_OPTS="${PROJECT_CMAKE_OPTS} -D${ENABLE_NAME}=${!ENABLE_NAME}" +done + +PKG_CONFIG_PATH="${PROJECT_EXTERNAL_BUILD_ROOT}/lib/pkgconfig:${PROJECT_EXTERNAL_BUILD_ROOT}/lib64/pkgconfig:${PROJECT_EXTERNAL_BUILD_ROOT}/shared/pkgconfig:${PKG_CONFIG_PATH}" + +if [ "${DISABLE_CREATE_DIRS}" != "1" ]; then + mkdir -p "${PROJECT_BUILD_DIR}" + mkdir -p "${PROJECT_DIST_DIR}" +fi + +PATH="${PROJECT_EXTERNAL_BUILD_ROOT}/bin:${PATH}" + +if [ "${PROJECT_IS_MINGW}" == "1" ]; then + PROJECT_OS=windows +elif [ "${PROJECT_IS_DARWIN}" == "1" ]; then + PROJECT_OS=darwin +else + PROJECT_OS=linux +fi + +PROJECT_FILE_PART=${PROJECT_NAME}_${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_REVISION_VERSION}-${PROJECT_RELEASE_ITER}_${PROJECT_GIT_REV}_${PROJECT_OS}_${PROJECT_BUILD_ARCH2} +PROJECT_OUT_FILE=${PROJECT_FILE_PART}.tar.gz + +if [ "${PROJECT_IS_MINGW}" == "1" ]; then + PROJECT_APP_BINARY_EXT=.exe +fi + +if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" != "1" ]; then + MSYS=winsymlinks:nativestrict +fi + +PROJECT_ENABLE_INNOSETUP=1 + +export MSYS +export NUM_JOBS +export OPENSSL_ROOT_DIR +export PATH +export PKG_CONFIG_PATH +export PROJECT_3RD_PARTY_DIR +export PROJECT_APP_BINARY_EXT +export PROJECT_APP_LIST +export PROJECT_BUILD_ARCH +export PROJECT_BUILD_ARCH2 +export PROJECT_BUILD_CLEAN +export PROJECT_BUILD_DIR +export PROJECT_BUILD_SHARED_LIBS +export PROJECT_CMAKE_BUILD_TYPE +export PROJECT_CMAKE_BUILD_TYPE_LOWER +export PROJECT_CMAKE_OPTS +export PROJECT_COMPANY_NAME +export PROJECT_COPYRIGHT +export PROJECT_DESC +export PROJECT_DIST_DIR +export PROJECT_ENABLE_V2_ERRORS +export PROJECT_ENABLE_WIN32_LONG_PATH_NAMES +export PROJECT_FILE_PART +export PROJECT_FLUTTER_BASE_HREF +export PROJECT_GIT_REV +export PROJECT_IS_ALPINE +export PROJECT_IS_ARM64 +export PROJECT_IS_DARWIN +export PROJECT_IS_MINGW +export PROJECT_IS_MINGW_UNIX +export PROJECT_LINK_TYPE +export PROJECT_MACOS_BUNDLE_ID +export PROJECT_MACOS_ICNS_NAME +export PROJECT_MAJOR_VERSION +export PROJECT_MINGW64_COPY_DEPENDENCIES +export PROJECT_MINGW64_DOCKER_BUILD_ARGS +export PROJECT_MINOR_VERSION +export PROJECT_MSYS2_PACKAGE_LIST +export PROJECT_NAME +export PROJECT_OS +export PROJECT_OUT_FILE +export PROJECT_PRIVATE_KEY +export PROJECT_PUBLIC_KEY +export PROJECT_RELEASE_ITER +export PROJECT_RELEASE_NUM +export PROJECT_REQUIRE_ALPINE +export PROJECT_REVISION_VERSION +export PROJECT_SOURCE_DIR +export PROJECT_STATIC_LINK +export PROJECT_SUPPORT_DIR +export PROJECT_TOOLCHAIN_FILE_CMAKE +export PROJECT_TOOLCHAIN_FILE_MESON +export PROJECT_URL + +for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do + ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY} + KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY} + export ${ENABLE_NAME} + export ${KEEP_NAME} +done + +echo "-=[Settings]=-" +echo " App binary extension: ${PROJECT_APP_BINARY_EXT}" +echo " App list: ${PROJECT_APP_LIST[*]}" +echo " Build arch: ${PROJECT_BUILD_ARCH}" +echo " Build arch2: ${PROJECT_BUILD_ARCH2}" +echo " Build clean: ${PROJECT_BUILD_CLEAN}" +echo " Build dir: ${PROJECT_BUILD_DIR}" +echo " Build shared libraries: ${PROJECT_BUILD_SHARED_LIBS}" +echo " CMake options: -G\"Unix Makefiles\" -DPROJECT_COMPANY_NAME=\"${PROJECT_COMPANY_NAME}\" -DPROJECT_COPYRIGHT=\"${PROJECT_COPYRIGHT}\" -DPROJECT_DESC=\"${PROJECT_DESC}\" -DPROJECT_URL=\"${PROJECT_URL}\" ${PROJECT_CMAKE_OPTS} " +echo " CMake toolchain file: ${PROJECT_TOOLCHAIN_FILE_CMAKE}" +echo " Cmake Build type: ${PROJECT_CMAKE_BUILD_TYPE}" +echo " Company name: ${PROJECT_COMPANY_NAME}" +echo " Copyright: ${PROJECT_COPYRIGHT}" +echo " Description: ${PROJECT_DESC}" +echo " Dist dir: ${PROJECT_DIST_DIR}" +echo " Enable v2 errors: ${PROJECT_ENABLE_V2_ERRORS}" +echo " External build root: ${PROJECT_EXTERNAL_BUILD_ROOT}" +echo " File part: ${PROJECT_FILE_PART}" +echo " Flutter base href: ${PROJECT_FLUTTER_BASE_HREF}" +echo " Is ARM64: ${PROJECT_IS_ARM64}" +echo " Is Alpine: ${PROJECT_IS_ALPINE}" +echo " Is Darwin: ${PROJECT_IS_DARWIN}" +echo " Is MINGW on Unix: ${PROJECT_IS_MINGW_UNIX}" +echo " Is MINGW: ${PROJECT_IS_MINGW}" +echo " Job count: ${NUM_JOBS}" +echo " Link type: ${PROJECT_LINK_TYPE}" +if [ "${PROJECT_IS_MINGW}" == "1" ]; then + echo " Long path names: ${PROJECT_ENABLE_WIN32_LONG_PATH_NAMES}" +fi +if [ "${PROJECT_IS_DARWIN}" == "1" ]; then + echo " macOS bundle ID: ${PROJECT_MACOS_BUNDLE_ID}" + echo " macOS icns name: ${PROJECT_MACOS_ICNS_NAME}" +fi +echo " Meson toolchain file: ${PROJECT_TOOLCHAIN_FILE_MESON}" +if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then + echo " MinGW docker build args: ${PROJECT_MINGW64_DOCKER_BUILD_ARGS}" +fi +echo " OPENSSL_ROOT_DIR: ${OPENSSL_ROOT_DIR}" +echo " Out file: ${PROJECT_OUT_FILE}" +echo " PATH: ${PATH}" +echo " PKG_CONFIG_PATH: ${PKG_CONFIG_PATH}" +echo " Require Alpine: ${PROJECT_REQUIRE_ALPINE}" +echo " Static link: ${PROJECT_STATIC_LINK}" +echo " Support dir: ${PROJECT_SUPPORT_DIR}" +echo " Third-party dir: ${PROJECT_3RD_PARTY_DIR}" +echo " Unit testing enabled: ${PROJECT_ENABLE_TESTING}" +echo " URL: ${PROJECT_URL}" +echo "-=[Libraries]=-" +for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do + ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY} + KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY} + if [ "${!ENABLE_NAME}" == "ON" ] || [ "${!KEEP_NAME}" == "1" ]; then + echo " ${ENABLE_NAME}: Enable[${!ENABLE_NAME}] Keep[${!KEEP_NAME}]" + fi +done +popd diff --git a/src/scripts/info.cmd b/src/scripts/info.cmd new file mode 100644 index 0000000..a560b9d --- /dev/null +++ b/src/scripts/info.cmd @@ -0,0 +1,12 @@ +@echo off + +setlocal + +set ARG1=%~1 +set ARG2=%~2 +set ARG3=%~3 + +pushd "%~dp0%" + call mingw64 -no-start ./info.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 +popd + diff --git a/src/scripts/info.sh b/src/scripts/info.sh new file mode 100644 index 0000000..6cbfc6f --- /dev/null +++ b/src/scripts/info.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 diff --git a/src/scripts/libraries.sh b/src/scripts/libraries.sh new file mode 100644 index 0000000..9c76275 --- /dev/null +++ b/src/scripts/libraries.sh @@ -0,0 +1,146 @@ +#!/usr/bin/env bash + +PROJECT_LIBRARIES=( + BACKWARD_CPP + BOOST + CLI11 + CPP_HTTPLIB + CURL + CXXOPTS + DTL + FLAC + FMT + FONTCONFIG + FREETYPE2 + FUSE + FZF + GTKMM + JSON + LIBBITCOIN_SYSTEM + LIBDSM + LIBEVENT + LIBICONV + LIBJPEG_TURBO + LIBPNG + LIBSODIUM + LIBTASN + NANA + NUSPELL + OGG + OPENAL + OPENSSL + PUGIXML + ROCKSDB + SAGO_PLATFORM_FOLDERS + SDL + SECP256K1 + SFML + SPDLOG + SQLITE + STDUUID + TESTING + TPL + VLC + VORBIS + WINFSP + WXWIDGETS +) + +declare -A PROJECT_CLEANUP +PROJECT_CLEANUP[BACKWARD_CPP]="include/backward.hpp:src/backward.cpp" +PROJECT_CLEANUP[BINUTILS]="3rd_party/mingw64/binutils-*" +PROJECT_CLEANUP[BOOST]="3rd_party/boost_*" +PROJECT_CLEANUP[CLI11]="3rd_party/CLI11-*" +PROJECT_CLEANUP[CPP_HTTPLIB]="3rd_party/cpp-httplib-*" +PROJECT_CLEANUP[CURL]="3rd_party/curl-*" +PROJECT_CLEANUP[CXXOPTS]="3rd_party/cxxopts-*" +PROJECT_CLEANUP[DTL]="3rd_party/dtl-*" +PROJECT_CLEANUP[EXPAT]="3rd_party/mingw64/expat-*" +PROJECT_CLEANUP[FLAC]="3rd_party/flac-*" +PROJECT_CLEANUP[FMT]="3rd_party/fmt-*" +PROJECT_CLEANUP[FONTCONFIG]="3rd_party/fontconfig-*" +PROJECT_CLEANUP[FREETYPE2]="3rd_party/freetype-*" +PROJECT_CLEANUP[FZF]="include/fzf.h:src/fzf.c" +PROJECT_CLEANUP[GCC]="3rd_party/mingw64/gcc-*" +PROJECT_CLEANUP[ICU]="3rd_party/mingw64/icu-release-*" +PROJECT_CLEANUP[JSON]="3rd_party/json-*" +PROJECT_CLEANUP[INNOSETUP]="3rd_party/mingw64/innosetup-*" +PROJECT_CLEANUP[LIBBITCOIN_SYSTEM]="3rd_party/boost_${PROJECT_VERSIONS[BOOST2_MAJOR]}_${PROJECT_VERSIONS[BOOST2_MINOR]}_*:3rd_party/libbitcoin-system-*" +PROJECT_CLEANUP[LIBBITCOIN_SYSTEM_ON]="3rd_party/boost_${PROJECT_VERSIONS[BOOST_MAJOR]}_${PROJECT_VERSIONS[BOOST_MINOR]}_*" +PROJECT_CLEANUP[LIBDSM]="3rd_party/libdsm-*:3rd_party/libdsm*" +PROJECT_CLEANUP[LIBEVENT]="3rd_party/libevent*" +PROJECT_CLEANUP[LIBICONV]="3rd_party/libiconv-*" +PROJECT_CLEANUP[LIBJPEG_TURBO]="3rd_party/libjpeg_turbo-*" +PROJECT_CLEANUP[LIBPNG]="3rd_party/libpng-*" +PROJECT_CLEANUP[LIBSODIUM]="3rd_party/libsodium-*:3rd_party/libsodium*" +PROJECT_CLEANUP[LIBTASN]="3rd_party/libtasn1-*" +PROJECT_CLEANUP[MINGW]="3rd_party/mingw64/mingw-w64-*" +PROJECT_CLEANUP[NANA]="3rd_party/nana-*:3rd_party/nana*" +PROJECT_CLEANUP[NUSPELL]="3rd_party/nuspell-*" +PROJECT_CLEANUP[OGG]="3rd_party/ogg-*" +PROJECT_CLEANUP[OPENAL]="3rd_party/openal-*" +PROJECT_CLEANUP[OPENSSL]="3rd_party/openssl-*" +PROJECT_CLEANUP[PKG_CONFIG]="3rd_party/mingw64/pkg-config-*" +PROJECT_CLEANUP[PUGIXML]="3rd_party/pugixml-*" +PROJECT_CLEANUP[ROCKSDB]="3rd_party/rocksdb-*" +PROJECT_CLEANUP[SAGO_PLATFORM_FOLDERS]="include/platform_folders.hpp:src/platform_folders.cpp" +PROJECT_CLEANUP[SDL]="3rd_party/sdl-*" +PROJECT_CLEANUP[SECP256K1]="3rd_party/secp256k1-*" +PROJECT_CLEANUP[SFML]="3rd_party/SFML-*:3rd_party/SFML*:include/RoundedRectangleShape.hpp:include/Text2.hpp:src/RoundedRectangleShape.cpp:src/Text2.cpp" +PROJECT_CLEANUP[SPDLOG]="3rd_party/spdlog-*" +PROJECT_CLEANUP[SQLITE]="3rd_party/sqlite*" +PROJECT_CLEANUP[STDUUID]="3rd_party/stduuid-*" +PROJECT_CLEANUP[TESTING]="3rd_party/googletest-*" +PROJECT_CLEANUP[TPL]="3rd_party/tiny-process-library*" +PROJECT_CLEANUP[VLC]="3rd_party/vlc*" +PROJECT_CLEANUP[VORBIS]="3rd_party/vorbis-*:3rd_party/vorbis*" +PROJECT_CLEANUP[WINFSP]="3rd_party/winfsp-*" +PROJECT_CLEANUP[WXWIDGETS]="3rd_party/wxWidgets-*" +PROJECT_CLEANUP[ZLIB]="3rd_party/mingw64/zlib-*" +export PROJECT_CLEANUP + +declare -A PROJECT_DOWNLOADS +PROJECT_DOWNLOADS[BINUTILS]="https://ftp.gnu.org/gnu/binutils/binutils-${PROJECT_VERSIONS[BINUTILS]}.tar.xz;binutils-${PROJECT_VERSIONS[BINUTILS]}.tar.xz;3rd_party/mingw64" +PROJECT_DOWNLOADS[BOOST2]="https://archives.boost.io/release/${PROJECT_VERSIONS[BOOST2_MAJOR]}.${PROJECT_VERSIONS[BOOST2_MINOR]}.${PROJECT_VERSIONS[BOOST2_PATCH]}/source/boost_${PROJECT_VERSIONS[BOOST2_MAJOR]}_${PROJECT_VERSIONS[BOOST2_MINOR]}_${PROJECT_VERSIONS[BOOST2_PATCH]}.tar.gz;boost_${PROJECT_VERSIONS[BOOST2_MAJOR]}_${PROJECT_VERSIONS[BOOST2_MINOR]}_${PROJECT_VERSIONS[BOOST2_PATCH]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[BOOST]="https://archives.boost.io/release/${PROJECT_VERSIONS[BOOST_MAJOR]}.${PROJECT_VERSIONS[BOOST_MINOR]}.${PROJECT_VERSIONS[BOOST_PATCH]}/source/boost_${PROJECT_VERSIONS[BOOST_MAJOR]}_${PROJECT_VERSIONS[BOOST_MINOR]}_${PROJECT_VERSIONS[BOOST_PATCH]}.tar.gz;boost_${PROJECT_VERSIONS[BOOST_MAJOR]}_${PROJECT_VERSIONS[BOOST_MINOR]}_${PROJECT_VERSIONS[BOOST_PATCH]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[CLI11]="https://github.com/CLIUtils/CLI11/archive/refs/tags/v${PROJECT_VERSIONS[CLI11]}.tar.gz;CLI11-${PROJECT_VERSIONS[CLI11]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[CPP_HTTPLIB]="https://github.com/yhirose/cpp-httplib/archive/refs/tags/v${PROJECT_VERSIONS[CPP_HTTPLIB]}.tar.gz;cpp-httplib-${PROJECT_VERSIONS[CPP_HTTPLIB]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[CURL]="https://github.com/curl/curl/archive/refs/tags/curl-${PROJECT_VERSIONS[CURL2]}.tar.gz;curl-${PROJECT_VERSIONS[CURL]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[CXXOPTS]="https://github.com/jarro2783/cxxopts/archive/refs/tags/v${PROJECT_VERSIONS[CXXOPTS]}.tar.gz;cxxopts-v${PROJECT_VERSIONS[CXXOPTS]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[EXPAT]="https://github.com/libexpat/libexpat/archive/refs/tags/R_${PROJECT_VERSIONS[EXPAT2]}.tar.gz;expat-${PROJECT_VERSIONS[EXPAT]}.tar.gz;3rd_party/mingw64" +PROJECT_DOWNLOADS[FLAC]="https://github.com/xiph/flac/archive/refs/tags/${PROJECT_VERSIONS[FLAC]}.tar.gz;flac-${PROJECT_VERSIONS[FLAC]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[FMT]="https://github.com/fmtlib/fmt/archive/refs/tags/${PROJECT_VERSIONS[FMT]}.tar.gz;fmt-${PROJECT_VERSIONS[FMT]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[FONTCONFIG]="https://www.freedesktop.org/software/fontconfig/release/fontconfig-${PROJECT_VERSIONS[FONTCONFIG]}.tar.xz;fontconfig-${PROJECT_VERSIONS[FONTCONFIG]}.tar.xz;3rd_party" +PROJECT_DOWNLOADS[FREETYPE2]="https://download.savannah.gnu.org/releases/freetype/freetype-${PROJECT_VERSIONS[FREETYPE2]}.tar.gz;freetype-${PROJECT_VERSIONS[FREETYPE2]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[GCC]="https://mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-${PROJECT_VERSIONS[GCC]}/gcc-${PROJECT_VERSIONS[GCC]}.tar.gz;gcc-${PROJECT_VERSIONS[GCC]}.tar.gz;3rd_party/mingw64" +PROJECT_DOWNLOADS[GTEST]="https://github.com/google/googletest/archive/refs/tags/v${PROJECT_VERSIONS[GTEST]}.tar.gz;googletest-${PROJECT_VERSIONS[GTEST]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[ICU]="https://github.com/unicode-org/icu/archive/refs/tags/release-${PROJECT_VERSIONS[ICU]}.tar.gz;icu-release-${PROJECT_VERSIONS[ICU]}.tar.gz;3rd_party/mingw64" +PROJECT_DOWNLOADS[JSON]="https://github.com/nlohmann/json/archive/refs/tags/v${PROJECT_VERSIONS[JSON]}.tar.gz;json-${PROJECT_VERSIONS[JSON]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[INNOSETUP]="https://files.jrsoftware.org/is/6/innosetup-${PROJECT_VERSIONS[INNOSETUP]}.exe;innosetup-${PROJECT_VERSIONS[INNOSETUP]}.exe;3rd_party/mingw64" +PROJECT_DOWNLOADS[WINFSP]="https://github.com/winfsp/winfsp/releases/download/v${PROJECT_VERSIONS[WINFSP2]}/winfsp-${PROJECT_VERSIONS[WINFSP]}.msi;winfsp-${PROJECT_VERSIONS[WINFSP]}.msi;3rd_party" +PROJECT_DOWNLOADS[LIBDSM]="https://github.com/videolabs/libdsm/archive/refs/tags/v${PROJECT_VERSIONS[LIBDSM]}.tar.gz;libdsm-${PROJECT_VERSIONS[LIBDSM]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[LIBEVENT]="https://github.com/libevent/libevent/archive/refs/tags/release-${PROJECT_VERSIONS[LIBEVENT]}-stable.tar.gz;libevent-${PROJECT_VERSIONS[LIBEVENT]}-stable.tar.gz;3rd_party" +PROJECT_DOWNLOADS[LIBICONV]="https://ftp.gnu.org/pub/gnu/libiconv/libiconv-${PROJECT_VERSIONS[LIBICONV]}.tar.gz;libiconv-${PROJECT_VERSIONS[LIBICONV]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[LIBJPEG_TURBO]="https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/${PROJECT_VERSIONS[LIBJPEG_TURBO]}.tar.gz;libjpeg_turbo-${PROJECT_VERSIONS[LIBJPEG_TURBO]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[LIBPNG]="https://github.com/pnggroup/libpng/archive/refs/tags/v${PROJECT_VERSIONS[LIBPNG]}.tar.gz;libpng-v${PROJECT_VERSIONS[LIBPNG]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[LIBSODIUM]="https://github.com/jedisct1/libsodium/archive/refs/tags/${PROJECT_VERSIONS[LIBSODIUM]}-RELEASE.tar.gz;libsodium-${PROJECT_VERSIONS[LIBSODIUM]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[LIBTASN]="https://ftp.gnu.org/gnu/libtasn1/libtasn1-${PROJECT_VERSIONS[LIBTASN]}.tar.gz;libtasn1-${PROJECT_VERSIONS[LIBTASN]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[MINGW]="https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/mingw-w64-v${PROJECT_VERSIONS[MINGW]}.tar.bz2;;mingw-w64-v${PROJECT_VERSIONS[MINGW]}.tar.bz2;3rd_party/mingw64" +PROJECT_DOWNLOADS[NANA]="https://github.com/cnjinhao/nana/archive/refs/tags/v${PROJECT_VERSIONS[NANA]}.tar.gz;nana-v${PROJECT_VERSIONS[NANA]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[NUSPELL]="https://github.com/nuspell/nuspell/archive/refs/tags/v${PROJECT_VERSIONS[NUSPELL]}.tar.gz;nuspell-v${PROJECT_VERSIONS[NUSPELL]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[OGG]="https://github.com/xiph/ogg/releases/download/v${PROJECT_VERSIONS[OGG]}/libogg-${PROJECT_VERSIONS[OGG]}.tar.gz;ogg-v${PROJECT_VERSIONS[OGG]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[OPENAL]="https://github.com/kcat/openal-soft/archive/refs/tags/${PROJECT_VERSIONS[OPENAL]}.tar.gz;openal-${PROJECT_VERSIONS[OPENAL]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[OPENSSL]="https://github.com/openssl/openssl/releases/download/openssl-${PROJECT_VERSIONS[OPENSSL]}/openssl-${PROJECT_VERSIONS[OPENSSL]}.tar.gz;openssl-${PROJECT_VERSIONS[OPENSSL]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[PKG_CONFIG]="https://pkgconfig.freedesktop.org/releases/pkg-config-${PROJECT_VERSIONS[PKG_CONFIG]}.tar.gz;pkg-config-${PROJECT_VERSIONS[PKG_CONFIG]}.tar.gz;3rd_party/mingw64" +PROJECT_DOWNLOADS[PUGIXML]="https://github.com/zeux/pugixml/releases/download/v${PROJECT_VERSIONS[PUGIXML]}/pugixml-${PROJECT_VERSIONS[PUGIXML]}.tar.gz;pugixml-${PROJECT_VERSIONS[PUGIXML]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[ROCKSDB]="https://github.com/facebook/rocksdb/archive/refs/tags/v${PROJECT_VERSIONS[ROCKSDB]}.tar.gz;rocksdb-${PROJECT_VERSIONS[ROCKSDB]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[SDL]="https://github.com/libsdl-org/SDL/archive/refs/tags/release-${PROJECT_VERSIONS[SDL]}.tar.gz;sdl-${PROJECT_VERSIONS[SDL]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[SECP256K1]="https://github.com/libbitcoin/secp256k1/archive/refs/tags/v${PROJECT_VERSIONS[SECP256K1]}.tar.gz;secp256k1-${PROJECT_VERSIONS[SECP256K1]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[SFML]="https://github.com/SFML/SFML/archive/refs/tags/${PROJECT_VERSIONS[SFML]}.tar.gz;SFML-${PROJECT_VERSIONS[SFML]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[SPDLOG]="https://github.com/gabime/spdlog/archive/refs/tags/v${PROJECT_VERSIONS[SPDLOG]}.tar.gz;spdlog-${PROJECT_VERSIONS[SPDLOG]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[SQLITE]="https://www.sqlite.org/2025/sqlite-amalgamation-${PROJECT_VERSIONS[SQLITE]}.zip;sqlite-amalgamation-${PROJECT_VERSIONS[SQLITE]}.zip;3rd_party" +PROJECT_DOWNLOADS[STDUUID]="https://github.com/mariusbancila/stduuid/archive/refs/tags/v${PROJECT_VERSIONS[STDUUID]}.tar.gz;stduuid-${PROJECT_VERSIONS[STDUUID]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[VORBIS]="https://github.com/xiph/vorbis/archive/refs/tags/v${PROJECT_VERSIONS[VORBIS]}.tar.gz;vorbis-v${PROJECT_VERSIONS[VORBIS]}.tar.gz;3rd_party" +PROJECT_DOWNLOADS[WXWIDGETS]="https://github.com/wxWidgets/wxWidgets/releases/download/v${PROJECT_VERSIONS[WXWIDGETS]}/wxWidgets-${PROJECT_VERSIONS[WXWIDGETS]}.tar.bz2;wxWidgets-${PROJECT_VERSIONS[WXWIDGETS]}.tar.bz2;3rd_party" +PROJECT_DOWNLOADS[ZLIB]="https://github.com/madler/zlib/archive/refs/tags/v${PROJECT_VERSIONS[ZLIB]}.tar.gz;zlib-${PROJECT_VERSIONS[ZLIB]}.tar.gz;3rd_party/mingw64" +export PROJECT_DOWNLOADS diff --git a/src/scripts/make_common.sh b/src/scripts/make_common.sh new file mode 100644 index 0000000..8dfd20f --- /dev/null +++ b/src/scripts/make_common.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" + +mkdir -p "${PROJECT_BUILD_DIR}/build" + +if [ -d "${PROJECT_DIST_DIR}" ]; then + rm -rf "${PROJECT_DIST_DIR}" + mkdir -p "${PROJECT_DIST_DIR}" +fi + +if [ -f "${PROJECT_SOURCE_DIR}/pre_build.sh" ]; then + "${PROJECT_SOURCE_DIR}/pre_build.sh" +fi + +ln -sf "${PROJECT_BUILD_DIR}/build/compile_commands.json" "${PROJECT_SOURCE_DIR}/compile_commands.json" + +pushd "${PROJECT_BUILD_DIR}" +export CMAKE_BUILD_PARALLEL_LEVEL=${NUM_JOBS} + +cmake "${PROJECT_SOURCE_DIR}" \ + -G"Unix Makefiles" \ + -DPROJECT_COMPANY_NAME="${PROJECT_COMPANY_NAME}" \ + -DPROJECT_COPYRIGHT="${PROJECT_COPYRIGHT}" \ + -DPROJECT_DESC="${PROJECT_DESC}" \ + -DPROJECT_INTERFACE=1 \ + -DPROJECT_URL="${PROJECT_URL}" \ + ${PROJECT_CMAKE_OPTS} || exit 1 + +if [ "${PROJECT_BUILD_CLEAN}" == "clean" ]; then + make clean + pushd build + make clean + popd +fi + +make || exit 1 + +pushd build +make -j${CMAKE_BUILD_PARALLEL_LEVEL} || exit 1 +popd +popd + +if [ -f "${PROJECT_SOURCE_DIR}/LICENSE.md" ]; then + rsync -av --progress "${PROJECT_SOURCE_DIR}/LICENSE.md" "${PROJECT_DIST_DIR}/" +fi + +if [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ] && [ "${PROJECT_IS_MINGW}" != "1" ]; then + rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/ "${PROJECT_DIST_DIR}/" + pushd "${PROJECT_DIST_DIR}" + rm lib64 + ln -sf lib lib64 + popd +fi + +for APP in ${PROJECT_APP_LIST[@]}; do + if [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ]; then + if [ "${PROJECT_IS_MINGW}" == "1" ]; then + rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/" + else + rm "${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}" + if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then + mv "${PROJECT_DIST_DIR}/cacert.pem" "${PROJECT_DIST_DIR}/bin/cacert.pem" + fi + rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/bin/" + if [ "${PROJECT_IS_DARWIN}" == "1" ]; then + cat <>"${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}" +#!/bin/sh +PROJECT_SCRIPTS_DIR=\$(realpath "\$0") +PROJECT_SCRIPTS_DIR=\$(dirname "\${PROJECT_SCRIPTS_DIR}") + +DYLD_LIBRARY_PATH="\${PROJECT_SCRIPTS_DIR}/lib:\${PROJECT_SCRIPTS_DIR}/lib64:\${DYLD_LIBRARY_PATH}" +export DYLD_LIBRARY_PATH + +\${PROJECT_SCRIPTS_DIR}/bin/${APP}${PROJECT_APP_BINARY_EXT} \$* +EOF + else + cat <>"${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}" +#!/bin/sh +PROJECT_SCRIPTS_DIR=\$(realpath "\$0") +PROJECT_SCRIPTS_DIR=\$(dirname "\${PROJECT_SCRIPTS_DIR}") + +export LD_LIBRARY_PATH="\${PROJECT_SCRIPTS_DIR}/lib:\${PROJECT_SCRIPTS_DIR}/lib64:\${LD_LIBRARY_PATH}" + +\${PROJECT_SCRIPTS_DIR}/bin/${APP}${PROJECT_APP_BINARY_EXT} \$* +EOF + fi + chmod +x "${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}" + fi + elif [ ! -d "${PROJECT_BUILD_DIR}/build/${APP}.app" ]; then + rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/" + fi +done + +if [ -d "${PROJECT_BUILD_DIR}/build/${PROJECT_NAME}.app" ]; then + rsync -av --progress "${PROJECT_BUILD_DIR}/build/${PROJECT_NAME}.app/" \ + "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/" +fi + +if [ -f "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/pubspec.yaml" ]; then + if [ -d "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app" ]; then + rsync -av --progress "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/build/web/" \ + "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/Contents/Resources/web/" + cp "${PROJECT_DIST_DIR}/cacert.pem" "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/Contents/MacOS/cacert.pem" + else + rsync -av --progress "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/build/web/" \ + "${PROJECT_DIST_DIR}/web/" + fi +fi + +if [ "${PROJECT_IS_MINGW}" == "1" ]; then + . "${PROJECT_SCRIPTS_DIR}/copy_mingw64_deps.sh" "$1" "$2" "$3" "$4" "$5" +fi + +if [ -f "${PROJECT_SOURCE_DIR}/post_build.sh" ]; then + "${PROJECT_SOURCE_DIR}/post_build.sh" +fi + +. "${PROJECT_SCRIPTS_DIR}/make_package.sh" "$1" "$2" "$3" "$4" "$5" diff --git a/src/scripts/make_flutter.sh b/src/scripts/make_flutter.sh new file mode 100644 index 0000000..3b9973a --- /dev/null +++ b/src/scripts/make_flutter.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" + +if [ -f "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/pubspec.yaml" ]; then + if [[ "${PROJECT_IS_DARWIN}" == "0" && ("${PROJECT_IS_MINGW}" == "0" || "${PROJECT_IS_MINGW_UNIX}" == "1") ]]; then + FLUTTER_CONTAINER_NAME="${PROJECT_NAME}_flutter" + FLUTTER_TAG_NAME="${PROJECT_NAME}:flutter" + + docker stop ${FLUTTER_CONTAINER_NAME} + docker rm ${FLUTTER_CONTAINER_NAME} + + docker build "${PROJECT_SOURCE_DIR}/docker/x86_64/" \ + --build-arg UID=$(id -u) \ + --build-arg GID=$(id -g) \ + -t ${FLUTTER_TAG_NAME} \ + -f "${PROJECT_SOURCE_DIR}/docker/x86_64/flutter" || exit 1 + + docker run -td \ + --name ${FLUTTER_CONTAINER_NAME} \ + -u $(id -u):$(id -g) \ + -v ${PROJECT_SOURCE_DIR}:${PROJECT_SOURCE_DIR}:rw,z \ + -w ${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME} \ + ${FLUTTER_TAG_NAME} || exit 1 + + docker exec \ + ${FLUTTER_CONTAINER_NAME} \ + /bin/bash -c \ + "flutter clean;flutter build web --base-href=${PROJECT_FLUTTER_BASE_HREF}" || exit 1 + + docker stop ${FLUTTER_CONTAINER_NAME} + docker rm ${FLUTTER_CONTAINER_NAME} + else + pushd "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}" + export MSYS_NO_PATHCONV=1 + flutter clean + flutter build web --base-href=${PROJECT_FLUTTER_BASE_HREF} || exit 1 + export MSYS_NO_PATHCONV=0 + popd + fi +fi diff --git a/src/scripts/make_package.cmd b/src/scripts/make_package.cmd new file mode 100644 index 0000000..1037ea3 --- /dev/null +++ b/src/scripts/make_package.cmd @@ -0,0 +1,11 @@ +@echo off + +setlocal + +set ARG1=%~1 +set ARG2=%~2 +set ARG3=%~3 + +pushd "%~dp0%" + call mingw64 -no-start ./make_package.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1 +popd diff --git a/src/scripts/make_package.sh b/src/scripts/make_package.sh new file mode 100644 index 0000000..eb027ef --- /dev/null +++ b/src/scripts/make_package.sh @@ -0,0 +1,153 @@ +#!/usr/bin/env bash + +TEMP_DIR=$(mktemp -d) + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" + +function error_exit() { + echo $1 + rm -rf ${TEMP_DIR} + exit $2 +} + +function cleanup_packages() { + local SOURCE_FILE=$1 + + pushd "${PROJECT_DIST_DIR}" + if [ -f "${SOURCE_FILE}" ]; then + rm -f "${SOURCE_FILE}" || error_exit "failed to delete file: ${SOURCE_FILE}" 1 + fi + + if [ -f "${SOURCE_FILE}.sha256" ]; then + rm -f "${SOURCE_FILE}.sha256" || error_exit "failed to delete file: ${SOURCE_FILE}.sha256" 1 + fi + + if [ -f "${SOURCE_FILE}.sig" ]; then + rm -f "${SOURCE_FILE}.sig" || error_exit "failed to delete file: ${SOURCE_FILE}.sig" 1 + fi + popd +} + +function create_file_validations() { + local SOURCE_FILE=$1 + sha256sum ${SOURCE_FILE} >${SOURCE_FILE}.sha256 || error_exit "failed to create sha256 for file: ${SOURCE_FILE}" 1 + if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then + openssl dgst -sha256 -sign "${PROJECT_PRIVATE_KEY}" -out "${SOURCE_FILE}.sig" "${SOURCE_FILE}" || error_exit "failed to create signature for file: ${SOURCE_FILE}" 1 + openssl dgst -sha256 -verify "${PROJECT_PUBLIC_KEY}" -signature "${SOURCE_FILE}.sig" "${SOURCE_FILE}" || error_exit "failed to validate signature for file: ${SOURCE_FILE}" 1 + fi +} + +if [ ! -d "${PROJECT_DIST_DIR}" ]; then + error_exit "dist directory not found: ${PROJECT_DIST_DIR}" 2 +fi + +cleanup_packages "${PROJECT_OUT_FILE}" +cleanup_packages "${PROJECT_FILE_PART}_setup.exe" +cleanup_packages "${PROJECT_FILE_PART}.dmg" + +rsync -av --progress ${PROJECT_DIST_DIR}/ ${TEMP_DIR}/${PROJECT_NAME}/ || error_exit "failed to rsync" 1 + +for APP in ${PROJECT_APP_LIST[@]}; do + if [ -d "${TEMP_DIR}/${PROJECT_NAME}/${APP}.app" ]; then + strip "${TEMP_DIR}/${PROJECT_NAME}/${APP}.app/Contents/MacOS/${APP}${PROJECT_APP_BINARY_EXT}" + elif [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ] && [ "${PROJECT_IS_MINGW}" != "1" ]; then + strip "${TEMP_DIR}/${PROJECT_NAME}/bin/${APP}${PROJECT_APP_BINARY_EXT}" + else + strip "${TEMP_DIR}/${PROJECT_NAME}/${APP}${PROJECT_APP_BINARY_EXT}" + fi +done + +pushd "${TEMP_DIR}/${PROJECT_NAME}/" +IFS=$'\n' +set -f +FILE_LIST=$(find . -type f -not -path "*/.app/*") +for FILE in ${FILE_LIST}; do + create_file_validations "${FILE}" +done +unset IFS +set +f +popd + +pushd "${PROJECT_DIST_DIR}" +tar cvzf "${PROJECT_OUT_FILE}" -C ${TEMP_DIR} . || error_exit "failed to create archive: ${PROJECT_OUT_FILE}" 1 +create_file_validations "${PROJECT_OUT_FILE}" +popd + +if [ -d "${TEMP_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.app" ]; then + APP_SRC="${TEMP_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.app" + + DMG_ROOT="${TEMP_DIR}/dmgroot" + mkdir -p "${DMG_ROOT}" || error_exit "failed to create dmgroot" 1 + + INSTALLER="${DMG_ROOT}/Install ${PROJECT_NAME}.command" + INSTALLER_SRC="${PROJECT_SOURCE_DIR}/${PROJECT_NAME}/Install ${PROJECT_NAME}.command" + + if [ -f "${INSTALLER_SRC}" ]; then + HIDDEN_DIR="${DMG_ROOT}/.payload" + mkdir -p "${HIDDEN_DIR}" || error_exit "failed to create payload dir" 1 + APP_DEST_DIR="${HIDDEN_DIR}" + else + APP_DEST_DIR="${DMG_ROOT}" + fi + + rsync -a "${APP_SRC}" "${APP_DEST_DIR}/" || error_exit "failed to stage app bundle" 1 + + if [ -f "${INSTALLER_SRC}" ]; then + chflags hidden "${HIDDEN_DIR}" "${HIDDEN_DIR}/${PROJECT_NAME}.app" 2>/dev/null || true + fi + + ln -s /Applications "${DMG_ROOT}/Applications" 2>/dev/null || true + + if [ -f "${INSTALLER_SRC}" ]; then + cp -f "${INSTALLER_SRC}" "${INSTALLER}" || error_exit "failed to copy install command" 1 + chmod +x "${INSTALLER}" || error_exit "failed to chmod install command" 1 + + SAFE_PREFIX="$(printf '%s' "${PROJECT_MACOS_BUNDLE_ID}" | sed -e 's/[\/&]/\\&/g')" + /usr/bin/sed -i '' -e "s|^LABEL_PREFIX=.*$|LABEL_PREFIX=\"${SAFE_PREFIX}\"|g" "${INSTALLER}" + + LABEL_ASSIGNED="$(/usr/bin/awk -F= '/^LABEL_PREFIX=/{sub(/^[^=]*=/,""); gsub(/^"|"$/,""); print; exit}' "${INSTALLER}")" + if ! /usr/bin/awk -v v="${LABEL_ASSIGNED}" ' + BEGIN { + if (length(v) == 0) exit 1; + if (v == "__LABEL_PREFIX__") exit 1; + if (v !~ /^[A-Za-z0-9._-]+$/) exit 1; + if (v !~ /\./) exit 1; + exit 0; + }'; then + error_exit "DMG build abort: invalid LABEL_PREFIX written to installer (value: \"${LABEL_ASSIGNED}\"). Check PROJECT_MACOS_BUNDLE_ID and sed substitution." 1 + fi + fi + + DMG_OUT="${PROJECT_FILE_PART}.dmg" + hdiutil create \ + -volname "${PROJECT_NAME}" \ + -fs HFS+ \ + -srcfolder "${DMG_ROOT}" \ + -ov -format UDZO \ + "${PROJECT_DIST_DIR}/${DMG_OUT}" || error_exit "hdiutil failed" 1 + + pushd "${PROJECT_DIST_DIR}" + create_file_validations "${DMG_OUT}" + popd +elif [ "${PROJECT_IS_MINGW}" == "1" ] && [ -f "${PROJECT_DIST_DIR}/../${PROJECT_NAME}.iss" ]; then + cp -f "${PROJECT_DIST_DIR}/../${PROJECT_NAME}.iss" "${TEMP_DIR}/${PROJECT_NAME}.iss" + rsync -av --progress --delete ${PROJECT_SOURCE_DIR}/support/3rd_party/*.msi ${TEMP_DIR}/3rd_party/ + + pushd "${TEMP_DIR}" + if [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then + wine64 "c:/Program Files (x86)/Inno Setup 6/iscc.exe" "${PROJECT_NAME}.iss" || exit 1 + else + iscc "${PROJECT_NAME}.iss" || exit 1 + fi + + pushd "Output" + create_file_validations "${PROJECT_FILE_PART}_setup.exe" + cp -f * "${PROJECT_DIST_DIR}/" + popd + + popd +fi + +error_exit "created package ${PROJECT_FILE_PART}" 0 diff --git a/src/scripts/make_unix.sh b/src/scripts/make_unix.sh new file mode 100644 index 0000000..4327c82 --- /dev/null +++ b/src/scripts/make_unix.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" 0 0 + +if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then + . "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$1" "$2" "$3" 0 0 + rm ${PROJECT_SCRIPTS_DIR}/cleanup.* +fi + +"${PROJECT_SOURCE_DIR}/scripts/make_flutter.sh" "${PROJECT_BUILD_ARCH}" "${PROJECT_CMAKE_BUILD_TYPE}" "${PROJECT_BUILD_CLEAN}" 0 0 || exit 1 + +if [[ "${PROJECT_IS_DARWIN}" == "0" && ("${PROJECT_REQUIRE_ALPINE}" == "ON" || "${PROJECT_IS_ARM64}" == "1") ]]; then + DOCKER_NAME=alpine + DOCKER_CONTAINER=${PROJECT_NAME}_${DOCKER_NAME}_${PROJECT_BUILD_ARCH} + DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME} + + . "${PROJECT_SCRIPTS_DIR}/docker_common.sh" || exit 1 +else + "${PROJECT_SOURCE_DIR}/scripts/make_common.sh" "${PROJECT_BUILD_ARCH}" "${PROJECT_CMAKE_BUILD_TYPE}" "${PROJECT_BUILD_CLEAN}" 0 0 || exit 1 +fi diff --git a/src/scripts/make_win32.cmd b/src/scripts/make_win32.cmd new file mode 100644 index 0000000..038141f --- /dev/null +++ b/src/scripts/make_win32.cmd @@ -0,0 +1,18 @@ +@echo off + +setlocal + +set ARG1=%~1 +set ARG2=%~2 +set ARG3=%~3 + +pushd "%~dp0%" + call setup_msys2.cmd "%ARG1%" "%ARG2%" "%ARG3%" + if exist "cleanup.cmd" ( + call cleanup.cmd "%ARG1%" "%ARG2%" "%ARG3%" 1 0 + del cleanup.* + ) + + call mingw64 -no-start ./make_flutter.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1 + call mingw64 -no-start ./make_common.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1 +popd diff --git a/src/scripts/make_win32.sh b/src/scripts/make_win32.sh new file mode 100644 index 0000000..009e7ad --- /dev/null +++ b/src/scripts/make_win32.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" 1 1 + +if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then + . "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$1" "$2" "$3" 1 1 + rm ${PROJECT_SCRIPTS_DIR}/cleanup.* +fi + +DOCKER_NAME=mingw64 +DOCKER_CONTAINER=${PROJECT_NAME}_${DOCKER_NAME} +DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME} + +. "${PROJECT_SCRIPTS_DIR}/docker_common.sh" || exit 1 diff --git a/src/scripts/run_docker_shell.sh b/src/scripts/run_docker_shell.sh new file mode 100644 index 0000000..8a08db1 --- /dev/null +++ b/src/scripts/run_docker_shell.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +DOCKER_NAME=$1 + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$2" "$3" "$4" "$5" "$6" 1 1>/dev/null 2>&1 + +if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then + . "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$2" "$3" "$4" "$5" "$6" + rm ${PROJECT_SCRIPTS_DIR}/cleanup.* +fi + +DOCKER_CONTAINER=${PROJECT_NAME}_${DOCKER_NAME}_${PROJECT_BUILD_ARCH}_shell +DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME} +DOCKER_SHELL=1 + +. "${PROJECT_SCRIPTS_DIR}/docker_common.sh" || exit 1 diff --git a/src/scripts/run_tests.cmd b/src/scripts/run_tests.cmd new file mode 100644 index 0000000..53e9f54 --- /dev/null +++ b/src/scripts/run_tests.cmd @@ -0,0 +1,12 @@ +@echo off + +setlocal + +set ARG1=%~1 +set ARG2=%~2 +set ARG3=%~3 + +pushd "%~dp0%" + call mingw64 -no-start ./run_tests.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 +popd + diff --git a/src/scripts/run_tests.sh b/src/scripts/run_tests.sh new file mode 100644 index 0000000..4f2483f --- /dev/null +++ b/src/scripts/run_tests.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 0 + +pushd "${PROJECT_DIST_DIR}" +if [ -e "./${PROJECT_NAME}_test${PROJECT_APP_BINARY_EXT}" ]; then + for APP in ${PROJECT_APP_LIST[@]}; do + if [[ "$APP" == *_test ]]; then + if [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then + wine64 "${PROJECT_DIST_DIR}/${PROJECT_NAME}_test${PROJECT_APP_BINARY_EXT}" || exit 1 + else + "./${PROJECT_NAME}_test${PROJECT_APP_BINARY_EXT}" || exit 1 + fi + fi + done +fi +popd diff --git a/src/scripts/setup_msys2.cmd b/src/scripts/setup_msys2.cmd new file mode 100644 index 0000000..ce3c466 --- /dev/null +++ b/src/scripts/setup_msys2.cmd @@ -0,0 +1,12 @@ +@echo off + +setlocal + +set ARG1=%~1 +set ARG2=%~2 +set ARG3=%~3 + +pushd "%~dp0%" + call mingw64 -no-start ./setup_msys2.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 + call mingw64 -no-start ./setup_msys2.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 +popd diff --git a/src/scripts/setup_msys2.sh b/src/scripts/setup_msys2.sh new file mode 100644 index 0000000..bc1fab0 --- /dev/null +++ b/src/scripts/setup_msys2.sh @@ -0,0 +1,187 @@ +#!/usr/bin/env bash + +PROJECT_MSYS2_PACKAGE_LIST=() + +PROJECT_SCRIPTS_DIR=$(realpath "$0") +PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}") +. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1>/dev/null 2>&1 + +PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-autotools + mingw64/mingw-w64-x86_64-clang-tools-extra + mingw64/mingw-w64-x86_64-cmake + mingw64/mingw-w64-x86_64-curl + mingw64/mingw-w64-x86_64-diffutils + mingw64/mingw-w64-x86_64-gcc + mingw64/mingw-w64-x86_64-gdb + mingw64/mingw-w64-x86_64-icu + mingw64/mingw-w64-x86_64-make + mingw64/mingw-w64-x86_64-mesa + mingw64/mingw-w64-x86_64-meson + mingw64/mingw-w64-x86_64-meson-python + mingw64/mingw-w64-x86_64-ninja + mingw64/mingw-w64-x86_64-python + mingw64/mingw-w64-x86_64-python-mako + mingw64/mingw-w64-x86_64-toolchain + mingw64/mingw-w64-x86_64-wget + mingw64/mingw-w64-x86_64-zlib + msys/bison + msys/flex + msys/git + msys/patch + msys/rsync + make +) + +if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then + if [ "${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}" == "ON" ]; then + yes | pacman -Ry mingw64/mingw-w64-x86_64-boost + else + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-boost + ) + fi +fi + +if [ "${PROJECT_ENABLE_CLI11}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-cli11 + ) +fi + +if [ "${PROJECT_ENABLE_FLAC}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-flac + ) +fi + +if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-fontconfig + ) +fi + +if [ "${PROJECT_ENABLE_FREETYPE2}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-freetype + ) +fi + +if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-libdsm + ) +fi + +if [ "${PROJECT_ENABLE_LIBEVENT}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-libevent + ) +fi + +if [ "${PROJECT_ENABLE_LIBICONV}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-libiconv + ) +fi + +if [ "${PROJECT_ENABLE_LIBJPEG_TURBO}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-libjpeg-turbo + ) +fi + +if [ "${PROJECT_ENABLE_LIBPNG}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-libpng + ) +fi + +if [ "${PROJECT_ENABLE_LIBSODIUM}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-libsodium + ) +fi + +if [ "${PROJECT_ENABLE_LIBTASN}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-libtasn1 + ) +fi + +if [ "${PROJECT_ENABLE_NANA}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-nana + ) +fi + +if [ "${PROJECT_ENABLE_NUSPELL}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-nuspell + ) +fi + +if [ "${PROJECT_ENABLE_OGG}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-libogg + ) +fi + +if [ "${PROJECT_ENABLE_OPENAL}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-openal + ) +fi + +if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-openssl + ) +fi + +if [ "${PROJECT_ENABLE_PUGIXML}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-pugixml + ) +fi + +if [ "${PROJECT_ENABLE_SDL}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-SDL2 + ) +fi + +if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-sfml + ) +fi + +if [ "${PROJECT_ENABLE_SQLITE}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-sqlite3 + ) +fi + +if [ "${PROJECT_ENABLE_TESTING}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-gtest + ) +fi + +if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-libvorbis + ) +fi + +if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then + PROJECT_MSYS2_PACKAGE_LIST+=( + mingw64/mingw-w64-x86_64-wxwidgets3.2-msw + ) +fi + +pacman -Sqyuu --noconfirm && + pacman -S --noconfirm --needed --disable-download-timeout msys2-keyring && + pacman -S --noconfirm --needed --disable-download-timeout \ + ${PROJECT_MSYS2_PACKAGE_LIST[@]} diff --git a/src/scripts/versions.sh b/src/scripts/versions.sh new file mode 100644 index 0000000..d4bb645 --- /dev/null +++ b/src/scripts/versions.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash + +declare -A PROJECT_VERSIONS +PROJECT_VERSIONS[BINUTILS]="2.44" +PROJECT_VERSIONS[BOOST2_MAJOR]="1" +PROJECT_VERSIONS[BOOST2_MINOR]="76" +PROJECT_VERSIONS[BOOST2_PATCH]="0" +PROJECT_VERSIONS[BOOST_MAJOR]="1" +PROJECT_VERSIONS[BOOST_MINOR]="89" +PROJECT_VERSIONS[BOOST_PATCH]="0" +PROJECT_VERSIONS[CLI11]="2.5.0" +PROJECT_VERSIONS[CPP_HTTPLIB]="0.26.0" +PROJECT_VERSIONS[CURL]="8.16.0" +PROJECT_VERSIONS[CURL2]="8_16_0" +PROJECT_VERSIONS[CXXOPTS]="3.3.1" +PROJECT_VERSIONS[DTL]="2.01" +PROJECT_VERSIONS[EXPAT]="2.7.1" +PROJECT_VERSIONS[EXPAT2]="2_7_1" +PROJECT_VERSIONS[FLAC]="1.5.0" +PROJECT_VERSIONS[FMT]="12.0.0" +PROJECT_VERSIONS[FONTCONFIG]="2.16.0" +PROJECT_VERSIONS[FREETYPE2]="2.14.1" +PROJECT_VERSIONS[GCC]="15.2.0" +PROJECT_VERSIONS[GTEST]="1.17.0" +PROJECT_VERSIONS[GTKMM]="3.0" +PROJECT_VERSIONS[ICU]="76-1" +PROJECT_VERSIONS[INNOSETUP]="6.5.4" +PROJECT_VERSIONS[JSON]="3.12.0" +PROJECT_VERSIONS[LIBBITCOIN_SYSTEM]="3.8.0" +PROJECT_VERSIONS[LIBDSM]="0.4.3" +PROJECT_VERSIONS[LIBEVENT]="2.1.12" +PROJECT_VERSIONS[LIBICONV]="1.18" +PROJECT_VERSIONS[LIBJPEG_TURBO]="3.1.2" +PROJECT_VERSIONS[LIBPNG]="1.6.50" +PROJECT_VERSIONS[LIBSODIUM]="1.0.20" +PROJECT_VERSIONS[LIBTASN]="4.19.0" +PROJECT_VERSIONS[MINGW]="13.0.0" +PROJECT_VERSIONS[NANA]="1.7.4" +PROJECT_VERSIONS[NUSPELL]="5.1.6" +PROJECT_VERSIONS[OGG]="1.3.6" +PROJECT_VERSIONS[OPENAL]="1.24.3" +PROJECT_VERSIONS[OPENSSL]="3.6.0" +PROJECT_VERSIONS[PKG_CONFIG]="0.29.2" +PROJECT_VERSIONS[PUGIXML]="1.15" +PROJECT_VERSIONS[ROCKSDB]="10.5.1" +PROJECT_VERSIONS[SDL]="2.32.6" +PROJECT_VERSIONS[SECP256K1]="0.1.0.20" +PROJECT_VERSIONS[SFML]="2.6.2" +PROJECT_VERSIONS[SPDLOG]="1.15.3" +PROJECT_VERSIONS[SQLITE]="3500400" +PROJECT_VERSIONS[SQLITE2]="3.50.4" +PROJECT_VERSIONS[STDUUID]="1.2.3" +PROJECT_VERSIONS[VLC]="3.0" +PROJECT_VERSIONS[VORBIS]="1.3.7" +PROJECT_VERSIONS[WINFSP]="2.1.25156" +PROJECT_VERSIONS[WINFSP2]="2.1" +PROJECT_VERSIONS[WXWIDGETS]="3.3.1" +PROJECT_VERSIONS[ZLIB]="1.3.1" +export PROJECT_VERSIONS diff --git a/src/version.cpp.in b/src/version.cpp.in new file mode 100644 index 0000000..fd0bf4d --- /dev/null +++ b/src/version.cpp.in @@ -0,0 +1,14 @@ +#include "version.hpp" + +namespace { +constexpr std::string_view git_rev = "@PROJECT_GIT_REV@"; +constexpr std::string_view version = + "@PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@" + "-@PROJECT_RELEASE_ITER@"; +} // namespace + +namespace %PROJECT_NAME% { + auto project_get_git_rev() -> std::string_view { return git_rev; } + + auto project_get_version() -> std::string_view { return version; } +} // namespace %PROJECT_NAME% diff --git a/src/version.hpp b/src/version.hpp new file mode 100644 index 0000000..784e660 --- /dev/null +++ b/src/version.hpp @@ -0,0 +1,12 @@ +#ifndef LIBFIFTHGRID_INCLUDE_VERSION_HPP_ +#define LIBFIFTHGRID_INCLUDE_VERSION_HPP_ + +#include + +namespace fifthgrid { +[[nodiscard]] auto project_get_git_rev() -> std::string_view; + +[[nodiscard]] auto project_get_version() -> std::string_view; +} // namespace fifthgrid + +#endif // LIBFIFTHGRID_INCLUDE_VERSION_HPP_ diff --git a/src/version.rc.in b/src/version.rc.in new file mode 100644 index 0000000..be5b7fd --- /dev/null +++ b/src/version.rc.in @@ -0,0 +1,64 @@ +#include +#define VER_FILEVERSION @PROJECT_MAJOR_VERSION@,@PROJECT_MINOR_VERSION@,@PROJECT_REVISION_VERSION@,@PROJECT_RELEASE_NUM@ +#define VER_FILEVERSION_STR "@PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@-@PROJECT_RELEASE_ITER@_@PROJECT_GIT_REV@\0" + +#define VER_PRODUCTVERSION @PROJECT_MAJOR_VERSION@,@PROJECT_MINOR_VERSION@,@PROJECT_REVISION_VERSION@,@PROJECT_RELEASE_NUM@ +#define VER_PRODUCTVERSION_STR "@PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@-@PROJECT_RELEASE_ITER@_@PROJECT_GIT_REV@\0" + +#define VER_COMPANYNAME_STR "@PROJECT_COMPANY_NAME@\0" +#define VER_INTERNALNAME_STR "@PROJECT_NAME@ @PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@-@PROJECT_RELEASE_ITER@_@PROJECT_GIT_REV@\0" +#define VER_LEGALCOPYRIGHT_STR "@PROJECT_COPYRIGHT@\0" +#define VER_ORIGINALFILENAME_STR "@PROJECT_NAME@.exe\0" +#define VER_LEGALTRADEMARKS1_STR "\0" +#define VER_LEGALTRADEMARKS2_STR "\0" +#define VER_FILEDESCRIPTION_STR "@PROJECT_DESC@\0" +#define VER_PRODUCTNAME_STR "@PROJECT_NAME@ @PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@-@PROJECT_RELEASE_ITER@_@PROJECT_GIT_REV@\0" + +#ifdef DEBUG +#define VER_DEBUG VS_FF_DEBUG +#else +#define VER_DEBUG 0 +#endif + +#define VER_PRERELEASE @PROJECT_PRERELEASE@ + + +VS_VERSION_INFO VERSIONINFO +FILEVERSION VER_FILEVERSION +PRODUCTVERSION VER_PRODUCTVERSION +FILEFLAGSMASK (VS_FF_DEBUG|VS_FF_PRERELEASE) +FILEFLAGS (VER_DEBUG|VER_PRERELEASE) +FILEOS VOS__WINDOWS32 +FILETYPE VFT_DLL +FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + BEGIN + VALUE "CompanyName", VER_COMPANYNAME_STR + VALUE "FileDescription", VER_FILEDESCRIPTION_STR + VALUE "FileVersion", VER_FILEVERSION_STR + VALUE "InternalName", VER_INTERNALNAME_STR + VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR + VALUE "LegalTrademarks1", VER_LEGALTRADEMARKS1_STR + VALUE "LegalTrademarks2", VER_LEGALTRADEMARKS2_STR + VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR + VALUE "ProductName", VER_PRODUCTNAME_STR + VALUE "ProductVersion", VER_PRODUCTVERSION_STR + END + END + + BLOCK "VarFileInfo" + BEGIN + /* The following line should only be modified for localized versions. */ + /* It consists of any number of WORD,WORD pairs, with each pair */ + /* describing a language,codepage combination supported by the file. */ + /* */ + /* For example, a file might have values "0x409,1252" indicating that it */ + /* supports English language (0x409) in the Windows ANSI codepage (1252). */ + + VALUE "Translation", 0x409, 1252 + + END +END diff --git a/support/3rd_party/CLI11-2.5.0.tar.gz b/support/3rd_party/CLI11-2.5.0.tar.gz new file mode 100644 index 0000000..d7979c1 --- /dev/null +++ b/support/3rd_party/CLI11-2.5.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17e02b4cddc2fa348e5dbdbb582c59a3486fa2b2433e70a0c3bacb871334fd55 +size 361527 diff --git a/support/3rd_party/CLI11-2.5.0.tar.gz.sha256 b/support/3rd_party/CLI11-2.5.0.tar.gz.sha256 new file mode 100644 index 0000000..73390b3 --- /dev/null +++ b/support/3rd_party/CLI11-2.5.0.tar.gz.sha256 @@ -0,0 +1 @@ +17e02b4cddc2fa348e5dbdbb582c59a3486fa2b2433e70a0c3bacb871334fd55 CLI11-2.5.0.tar.gz diff --git a/support/3rd_party/SFML-2.6.2.tar.gz b/support/3rd_party/SFML-2.6.2.tar.gz new file mode 100644 index 0000000..42af888 --- /dev/null +++ b/support/3rd_party/SFML-2.6.2.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15ff4d608a018f287c6a885db0a2da86ea389e516d2323629e4d4407a7ce047f +size 28624288 diff --git a/support/3rd_party/SFML-2.6.2.tar.gz.sha256 b/support/3rd_party/SFML-2.6.2.tar.gz.sha256 new file mode 100644 index 0000000..8c5cb57 --- /dev/null +++ b/support/3rd_party/SFML-2.6.2.tar.gz.sha256 @@ -0,0 +1 @@ +15ff4d608a018f287c6a885db0a2da86ea389e516d2323629e4d4407a7ce047f *SFML-2.6.2.tar.gz diff --git a/support/3rd_party/SFML_patch.sh b/support/3rd_party/SFML_patch.sh new file mode 100644 index 0000000..07fbe96 --- /dev/null +++ b/support/3rd_party/SFML_patch.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +${SED} -i s/set_target_properties\(\$\{target\}\ PROPERTIES\ PREFIX\ \"\"\)// cmake/Macros.cmake && + ${SED} -i s/set_target_properties\(\$\{target\}\ PROPERTIES\ IMPORT_SUFFIX\ \"\.a\"\)// cmake/Macros.cmake diff --git a/support/3rd_party/boost_1_76_0.tar.gz b/support/3rd_party/boost_1_76_0.tar.gz new file mode 100644 index 0000000..d288c0f --- /dev/null +++ b/support/3rd_party/boost_1_76_0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca +size 130274594 diff --git a/support/3rd_party/boost_1_76_0.tar.gz.sha256 b/support/3rd_party/boost_1_76_0.tar.gz.sha256 new file mode 100644 index 0000000..e5f89e4 --- /dev/null +++ b/support/3rd_party/boost_1_76_0.tar.gz.sha256 @@ -0,0 +1 @@ +7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca boost_1_76_0.tar.gz diff --git a/support/3rd_party/boost_1_89_0.tar.gz b/support/3rd_party/boost_1_89_0.tar.gz new file mode 100644 index 0000000..79022d4 --- /dev/null +++ b/support/3rd_party/boost_1_89_0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9de758db755e8330a01d995b0a24d09798048400ac25c03fc5ea9be364b13c93 +size 190099283 diff --git a/support/3rd_party/boost_1_89_0.tar.gz.sha256 b/support/3rd_party/boost_1_89_0.tar.gz.sha256 new file mode 100644 index 0000000..9bf25ac --- /dev/null +++ b/support/3rd_party/boost_1_89_0.tar.gz.sha256 @@ -0,0 +1 @@ +9de758db755e8330a01d995b0a24d09798048400ac25c03fc5ea9be364b13c93 boost_1_89_0.tar.gz diff --git a/support/3rd_party/cpp-httplib-0.26.0.tar.gz b/support/3rd_party/cpp-httplib-0.26.0.tar.gz new file mode 100644 index 0000000..43aca51 --- /dev/null +++ b/support/3rd_party/cpp-httplib-0.26.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a66f908f50ccb119769adce44fe1eac75f81b6ffab7c4ac0211bb663ffeb2688 +size 1305573 diff --git a/support/3rd_party/cpp-httplib-0.26.0.tar.gz.sha256 b/support/3rd_party/cpp-httplib-0.26.0.tar.gz.sha256 new file mode 100644 index 0000000..f01d2f0 --- /dev/null +++ b/support/3rd_party/cpp-httplib-0.26.0.tar.gz.sha256 @@ -0,0 +1 @@ +a66f908f50ccb119769adce44fe1eac75f81b6ffab7c4ac0211bb663ffeb2688 cpp-httplib-0.26.0.tar.gz diff --git a/support/3rd_party/curl-8.16.0.tar.gz b/support/3rd_party/curl-8.16.0.tar.gz new file mode 100644 index 0000000..ab8a07d --- /dev/null +++ b/support/3rd_party/curl-8.16.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4d9a5001b491f5726efe9b50bc4aad03029506e73c9261272e809c64b05e814 +size 3476261 diff --git a/support/3rd_party/curl-8.16.0.tar.gz.sha256 b/support/3rd_party/curl-8.16.0.tar.gz.sha256 new file mode 100644 index 0000000..d084fdc --- /dev/null +++ b/support/3rd_party/curl-8.16.0.tar.gz.sha256 @@ -0,0 +1 @@ +d4d9a5001b491f5726efe9b50bc4aad03029506e73c9261272e809c64b05e814 curl-8.16.0.tar.gz diff --git a/support/3rd_party/cxxopts-v3.3.1.tar.gz b/support/3rd_party/cxxopts-v3.3.1.tar.gz new file mode 100644 index 0000000..f8f7202 --- /dev/null +++ b/support/3rd_party/cxxopts-v3.3.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bfc70542c521d4b55a46429d808178916a579b28d048bd8c727ee76c39e2072 +size 161557 diff --git a/support/3rd_party/cxxopts-v3.3.1.tar.gz.sha256 b/support/3rd_party/cxxopts-v3.3.1.tar.gz.sha256 new file mode 100644 index 0000000..d08accd --- /dev/null +++ b/support/3rd_party/cxxopts-v3.3.1.tar.gz.sha256 @@ -0,0 +1 @@ +3bfc70542c521d4b55a46429d808178916a579b28d048bd8c727ee76c39e2072 cxxopts-v3.3.1.tar.gz diff --git a/support/3rd_party/dtl-v2.01.tar.gz b/support/3rd_party/dtl-v2.01.tar.gz new file mode 100644 index 0000000..27179d4 --- /dev/null +++ b/support/3rd_party/dtl-v2.01.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6dcc7834b4117b5c14456ea73b907d0e2bafa5058e3a06b2c504d53517438c5 +size 28091 diff --git a/support/3rd_party/dtl-v2.01.tar.gz.sha256 b/support/3rd_party/dtl-v2.01.tar.gz.sha256 new file mode 100644 index 0000000..28d16c0 --- /dev/null +++ b/support/3rd_party/dtl-v2.01.tar.gz.sha256 @@ -0,0 +1 @@ +d6dcc7834b4117b5c14456ea73b907d0e2bafa5058e3a06b2c504d53517438c5 dtl-v2.01.tar.gz diff --git a/support/3rd_party/flac-1.5.0.tar.gz b/support/3rd_party/flac-1.5.0.tar.gz new file mode 100644 index 0000000..3a8aa6d --- /dev/null +++ b/support/3rd_party/flac-1.5.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aea54ed186ad07a34750399cb27fc216a2b62d0ffcd6dc2e3064a3518c3146f8 +size 974901 diff --git a/support/3rd_party/flac-1.5.0.tar.gz.sha256 b/support/3rd_party/flac-1.5.0.tar.gz.sha256 new file mode 100644 index 0000000..53f077f --- /dev/null +++ b/support/3rd_party/flac-1.5.0.tar.gz.sha256 @@ -0,0 +1 @@ +aea54ed186ad07a34750399cb27fc216a2b62d0ffcd6dc2e3064a3518c3146f8 flac-1.5.0.tar.gz diff --git a/support/3rd_party/fmt-12.0.0.tar.gz b/support/3rd_party/fmt-12.0.0.tar.gz new file mode 100644 index 0000000..5f13b64 --- /dev/null +++ b/support/3rd_party/fmt-12.0.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa3e8fbb6a0066c03454434add1f1fc23299e85758ceec0d7d2d974431481e40 +size 709036 diff --git a/support/3rd_party/fmt-12.0.0.tar.gz.sha256 b/support/3rd_party/fmt-12.0.0.tar.gz.sha256 new file mode 100644 index 0000000..38c4113 --- /dev/null +++ b/support/3rd_party/fmt-12.0.0.tar.gz.sha256 @@ -0,0 +1 @@ +aa3e8fbb6a0066c03454434add1f1fc23299e85758ceec0d7d2d974431481e40 fmt-12.0.0.tar.gz diff --git a/support/3rd_party/fontconfig-2.16.0.tar.xz b/support/3rd_party/fontconfig-2.16.0.tar.xz new file mode 100644 index 0000000..36d5b73 --- /dev/null +++ b/support/3rd_party/fontconfig-2.16.0.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a33dc555cc9ba8b10caf7695878ef134eeb36d0af366041f639b1da9b6ed220 +size 1294156 diff --git a/support/3rd_party/fontconfig-2.16.0.tar.xz.sha256 b/support/3rd_party/fontconfig-2.16.0.tar.xz.sha256 new file mode 100644 index 0000000..08fe304 --- /dev/null +++ b/support/3rd_party/fontconfig-2.16.0.tar.xz.sha256 @@ -0,0 +1 @@ +6a33dc555cc9ba8b10caf7695878ef134eeb36d0af366041f639b1da9b6ed220 fontconfig-2.16.0.tar.xz diff --git a/support/3rd_party/freetype-2.14.1.tar.gz b/support/3rd_party/freetype-2.14.1.tar.gz new file mode 100644 index 0000000..da7b5da --- /dev/null +++ b/support/3rd_party/freetype-2.14.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:174d9e53402e1bf9ec7277e22ec199ba3e55a6be2c0740cb18c0ee9850fc8c34 +size 4135293 diff --git a/support/3rd_party/freetype-2.14.1.tar.gz.sha256 b/support/3rd_party/freetype-2.14.1.tar.gz.sha256 new file mode 100644 index 0000000..3f92486 --- /dev/null +++ b/support/3rd_party/freetype-2.14.1.tar.gz.sha256 @@ -0,0 +1 @@ +174d9e53402e1bf9ec7277e22ec199ba3e55a6be2c0740cb18c0ee9850fc8c34 freetype-2.14.1.tar.gz diff --git a/support/3rd_party/googletest-1.17.0.tar.gz b/support/3rd_party/googletest-1.17.0.tar.gz new file mode 100644 index 0000000..4b82832 --- /dev/null +++ b/support/3rd_party/googletest-1.17.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c +size 885595 diff --git a/support/3rd_party/googletest-1.17.0.tar.gz.sha256 b/support/3rd_party/googletest-1.17.0.tar.gz.sha256 new file mode 100644 index 0000000..96b8327 --- /dev/null +++ b/support/3rd_party/googletest-1.17.0.tar.gz.sha256 @@ -0,0 +1 @@ +65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c googletest-1.17.0.tar.gz diff --git a/support/3rd_party/icu_configure.sh b/support/3rd_party/icu_configure.sh new file mode 100644 index 0000000..0dcaa5f --- /dev/null +++ b/support/3rd_party/icu_configure.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +if [ "$(uname -m)" == "arm64" ] && + [ "${PROJECT_IS_ARM64}" == "0" ]; then + HOST_CFG="--host=x86_64-apple-darwin" + export CC="clang -arch x86_64" + export CXX="clang++ -arch x86_64" +fi + +CXXFLAGS="-std=gnu++17 -march=$1 -mtune=generic" ./configure \ + --disable-samples \ + --disable-tests \ + --enable-shared=$3 \ + --enable-static=yes \ + --prefix="$2" \ + ${HOST_CFG} diff --git a/support/3rd_party/json-3.12.0.tar.gz b/support/3rd_party/json-3.12.0.tar.gz new file mode 100644 index 0000000..a45946b --- /dev/null +++ b/support/3rd_party/json-3.12.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b92eb0c06d10683f7447ce9406cb97cd4b453be18d7279320f7b2f025c10187 +size 9678593 diff --git a/support/3rd_party/json-3.12.0.tar.gz.sha256 b/support/3rd_party/json-3.12.0.tar.gz.sha256 new file mode 100644 index 0000000..8140ff3 --- /dev/null +++ b/support/3rd_party/json-3.12.0.tar.gz.sha256 @@ -0,0 +1 @@ +4b92eb0c06d10683f7447ce9406cb97cd4b453be18d7279320f7b2f025c10187 *json-3.12.0.tar.gz diff --git a/support/3rd_party/libbitcoin-system-3.8.0.tar.gz b/support/3rd_party/libbitcoin-system-3.8.0.tar.gz new file mode 100644 index 0000000..865defd --- /dev/null +++ b/support/3rd_party/libbitcoin-system-3.8.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d10d79472e914620223f1ddb9396b0fa92ae5eb0b31acc14b9aa634a01d78b6 +size 826544 diff --git a/support/3rd_party/libbitcoin-system-3.8.0.tar.gz.sha256 b/support/3rd_party/libbitcoin-system-3.8.0.tar.gz.sha256 new file mode 100644 index 0000000..44dd178 --- /dev/null +++ b/support/3rd_party/libbitcoin-system-3.8.0.tar.gz.sha256 @@ -0,0 +1 @@ +0d10d79472e914620223f1ddb9396b0fa92ae5eb0b31acc14b9aa634a01d78b6 *libbitcoin-system-3.8.0.tar.gz diff --git a/support/3rd_party/libdsm-0.4.3.tar.gz b/support/3rd_party/libdsm-0.4.3.tar.gz new file mode 100644 index 0000000..057bcab --- /dev/null +++ b/support/3rd_party/libdsm-0.4.3.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:747c4563d6291303d9b085c9e7dc96ac44f91871dcac3e20480fdcc066eee88a +size 151777 diff --git a/support/3rd_party/libdsm-0.4.3.tar.gz.sha256 b/support/3rd_party/libdsm-0.4.3.tar.gz.sha256 new file mode 100644 index 0000000..617e97e --- /dev/null +++ b/support/3rd_party/libdsm-0.4.3.tar.gz.sha256 @@ -0,0 +1 @@ +747c4563d6291303d9b085c9e7dc96ac44f91871dcac3e20480fdcc066eee88a libdsm-0.4.3.tar.gz diff --git a/support/3rd_party/libdsm_meson_build.patch b/support/3rd_party/libdsm_meson_build.patch new file mode 100644 index 0000000..c86d050 --- /dev/null +++ b/support/3rd_party/libdsm_meson_build.patch @@ -0,0 +1,24 @@ +*** meson.build 2024-08-25 13:25:34.223915502 -0500 +--- meson.build.new 2024-08-25 13:30:22.078549158 -0500 +*************** else +*** 114,132 **** + compat_sources += 'compat/strndup.c' + endif + +- if cc.has_function('clock_gettime', prefix: '#include ', +- dependencies: dep_thread) +- conf_data.set('HAVE_CLOCK_GETTIME', 1) +- else +- dep_rt = cc.find_library('rt', required: false) +- if cc.has_function('clock_gettime', prefix: '#include ', +- dependencies: [dep_rt, dep_thread]) +- conf_data.set('HAVE_CLOCK_GETTIME', 1) +- else +- compat_sources += 'compat/clock_gettime.c' +- endif +- endif +- + if cc.has_function('pipe') + conf_data.set('HAVE_PIPE', 1) + endif +--- 114,119 ---- diff --git a/support/3rd_party/libdsm_netbios_session_c.patch b/support/3rd_party/libdsm_netbios_session_c.patch new file mode 100644 index 0000000..f4411ec --- /dev/null +++ b/support/3rd_party/libdsm_netbios_session_c.patch @@ -0,0 +1,14 @@ +*** src/netbios_session.c 2024-08-25 14:07:44.450846602 -0500 +--- src/netbios_session.c.new 2024-08-25 14:07:52.260802575 -0500 +*************** +*** 45,50 **** +--- 45,53 ---- + #ifdef HAVE_SYS_SOCKET_H + #include + #endif ++ #ifndef _WIN32 ++ #include ++ #endif + #include + #include + diff --git a/support/3rd_party/libdsm_netbios_session_c_2.patch b/support/3rd_party/libdsm_netbios_session_c_2.patch new file mode 100644 index 0000000..ec7553b --- /dev/null +++ b/support/3rd_party/libdsm_netbios_session_c_2.patch @@ -0,0 +1,19 @@ +*** src/netbios_session.c 2024-08-25 15:41:23.313857494 -0500 +--- src/netbios_session.c.new 2024-08-25 16:48:20.721356125 -0500 +*************** static int open_socket_and_connect(netbi +*** 126,132 **** + + if (FD_ISSET(s->socket, &write_fds)) + { +! if (getsockopt(s->socket, SOL_SOCKET, SO_ERROR, &ret, + &(socklen_t){ sizeof (ret) }) || ret) + { + errno = ret; +--- 126,132 ---- + + if (FD_ISSET(s->socket, &write_fds)) + { +! if (getsockopt(s->socket, SOL_SOCKET, SO_ERROR, (char*)&ret, + &(socklen_t){ sizeof (ret) }) || ret) + { + errno = ret; diff --git a/support/3rd_party/libdsm_netbios_utils_c.patch b/support/3rd_party/libdsm_netbios_utils_c.patch new file mode 100644 index 0000000..1bcaa6d --- /dev/null +++ b/support/3rd_party/libdsm_netbios_utils_c.patch @@ -0,0 +1,14 @@ +*** src/netbios_utils.c 2024-08-25 14:06:21.427979930 -0500 +--- src/netbios_utils.c.new 2024-08-25 14:08:38.020544212 -0500 +*************** +*** 32,37 **** +--- 32,40 ---- + # include "config.h" + #endif + ++ #ifndef _WIN32 ++ #include ++ #endif + #include + #include + #include diff --git a/support/3rd_party/libdsm_patch.sh b/support/3rd_party/libdsm_patch.sh new file mode 100644 index 0000000..e8e360f --- /dev/null +++ b/support/3rd_party/libdsm_patch.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +pushd "$2" +patch -Np0 <"$1/libdsm_meson_build.patch" || exit $? +patch -Np0 <"$1/libdsm_netbios_session_c.patch" || exit $? +patch -Np0 <"$1/libdsm_netbios_session_c_2.patch" || exit $? +patch -Np0 <"$1/libdsm_netbios_utils_c.patch" || exit $? +patch -Np0 <"$1/libdsm_smb_ntlm_c.patch" || exit $? +popd diff --git a/support/3rd_party/libdsm_smb_ntlm_c.patch b/support/3rd_party/libdsm_smb_ntlm_c.patch new file mode 100644 index 0000000..3ff88aa --- /dev/null +++ b/support/3rd_party/libdsm_smb_ntlm_c.patch @@ -0,0 +1,17 @@ +*** src/smb_ntlm.c 2024-08-25 14:09:43.423507167 -0500 +--- src/smb_ntlm.c.new 2024-08-25 15:28:31.976894610 -0500 +*************** uint64_t smb_ntlm_generate_challenge( +*** 80,86 **** +--- 80,91 ---- + } + #else + unsigned int number; ++ #ifdef rand_s + rand_s( &number ); ++ #else ++ srand( (unsigned)time( NULL ) ); ++ number = rand(); ++ #endif + return number; + #endif + } diff --git a/support/3rd_party/libevent-2.1.12-stable.tar.gz b/support/3rd_party/libevent-2.1.12-stable.tar.gz new file mode 100644 index 0000000..002a25a --- /dev/null +++ b/support/3rd_party/libevent-2.1.12-stable.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7180a979aaa7000e1264da484f712d403fcf7679b1e9212c4e3d09f5c93efc24 +size 743522 diff --git a/support/3rd_party/libevent-2.1.12-stable.tar.gz.sha256 b/support/3rd_party/libevent-2.1.12-stable.tar.gz.sha256 new file mode 100644 index 0000000..605a4d2 --- /dev/null +++ b/support/3rd_party/libevent-2.1.12-stable.tar.gz.sha256 @@ -0,0 +1 @@ +7180a979aaa7000e1264da484f712d403fcf7679b1e9212c4e3d09f5c93efc24 libevent-2.1.12-stable.tar.gz diff --git a/support/3rd_party/libevent_patch.sh b/support/3rd_party/libevent_patch.sh new file mode 100644 index 0000000..ddc7eb7 --- /dev/null +++ b/support/3rd_party/libevent_patch.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +pushd "$2" +${SED} -i s/3\.1/3\.10/g CMakeLists.txt +popd diff --git a/support/3rd_party/libiconv-1.18.tar.gz b/support/3rd_party/libiconv-1.18.tar.gz new file mode 100644 index 0000000..2cc28ed --- /dev/null +++ b/support/3rd_party/libiconv-1.18.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b08f5f4f9b4eb82f151a7040bfd6fe6c6fb922efe4b1659c66ea933276965e8 +size 5822590 diff --git a/support/3rd_party/libiconv-1.18.tar.gz.sha256 b/support/3rd_party/libiconv-1.18.tar.gz.sha256 new file mode 100644 index 0000000..46b96a8 --- /dev/null +++ b/support/3rd_party/libiconv-1.18.tar.gz.sha256 @@ -0,0 +1 @@ +3b08f5f4f9b4eb82f151a7040bfd6fe6c6fb922efe4b1659c66ea933276965e8 libiconv-1.18.tar.gz diff --git a/support/3rd_party/libjpeg_turbo-3.1.2.tar.gz b/support/3rd_party/libjpeg_turbo-3.1.2.tar.gz new file mode 100644 index 0000000..56bbed3 --- /dev/null +++ b/support/3rd_party/libjpeg_turbo-3.1.2.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:560f6338b547544c4f9721b18d8b87685d433ec78b3c644c70d77adad22c55e6 +size 2512033 diff --git a/support/3rd_party/libjpeg_turbo-3.1.2.tar.gz.sha256 b/support/3rd_party/libjpeg_turbo-3.1.2.tar.gz.sha256 new file mode 100644 index 0000000..70c93d9 --- /dev/null +++ b/support/3rd_party/libjpeg_turbo-3.1.2.tar.gz.sha256 @@ -0,0 +1 @@ +560f6338b547544c4f9721b18d8b87685d433ec78b3c644c70d77adad22c55e6 libjpeg_turbo-3.1.2.tar.gz diff --git a/support/3rd_party/libpng-v1.6.50.tar.gz b/support/3rd_party/libpng-v1.6.50.tar.gz new file mode 100644 index 0000000..00411c9 --- /dev/null +++ b/support/3rd_party/libpng-v1.6.50.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71158e53cfdf2877bc99bcab33641d78df3f48e6e0daad030afe9cb8c031aa46 +size 1582079 diff --git a/support/3rd_party/libpng-v1.6.50.tar.gz.sha256 b/support/3rd_party/libpng-v1.6.50.tar.gz.sha256 new file mode 100644 index 0000000..36d528c --- /dev/null +++ b/support/3rd_party/libpng-v1.6.50.tar.gz.sha256 @@ -0,0 +1 @@ +71158e53cfdf2877bc99bcab33641d78df3f48e6e0daad030afe9cb8c031aa46 libpng-v1.6.50.tar.gz diff --git a/support/3rd_party/libsodium-1.0.20.tar.gz b/support/3rd_party/libsodium-1.0.20.tar.gz new file mode 100644 index 0000000..609a212 --- /dev/null +++ b/support/3rd_party/libsodium-1.0.20.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1 +size 2151843 diff --git a/support/3rd_party/libsodium-1.0.20.tar.gz.sha256 b/support/3rd_party/libsodium-1.0.20.tar.gz.sha256 new file mode 100644 index 0000000..5fddcda --- /dev/null +++ b/support/3rd_party/libsodium-1.0.20.tar.gz.sha256 @@ -0,0 +1 @@ +8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1 libsodium-1.0.20.tar.gz diff --git a/support/3rd_party/libsodium_configure.sh b/support/3rd_party/libsodium_configure.sh new file mode 100644 index 0000000..e963164 --- /dev/null +++ b/support/3rd_party/libsodium_configure.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +if [ "$1" == "mingw64" ]; then + HOST_CFG=--host=x86_64-w64-mingw32 +elif [ "$(uname -s)" == "Darwin" ] && [ "$(uname -m)" == "arm64" ] && + [ "${PROJECT_IS_ARM64}" == "0" ]; then + HOST_CFG="--host=x86_64-apple-darwin" + export CC="clang -arch x86_64" + export CXX="clang++ -arch x86_64" +fi + +CFLAGS="-O3 -fomit-frame-pointer -march=$2 -mtune=generic" ./configure \ + --disable-asm \ + --disable-ssp \ + --enable-shared=$4 \ + --enable-static=yes \ + --prefix="$3" \ + ${HOST_CFG} diff --git a/support/3rd_party/libtasn1-4.19.0.tar.gz b/support/3rd_party/libtasn1-4.19.0.tar.gz new file mode 100644 index 0000000..b5520f2 --- /dev/null +++ b/support/3rd_party/libtasn1-4.19.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1613f0ac1cf484d6ec0ce3b8c06d56263cc7242f1c23b30d82d23de345a63f7a +size 1786576 diff --git a/support/3rd_party/libtasn1-4.19.0.tar.gz.sha256 b/support/3rd_party/libtasn1-4.19.0.tar.gz.sha256 new file mode 100644 index 0000000..218b9d9 --- /dev/null +++ b/support/3rd_party/libtasn1-4.19.0.tar.gz.sha256 @@ -0,0 +1 @@ +1613f0ac1cf484d6ec0ce3b8c06d56263cc7242f1c23b30d82d23de345a63f7a libtasn1-4.19.0.tar.gz diff --git a/support/3rd_party/mingw64/binutils-2.44.tar.xz b/support/3rd_party/mingw64/binutils-2.44.tar.xz new file mode 100644 index 0000000..d94da78 --- /dev/null +++ b/support/3rd_party/mingw64/binutils-2.44.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce2017e059d63e67ddb9240e9d4ec49c2893605035cd60e92ad53177f4377237 +size 27285788 diff --git a/support/3rd_party/mingw64/binutils-2.44.tar.xz.sha256 b/support/3rd_party/mingw64/binutils-2.44.tar.xz.sha256 new file mode 100644 index 0000000..55a2e69 --- /dev/null +++ b/support/3rd_party/mingw64/binutils-2.44.tar.xz.sha256 @@ -0,0 +1 @@ +ce2017e059d63e67ddb9240e9d4ec49c2893605035cd60e92ad53177f4377237 binutils-2.44.tar.xz diff --git a/support/3rd_party/mingw64/expat-2.7.1.tar.gz b/support/3rd_party/mingw64/expat-2.7.1.tar.gz new file mode 100644 index 0000000..f3d1951 --- /dev/null +++ b/support/3rd_party/mingw64/expat-2.7.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85372797ff0673a8fc4a6be16466bb5a0ca28c0dcf3c6f7ac1686b4a3ba2aabb +size 8433717 diff --git a/support/3rd_party/mingw64/expat-2.7.1.tar.gz.sha256 b/support/3rd_party/mingw64/expat-2.7.1.tar.gz.sha256 new file mode 100644 index 0000000..0562cb9 --- /dev/null +++ b/support/3rd_party/mingw64/expat-2.7.1.tar.gz.sha256 @@ -0,0 +1 @@ +85372797ff0673a8fc4a6be16466bb5a0ca28c0dcf3c6f7ac1686b4a3ba2aabb expat-2.7.1.tar.gz diff --git a/support/3rd_party/mingw64/gcc-15.2.0.tar.gz b/support/3rd_party/mingw64/gcc-15.2.0.tar.gz new file mode 100644 index 0000000..2cab2cd --- /dev/null +++ b/support/3rd_party/mingw64/gcc-15.2.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7294d65cc1a0558cb815af0ca8c7763d86f7a31199794ede3f630c0d1b0a5723 +size 178138393 diff --git a/support/3rd_party/mingw64/gcc-15.2.0.tar.gz.sha256 b/support/3rd_party/mingw64/gcc-15.2.0.tar.gz.sha256 new file mode 100644 index 0000000..7308e25 --- /dev/null +++ b/support/3rd_party/mingw64/gcc-15.2.0.tar.gz.sha256 @@ -0,0 +1 @@ +7294d65cc1a0558cb815af0ca8c7763d86f7a31199794ede3f630c0d1b0a5723 gcc-15.2.0.tar.gz diff --git a/support/3rd_party/mingw64/icu-release-76-1.tar.gz b/support/3rd_party/mingw64/icu-release-76-1.tar.gz new file mode 100644 index 0000000..5a1dcea --- /dev/null +++ b/support/3rd_party/mingw64/icu-release-76-1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2 +size 67524828 diff --git a/support/3rd_party/mingw64/icu-release-76-1.tar.gz.sha256 b/support/3rd_party/mingw64/icu-release-76-1.tar.gz.sha256 new file mode 100644 index 0000000..0dc1650 --- /dev/null +++ b/support/3rd_party/mingw64/icu-release-76-1.tar.gz.sha256 @@ -0,0 +1 @@ +a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2 icu-release-76-1.tar.gz diff --git a/support/3rd_party/mingw64/innosetup-6.5.4.exe b/support/3rd_party/mingw64/innosetup-6.5.4.exe new file mode 100644 index 0000000..bbd9eb0 --- /dev/null +++ b/support/3rd_party/mingw64/innosetup-6.5.4.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa73bf47a4da250d185d07561c2bfda387e5e20db77e4570004cf6a133cc10b1 +size 7770392 diff --git a/support/3rd_party/mingw64/innosetup-6.5.4.exe.sha256 b/support/3rd_party/mingw64/innosetup-6.5.4.exe.sha256 new file mode 100644 index 0000000..44601cf --- /dev/null +++ b/support/3rd_party/mingw64/innosetup-6.5.4.exe.sha256 @@ -0,0 +1 @@ +fa73bf47a4da250d185d07561c2bfda387e5e20db77e4570004cf6a133cc10b1 innosetup-6.5.4.exe diff --git a/support/3rd_party/mingw64/mingw-w64-v13.0.0.tar.bz2 b/support/3rd_party/mingw64/mingw-w64-v13.0.0.tar.bz2 new file mode 100644 index 0000000..bddf085 Binary files /dev/null and b/support/3rd_party/mingw64/mingw-w64-v13.0.0.tar.bz2 differ diff --git a/support/3rd_party/mingw64/mingw-w64-v13.0.0.tar.bz2.sha256 b/support/3rd_party/mingw64/mingw-w64-v13.0.0.tar.bz2.sha256 new file mode 100644 index 0000000..e0f4950 --- /dev/null +++ b/support/3rd_party/mingw64/mingw-w64-v13.0.0.tar.bz2.sha256 @@ -0,0 +1 @@ +5afe822af5c4edbf67daaf45eec61d538f49eef6b19524de64897c6b95828caf mingw-w64-v13.0.0.tar.bz2 diff --git a/support/3rd_party/mingw64/pkg-config-0.29.2.tar.gz b/support/3rd_party/mingw64/pkg-config-0.29.2.tar.gz new file mode 100644 index 0000000..83cf6bb --- /dev/null +++ b/support/3rd_party/mingw64/pkg-config-0.29.2.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591 +size 2016830 diff --git a/support/3rd_party/mingw64/pkg-config-0.29.2.tar.gz.sha256 b/support/3rd_party/mingw64/pkg-config-0.29.2.tar.gz.sha256 new file mode 100644 index 0000000..d23b500 --- /dev/null +++ b/support/3rd_party/mingw64/pkg-config-0.29.2.tar.gz.sha256 @@ -0,0 +1 @@ +6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591 pkg-config-0.29.2.tar.gz diff --git a/support/3rd_party/mingw64/zlib-1.3.1.tar.gz b/support/3rd_party/mingw64/zlib-1.3.1.tar.gz new file mode 100644 index 0000000..fb9239b --- /dev/null +++ b/support/3rd_party/mingw64/zlib-1.3.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c +size 1572744 diff --git a/support/3rd_party/mingw64/zlib-1.3.1.tar.gz.sha256 b/support/3rd_party/mingw64/zlib-1.3.1.tar.gz.sha256 new file mode 100644 index 0000000..9440c84 --- /dev/null +++ b/support/3rd_party/mingw64/zlib-1.3.1.tar.gz.sha256 @@ -0,0 +1 @@ +17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c zlib-1.3.1.tar.gz diff --git a/support/3rd_party/nana-v1.7.4.tar.gz b/support/3rd_party/nana-v1.7.4.tar.gz new file mode 100644 index 0000000..3882491 --- /dev/null +++ b/support/3rd_party/nana-v1.7.4.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56f7b1ed006c750fccf8ef15ab1e83f96751f2dfdcb68d93e5f712a6c9b58bcb +size 581976 diff --git a/support/3rd_party/nana-v1.7.4.tar.gz.sha256 b/support/3rd_party/nana-v1.7.4.tar.gz.sha256 new file mode 100644 index 0000000..29ce0ce --- /dev/null +++ b/support/3rd_party/nana-v1.7.4.tar.gz.sha256 @@ -0,0 +1 @@ +56f7b1ed006c750fccf8ef15ab1e83f96751f2dfdcb68d93e5f712a6c9b58bcb nana-v1.7.4.tar.gz diff --git a/support/3rd_party/nana_dragdrop_cpp.patch b/support/3rd_party/nana_dragdrop_cpp.patch new file mode 100644 index 0000000..08dbcc4 --- /dev/null +++ b/support/3rd_party/nana_dragdrop_cpp.patch @@ -0,0 +1,19 @@ +*** source/gui/dragdrop.cpp 2020-05-16 17:08:50.000000000 -0500 +--- source/gui/dragdrop.cpp.new 2024-08-25 19:15:58.989072229 -0500 +*************** +*** 25,31 **** + # include + # include + # include +! # include + #elif defined(NANA_X11) + # include "../detail/posix/xdnd_protocol.hpp" + # include +--- 25,31 ---- + # include + # include + # include +! # include + #elif defined(NANA_X11) + # include "../detail/posix/xdnd_protocol.hpp" + # include diff --git a/support/3rd_party/nana_filebox_cpp.patch b/support/3rd_party/nana_filebox_cpp.patch new file mode 100644 index 0000000..7a8a4b3 --- /dev/null +++ b/support/3rd_party/nana_filebox_cpp.patch @@ -0,0 +1,23 @@ +*** source/gui/filebox.cpp 2020-05-16 17:08:50.000000000 -0500 +--- source/gui/filebox.cpp.new 2024-08-25 19:15:31.242397483 -0500 +*************** +*** 20,28 **** + # include + # include "../detail/mswin/platform_spec.hpp" + # ifndef NANA_MINGW // isn't supported well on MinGW +! # include + # else +! # include + # endif + #elif defined(NANA_POSIX) + # include +--- 20,28 ---- + # include + # include "../detail/mswin/platform_spec.hpp" + # ifndef NANA_MINGW // isn't supported well on MinGW +! # include + # else +! # include + # endif + #elif defined(NANA_POSIX) + # include diff --git a/support/3rd_party/nana_patch.sh b/support/3rd_party/nana_patch.sh new file mode 100644 index 0000000..ec64838 --- /dev/null +++ b/support/3rd_party/nana_patch.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +pushd "$2" +patch -Np0 <"$1/nana_dragdrop_cpp.patch" || exit $? +patch -Np0 <"$1/nana_filebox_cpp.patch" || exit $? +popd diff --git a/support/3rd_party/nuspell-v5.1.6.tar.gz b/support/3rd_party/nuspell-v5.1.6.tar.gz new file mode 100644 index 0000000..d2c9a26 --- /dev/null +++ b/support/3rd_party/nuspell-v5.1.6.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d4baa1daf833a18dc06ae0af0571d9574cc849d47daff6b9ce11dac0a5ded6a +size 373260 diff --git a/support/3rd_party/nuspell-v5.1.6.tar.gz.sha256 b/support/3rd_party/nuspell-v5.1.6.tar.gz.sha256 new file mode 100644 index 0000000..b2eddc1 --- /dev/null +++ b/support/3rd_party/nuspell-v5.1.6.tar.gz.sha256 @@ -0,0 +1 @@ +5d4baa1daf833a18dc06ae0af0571d9574cc849d47daff6b9ce11dac0a5ded6a nuspell-v5.1.6.tar.gz diff --git a/support/3rd_party/ogg-v1.3.6.tar.gz b/support/3rd_party/ogg-v1.3.6.tar.gz new file mode 100644 index 0000000..ff27d79 --- /dev/null +++ b/support/3rd_party/ogg-v1.3.6.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83e6704730683d004d20e21b8f7f55dcb3383cdf84c0daedf30bde175f774638 +size 604469 diff --git a/support/3rd_party/ogg-v1.3.6.tar.gz.sha256 b/support/3rd_party/ogg-v1.3.6.tar.gz.sha256 new file mode 100644 index 0000000..935fee9 --- /dev/null +++ b/support/3rd_party/ogg-v1.3.6.tar.gz.sha256 @@ -0,0 +1 @@ +83e6704730683d004d20e21b8f7f55dcb3383cdf84c0daedf30bde175f774638 ogg-v1.3.6.tar.gz diff --git a/support/3rd_party/openal-1.24.3.tar.gz b/support/3rd_party/openal-1.24.3.tar.gz new file mode 100644 index 0000000..e607a99 --- /dev/null +++ b/support/3rd_party/openal-1.24.3.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e1fecdeb45e7f78722b776c5cf30bd33934b961d7fd2a11e0494e064cc631ce +size 1251714 diff --git a/support/3rd_party/openal-1.24.3.tar.gz.sha256 b/support/3rd_party/openal-1.24.3.tar.gz.sha256 new file mode 100644 index 0000000..ed6c721 --- /dev/null +++ b/support/3rd_party/openal-1.24.3.tar.gz.sha256 @@ -0,0 +1 @@ +7e1fecdeb45e7f78722b776c5cf30bd33934b961d7fd2a11e0494e064cc631ce openal-1.24.3.tar.gz diff --git a/support/3rd_party/openssl-3.6.0.tar.gz b/support/3rd_party/openssl-3.6.0.tar.gz new file mode 100644 index 0000000..415a4a8 --- /dev/null +++ b/support/3rd_party/openssl-3.6.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6a5f44b7eb69e3fa35dbf15524405b44837a481d43d81daddde3ff21fcbb8e9 +size 54974351 diff --git a/support/3rd_party/openssl-3.6.0.tar.gz.sha256 b/support/3rd_party/openssl-3.6.0.tar.gz.sha256 new file mode 100644 index 0000000..b8dcfac --- /dev/null +++ b/support/3rd_party/openssl-3.6.0.tar.gz.sha256 @@ -0,0 +1 @@ +b6a5f44b7eb69e3fa35dbf15524405b44837a481d43d81daddde3ff21fcbb8e9 openssl-3.6.0.tar.gz diff --git a/support/3rd_party/pugixml-1.15.tar.gz b/support/3rd_party/pugixml-1.15.tar.gz new file mode 100644 index 0000000..62e6532 --- /dev/null +++ b/support/3rd_party/pugixml-1.15.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:655ade57fa703fb421c2eb9a0113b5064bddb145d415dd1f88c79353d90d511a +size 395045 diff --git a/support/3rd_party/pugixml-1.15.tar.gz.sha256 b/support/3rd_party/pugixml-1.15.tar.gz.sha256 new file mode 100644 index 0000000..526982f --- /dev/null +++ b/support/3rd_party/pugixml-1.15.tar.gz.sha256 @@ -0,0 +1 @@ +655ade57fa703fb421c2eb9a0113b5064bddb145d415dd1f88c79353d90d511a *pugixml-1.15.tar.gz diff --git a/support/3rd_party/rocksdb-10.5.1.tar.gz b/support/3rd_party/rocksdb-10.5.1.tar.gz new file mode 100644 index 0000000..16ec937 --- /dev/null +++ b/support/3rd_party/rocksdb-10.5.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ec942baab802b2845188d02bc5d4e42c29236e61bcbc08f5b3a6bdd92290c22 +size 13864326 diff --git a/support/3rd_party/rocksdb-10.5.1.tar.gz.sha256 b/support/3rd_party/rocksdb-10.5.1.tar.gz.sha256 new file mode 100644 index 0000000..aa036ca --- /dev/null +++ b/support/3rd_party/rocksdb-10.5.1.tar.gz.sha256 @@ -0,0 +1 @@ +7ec942baab802b2845188d02bc5d4e42c29236e61bcbc08f5b3a6bdd92290c22 rocksdb-10.5.1.tar.gz diff --git a/support/3rd_party/sdl-2.32.6.tar.gz b/support/3rd_party/sdl-2.32.6.tar.gz new file mode 100644 index 0000000..f67b5cf --- /dev/null +++ b/support/3rd_party/sdl-2.32.6.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f50e59da0d383b2c84d43db625c6e23aae58f8f90eabd2944e2138ccc253744b +size 7883811 diff --git a/support/3rd_party/sdl-2.32.6.tar.gz.sha256 b/support/3rd_party/sdl-2.32.6.tar.gz.sha256 new file mode 100644 index 0000000..695b8d8 --- /dev/null +++ b/support/3rd_party/sdl-2.32.6.tar.gz.sha256 @@ -0,0 +1 @@ +f50e59da0d383b2c84d43db625c6e23aae58f8f90eabd2944e2138ccc253744b sdl-2.32.6.tar.gz diff --git a/support/3rd_party/secp256k1-0.1.0.20.tar.gz b/support/3rd_party/secp256k1-0.1.0.20.tar.gz new file mode 100644 index 0000000..bf6bd75 --- /dev/null +++ b/support/3rd_party/secp256k1-0.1.0.20.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61583939f1f25b92e6401e5b819e399da02562de663873df3056993b40148701 +size 2460408 diff --git a/support/3rd_party/secp256k1-0.1.0.20.tar.gz.sha256 b/support/3rd_party/secp256k1-0.1.0.20.tar.gz.sha256 new file mode 100644 index 0000000..f124a8c --- /dev/null +++ b/support/3rd_party/secp256k1-0.1.0.20.tar.gz.sha256 @@ -0,0 +1 @@ +61583939f1f25b92e6401e5b819e399da02562de663873df3056993b40148701 secp256k1-0.1.0.20.tar.gz diff --git a/support/3rd_party/spdlog-1.15.3.tar.gz b/support/3rd_party/spdlog-1.15.3.tar.gz new file mode 100644 index 0000000..ffde4cf --- /dev/null +++ b/support/3rd_party/spdlog-1.15.3.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15a04e69c222eb6c01094b5c7ff8a249b36bb22788d72519646fb85feb267e67 +size 277691 diff --git a/support/3rd_party/spdlog-1.15.3.tar.gz.sha256 b/support/3rd_party/spdlog-1.15.3.tar.gz.sha256 new file mode 100644 index 0000000..dc9df6b --- /dev/null +++ b/support/3rd_party/spdlog-1.15.3.tar.gz.sha256 @@ -0,0 +1 @@ +15a04e69c222eb6c01094b5c7ff8a249b36bb22788d72519646fb85feb267e67 spdlog-1.15.3.tar.gz diff --git a/support/3rd_party/sqlite-amalgamation-3500400.zip b/support/3rd_party/sqlite-amalgamation-3500400.zip new file mode 100644 index 0000000..dac01aa --- /dev/null +++ b/support/3rd_party/sqlite-amalgamation-3500400.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d3049dd0f830a025a53105fc79fd2ab9431aea99e137809d064d8ee8356b032 +size 2845716 diff --git a/support/3rd_party/sqlite-amalgamation-3500400.zip.sha256 b/support/3rd_party/sqlite-amalgamation-3500400.zip.sha256 new file mode 100644 index 0000000..4416da3 --- /dev/null +++ b/support/3rd_party/sqlite-amalgamation-3500400.zip.sha256 @@ -0,0 +1 @@ +1d3049dd0f830a025a53105fc79fd2ab9431aea99e137809d064d8ee8356b032 sqlite-amalgamation-3500400.zip diff --git a/support/3rd_party/stduuid-1.2.3.tar.gz b/support/3rd_party/stduuid-1.2.3.tar.gz new file mode 100644 index 0000000..43de61f --- /dev/null +++ b/support/3rd_party/stduuid-1.2.3.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3 +size 184170 diff --git a/support/3rd_party/stduuid-1.2.3.tar.gz.sha256 b/support/3rd_party/stduuid-1.2.3.tar.gz.sha256 new file mode 100644 index 0000000..3d4a3e0 --- /dev/null +++ b/support/3rd_party/stduuid-1.2.3.tar.gz.sha256 @@ -0,0 +1 @@ +b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3 stduuid-1.2.3.tar.gz diff --git a/support/3rd_party/tiny-process-library.tar.gz b/support/3rd_party/tiny-process-library.tar.gz new file mode 100644 index 0000000..526f490 --- /dev/null +++ b/support/3rd_party/tiny-process-library.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82e46657e697aff5bf980387c86ef3aa05bb184622abbd75663a4df549c68f73 +size 14307 diff --git a/support/3rd_party/tiny-process-library.tar.gz.sha256 b/support/3rd_party/tiny-process-library.tar.gz.sha256 new file mode 100644 index 0000000..84d4b37 --- /dev/null +++ b/support/3rd_party/tiny-process-library.tar.gz.sha256 @@ -0,0 +1 @@ +82e46657e697aff5bf980387c86ef3aa05bb184622abbd75663a4df549c68f73 tiny-process-library.tar.gz diff --git a/support/3rd_party/vlc/AUTHORS.txt b/support/3rd_party/vlc/AUTHORS.txt new file mode 100644 index 0000000..3b6a86c --- /dev/null +++ b/support/3rd_party/vlc/AUTHORS.txt @@ -0,0 +1,1073 @@ +VideoLAN and the VLC team would like to acknowledge the following contributors: + +Programming +----------- +Rémi Denis-Courmont +Jean-Baptiste Kempf +Laurent Aimar +François Cartegnie +Gildas Bazin +Felix Paul Kühne +Rafaël Carré +Pierre d'Herbemont +Thomas Guillem +Rémi Duraffort +Derk-Jan Hartman +Antoine Cellerier +Samuel Hocevar +Jean-Paul Saman +Steve Lhomme +Christophe Mutricy +Clément Stenac +Christophe Massiot +Ilkka Ollakka +Pierre Ynard +Filip Roséen +Damien Fouilleul +Sigmund Augdal Helberg +Erwan Tulou +David Fuhrmann +Marvin Scholz +Olivier Teulière +Cyril Deguet +Eric Petit +Filippo Carone +Rocky Bernstein +Hugo Beauzée-Luyssen +Olivier Aubert +Pavlov Konstantin +Jakob Leben +Benjamin Pracht +Jean-Philippe André +Stéphane Borel +JP Dinger +Geoffroy Couprie +Martin Storsjö +Marian Ďurkovič +Ludovic Fauvet +Petri Hintukainen +Yoann Peronneau +Denis Charmet +Sébastien Escudier +Jon Lech Johansen +KO Myung-Hun +Edward Wang +Dennis van Amerongen +Faustino Osuna +Mirsal Ennaime +Sean McGovern +Jérôme Decoodt +Loïc Minier +David Flynn +Frédéric Yhuel +Kaarlo Raiha +Mark Moriarty +Christopher Mueller +Fabio Ritrovato +Tony Castley +Srikanth Raju +Michel Kaempf +Jean-Marc Dressler +Johan Bilien +Vincent Seguin +Simon Latapie +Bernie Purcell +Henri Fallon +Sebastien Zwickert +Christoph Miebach +Adrien Maglo +Emmanuel Puig +Renaud Dartus +Alexis de Lattre +Vincent Penquerc'h +Arnaud de Bossoreille de Ribou +Mohammed Adnène Trojette +Salah-Eddin Shaban +Vittorio Giovara +Boris Dorès +Jai Menon +Anil Daoud +Daniel Mierswa +Naohiro Koriyama +Rob Jonson +Pierre Baillet +Dominique Leuenberger +Andre Pang +Zoran Turalija +Akash Mehrotra +André Weber +Anthony Loiseau +Lukas Durfina +Xavier Marchesini +Cyril Mathé +Devin Heitmueller +Juho Vähä-Herttua +Ken Self +Alexis Ballier +Juha Jeronen +Nicolas Chauvet +Richard Hosking +Éric Lassauge +Marc Ariberti +Sébastien Toque +Tobias Güntner +Benoit Steiner +Michel Lespinasse +Carlo Calabrò +Cheng Sun +Michał Trzebiatowski +Brad Smith +Brendon Justin +Alexey Sokolov +Basos G +Philippe Morin +Steinar H. Gunderson +Vicente Jimenez Aguilar +Yuval Tze +Yves Duret +Benjamin Drung +Michael Hanselmann +Alex Merry +Damien Lucas +Grigori Goronzy +Richard Shepherd +Gaël Hendryckx +Michael Feurstein +Stephan Assmus +Adrien Grand +Colin Guthrie +David Menestrina +Dominique Martinet +Gleb Pinigin +Jason Luka +Luc Saillard +Luca Barbato +Mario Speiß +Pankaj Yadav +Ramiro Polla +Ronald Wright +Rui Zhang +Can Wu +Christophe Courtaut +FUJISAWA Tooru +Hannes Domani +Manol Manolov +Timothy B. Terriberry +Antoine Lejeune +Arnaud Schauly +Branko Kokanovic +Dylan Yudaken +Florian G. Pflug +François Revol +G Finch +Keary Griffin +Konstanty Bialkowski +Ming Hu +Philippe Coent +Przemyslaw Fiala +Tanguy Krotoff +Vianney BOYER +Casian Andrei +Chris Smowton +David Kaplan +Eugenio Jarosiewicz +Fabian Keil +Guillaume Poussel +John Peterson +Justus Piater +Mark Lee +Martin T. H. Sandsmark +Rune Botten +Søren Bøg +Toralf Niebuhr +Tristan Matthews +Angelo Haller +Aurélien Nephtali +Austin Burrow +Bill C. Riemers +Colin Delacroix +Cristian Maglie +Elminster2031 +Jakub Wieczorek +John Freed +Mark Hassman +Martin Briza +Mike Houben +Romain Goyet +Adrian Yanes +Alexander Lakhin +Anatoliy Anischovich +Barry Wardell +Ben Hutchings +Besnard Jean-Baptiste +Brian Weaver +Clement Chesnin +David Geldreich +Diego Elio Pettenò +Diego Fernando Nieto +Georgi Chorbadzhiyski +Jon Stacey +Jonathan Rosser +Joris van Rooij +Kaloyan Kovachev +Katsushi Kobayashi +Kelly Anderson +Loren Merritt +Maciej Blizinski +Mark Bidewell +Miguel Angel Cabrera Moya +Niles Bindel +Samuel Pitoiset +Scott Caudle +Sean Robinson +Sergey Radionov +Simon Hailes +Stephen Parry +Sukrit Sangwan +Thierry Reding +Xavier Martin +Alex Converse +Alexander Bethke +Alexandre Ratchov +Andres Krapf +Andrey Utkin +Andri Pálsson +Andy Chenee +Anuradha Suraparaju +Benjamin Poulain +Brieuc Jeunhomme +Chris Clayton +Clément Lecigne +Cédric Cocquebert +Daniel Peng +Danny Wood +David K +Edouard Gomez +Emmanuel de Roux +Frode Tennebø +GBX +Gaurav Narula +Geraud CONTINSOUZAS +Hugues Fruchet +Jan Winter +Jean-François Massol +Jean-Philippe Grimaldi +Josh Watzman +Kai Lauterbach +Konstantin Bogdanov +Kuan-Chung Chiu +Kuang Rufan +Matthias Dahl +Michael McEll +Michael Ploujnikov +Mike Schrag +Nickolai Zeldovich +Nicolas Bertrand +Niklas Hayer +Olafs Vandāns +Olivier Gambier +Paul Corke +Ron Frederick +Rov Juvano +Sabourin Gilles +Sam Lade +Sandeep Kumar +Sasha Koruga +Sreng Jean +Sven Petai +Tomas Krotil +Tomer Barletz +Tristan Leteurtre +Wang Bo +maxime Ripard +xxcv +Adam Hoka +Adrian Knoth +Adrien Cunin +Alan Fischer +Alan McCosh +Alex Helfet +Alexander Terentyev +Alexandre Ferreira +Alina Friedrichsen +An L. Ber +Andreas Schlick +Andrew Schubert +Andrey Makhnutin +Arnaud Vallat +Asad Mehmood +Ashok Bhat +Austin English +Baptiste Coudurier +Benoit Calvez +Björn Stenberg +Blake Livingston +Brandon Brooks +Brian Johnson +Brian Kurle +Cezar Elnazli +Chris White +Christian Masus +Christoph Pfister +Christoph Seibert +Christopher Key +Christopher Rath +Claudio Ortelli +Cody Russell +Cristian Morales Vega +Dan Rosenberg +Daniel Marth +Daniel Tisza +Detlef Schroeder +Diego Biurrun +Dominik 'Rathann' Mierzejewski +Duncan Salerno +Edward Sheldrake +Elliot Murphy +Eren Inan Canpolat +Ernest E. Teem III +Etienne Membrives +Fargier Sylvain +Fathi Boudra +Felix Geyer +Filipe Azevedo +Finn Hughes +Florian Hubold +Florian Roeske +Frank Enderle +Frédéric Crozat +Georg Seifert +Gertjan Van Droogenbroeck +Gilles Chanteperdrix +Greg Farrell +Gregory Maxwell +Gwenole Beauchesne +Götz Waschk +Hans-Kristian Arntzen +Harry Sintonen +Iain Wade +Ibraheem Paredath +Isamu Arimoto +Ismael Luceno +James Bates +James Bond +James Turner +Janne Grunau +Janne Kujanpää +Jarmo Torvinen +Jason Scheunemann +Jeff Lu +Jeroen Ost +Joe Taber +Johann Ransay +Johannes Weißl +John Hendrikx +John Stebbins +Jonas Gehring +Joseph S. Atkinson +Juergen Lock +Julien 'Lta' BALLET +Julien / Gellule +Julien Humbert +Kamil Baldyga +Kamil Klimek +Karlheinz Wohlmuth +Kevin Anthony +Kevin DuBois +Lari Natri +Lorenzo Pistone +Lucas C. Villa Real +Lukáš Lalinský +Mal Graty +Malte Tancred +Martin Pöhlmann +Martin Zeman +Marton Balint +Mathew King +Mathieu Sonet +Matthew A. Townsend +Matthias Bauer +Mika Tiainen +Mike Cardillo +Mounir Lamouri (volkmar) +Natanael Copa +Nathan Phillip Brink +Nick Briggs +Nick Pope +Nil Geiswiller +Pascal Thomet +Pere Orga +Peter Bak Nielsen +Phil Roffe and David Grellscheid +Philip Sequeira +Pierre Souchay +Piotr Fusik +Pádraig Brady +R.M +Ralph Giles +Ramon Gabarró +Robert Forsman +Robert Jedrzejczyk +Robert Paciorek +Rolf Ahrenberg +Roman Pen +Ruud Althuizen +Samuli Suominen +Scott Lyons +Sebastian Birk +Sergey Puzanov +Sergio Ammirata +Sharad Dixit +Song Ye Wen +Stephan Krempel +Steven Kramer +Steven Sheehy +Sveinung Kvilhaugsvik +Sylvain Cadhillac +Sylver Bruneau +Takahito HIRANO +Theron Lewis +Thijs Alkemade +Tillmann Karras +Timo Paulssen +Timo Rothenpieler +Tobias Rapp +Tomasen +Tony Vankrunkelsven +Tristan Heaven +Varphone Wong +Vasily Fomin +Vikram Narayanan +Yannick Bréhon +Yavor Doganov +Yohann Martineau +dharani.prabhu.s +suheaven +wucan +김정은 +Adam Sampson +Alexander Gall +Alex Antropoff +Alexis Guillard +Alex Izvorski +Amir Gouini +Andrea Guzzo +Andrew Flintham +Andrew Zaikin +Andy Lindsay +Arai/Fujisawa Tooru +Arkadiusz Miskiewicz +Arnaud Gomes-do-Vale +Arwed v. Merkatz +Barak Ori +Basil Achermann +Benjamin Mironer +Bill +Bob Maguire +Brian C. Wiles +Brian Raymond +Brian Robb +Carsten Gottbehüt +Carsten Haitzler +Charles Hordis +Chris Clepper +Christian Henz +Christof Baumgaertner +Christophe Burgalat +Christopher Johnson +Cian Duffy +Colin Simmonds +Damian Ivereigh +Daniel Fischer +Daniel Stränger +Danko Dolch +Dennis Lou +Dermot McGahon +Douglas West +Dugal Harris +Emmanuel Blindauer +Enrico Gueli +Enrique Osuna +Eren Türkay +Eric Dudiak +Espen Skoglund +Ethan C. Baldridge +François Seingier +Frans van Veen +Frédéric Ruget +Gerald Hansink +Gisle Vanem +Glen Gray +Goetz Waschk +Gregory Hazel +Gustaf Neumann +Hang Su +Hans Lambermont +Hans-Peter Jansen +Harris Dugal +Heiko Panther +Igor Helman +Isaac Osunkunle +Jan David Mol +Jan Gerber +Jan Van Boghout +Jasper Alias +Jean-Alexis Montignies +Jean-Baptiste Le Stang +Jeffrey Baker +Jeroen Massar +Jérôme Guilbaud +Johannes Buchner +Johen Michael Zorko +Johnathan Rosser +John Dalgliesh +John Paul Lorenti +Jörg +Joseph Tulou +Julien Blache +Julien Plissonneau Duquène +Julien Robert +Kenneth Ostby +Kenneth Self +Kevin H. Patterson +Koehler, Vitally +K. Staring +Lahiru Lakmal Priyadarshana +Laurent Mutricy +Leo Spalteholz +Loox Thefuture +Marc Nolette +Marco Munderloh +Mark Gritter +Markus Kern +Markus Kuespert +Martin Hamrle +Martin Kahr +Mateus Krepsky Ludwich +Mathias Kretschmer +Mats Rojestal +Matthias P. Nowak +Matthieu Lochegnies +Michael Mondragon +Michael S. Feurstein +Michel Lanners +Mickael Hoerdt +Miguel Angel Cabrera +Mikko Hirvonen +Moritz Bunkus +Nilmoni Deb +Olivier Houchard +Olivier Pomel +Ondrej Kuda aka Albert +Øyvind Kolbu +Pascal Levesque +Patrick Horn +Patrick McLean +Pauline Castets +Paul Mackerras +Peter Surda +Petr Vacek +Philippe Van Hecke +Pierre-Luc Beaudoin +Pierre Marc Dumuid +Régis Duchesne +Remco Poortinga +Rene Gollent +Rob Casey +Robson Braga Araujo +Roine Gustafsson +Roman Bednarek +Rudolf Cornelissen +Sašo Kiselkov +Sebastian Jenny +Shane Harper +Stefán Freyr Stefánsson +Steve Brown +Steven M. Schultz +Tapio Hiltunen +Thomas L. Wood +Thomas Mühlgrabner +Thomas Parmelan +Tim 'O Callagha +Tim Schuerewegen +Tong Ka Man +Torsten Spindler +Udo Richter +Vincent Dimar +Vincent Penne +Vitalijus Slavinskas +Vitaly V. Bursov +Vladimir Chernyshov +Wade Majors +Wallace Wadge +Watanabe Go +William Hawkins +Xavier Maillard +Ye zhang +Yuehua Zhao +Abylay Ospan +Adam Leggett +Adrian Haensler +Ago Allikmaa +Ajith Manjula Senarathne +Alain Degreffe +Alan Pope +Aleksandr Pasechnik +Alexandre Fernandez +Alexandre Pereira Nunes +Alexandre Perraud +Alex Peak +Alex Warhawk +Alex Woods +Allan Odgaard +Ancelot Mark Pinto +Andrea Giudiceandrea +Andreas Hartmetz +Andreas Mieke +André Silva +Andrew Clayton +Andrey Gursky +Andrii Zui +Andy Tather +Antti Ajanki +Ara Qadir +Arjun Sreedharan +Arne de Bruijn +Arun Pandian G +A S Alam +Avani Sharma +Avishay Spitzer +Bastien Penavayre +Benjamin Adolphi +Ben Littler +Benoit du Payrat +Benoît Noël du Payrat +Bernd Kuhls +Boris Egorov +Boy van Amstel +Brian Schmidt +Brion Vibber +Cameron Mozie +Carlos Fenollosa +Carola Nitz +Christian Suloway +Clemens Werther +C.W. Betts +Daniel Amm +Daniel Verkamp +Darko Jankovic +Darrell Walisser +David Robison +David R Robison +Dennis Hamester +Derek Buitenhuis +Diogo Silva +Dominko Azdajic +Donald Campbell +Doney den Ouden +Duncan McNamara +Duncan McNAMARA +Elodie Thomann +Emeric Grange +Eric Engestrom +Etienne BRATEAU +Eugen Geist +Fabian Yamaguchi +Fabrizio Ge +Fabrizio Gennari +Fahad Al-Saidi +Felix Abecassis +Florent Pillet +Forteve Zepushisti +Frank Praznik +Gabriel de Perthuis +Gal Vinograd +Gaurav Pruthi +Geoffrey Métais +Gian Marco Sibilla +Gilles Sabourin +Gina Dobrescu +Gonzalo Higuera Díaz +Goran Dokic +Guillaume Gomez +Harald Sitter +Heorhi Valakhanovich +Ian Chamberlain +Ibrahima SARR +Igor Prokopenkov +Ion Agorria +Jarrad Whitaker +Jean-Yves Avenard +Jed Smith +Jérémy Carrier +Jeremy Huddleston Sequoia +Jerome Forissier +Jim Bankoski +Jonas Lundqvist +Jonatan "jaw" Wallmander +Jonathan Calmels +Jonathan Heard +Jonathan McGowan +Jonathan Thambidurai +Joni Räsänen +Josef Andersson +Joseph DeVore +Julian Scheel +Justin Kim +Kaarlo Räihä +Kamil Rytarowski +Kazuki Yamaguchi +Konstantin K. Beliak +Konstantinos Tsanaktsidis +Konstantin Pavlov +Kornel Lesiński +Olivier Langlois +Lochlin Duperron +Lukas Juhrich +Lyndon Brown +Marc Aldorasi +Marcel Schnirring +Marc Etcheverry +Mariusz Wasak +Mark Becwar +Martell Malone +Mathieu Malaterre +Mathieu Parent +Mathieu Velten +Matthias Keiser +Matthias Treydte +Max Dilipovich +Maxim Bublis +Maxime CHAPELET +Maxime Mouchet +Michael Tänzer +Miha Sokolov +Mohammed (Shaan) Huzaifa Danish +Moti Zilberman +Nathan Egge +Niklas Haas +Odd-Arild Kristensen +O. Hartmann +Olaf Hering +Oliver Collyer +Paul B Mahol +Paul Clark +Paulo Vitor Magacho da Silva +Pavol Babincak +Paweł Stankowski +Petter Reinholdtsen +Philip Höhlein +Pierre-Hugues Husson +Pierre Lamot +Pyry Kontio +Radek Vybiral +Rafael Waldo Delgado Doblas +Rajeesh K V +Ray Tiley +Reka Inovan +Remita Amine +Ricardo Ribalda Delgado +Richard Diamond +Rinat Ibragimov +Robert Mourning +Romain Bentz +Romain Fliedel +Romain Vimont +Ronald S. Bultje +Ross Finlayson +Sam Malone +Samuel Martin +Samuel Thibault +Sanchit Arora +Santiago Gimeno +Sebastian Ramacher +Sebastian Roth +Sergey Bolshakov +Shaleen Jain +Shlomi Fish +Simona-Marinela Prodea +Stanislas Plessia +Stefan Pöschel +Steven Toth +Sushma Reddy +Takahito Hirano +T. Chomphuming +Thierry Foucu +Thomas Nigro +Tim Allen +Tim Walker +Tobias Conradi +Tony Gaillard +Benoît Tuduri +Tzu-Jung Lee +Uwe L. Korn +Valentin Deniaud +Valentin Vetter +Valter Correia +Vianney Boyer +Victorien Le Couviour--Tuffet +Vikram Fugro +Vinson Lee +Wayne McDougall +Wieland Hoffmann +Wills Wang +Xabier Aramendi +Yaşar Tay +Yidong Ren +Yuudai Yamashigi +Zhao Zhili +أحمد المحم ودي (Ahmed El-Mahmoudy) +Баярсайхан Энхтайван +Сергей Дарьичев + +Artwork +------- +Damien Erambert +Daniel Dreibrodt, aka aLtgLasS +David Weber +Davor Orel +Dominic Spitaler +Doney den Ouden +Eurodata Computer Club +Geoffrey Roussel +Joeri van Dooren +kty0ne +Max Rudberg +Richard Øiestad +Simon Damkjær Andersen +Tom Bigelajzen +Vincent van den Heuvel + +Documentation +------------- +Bill Eldridge + +Localization +------------ +Abdul Fousan - Tamil +A. Decorte - Friulian +A. Regnander - Swedish +Adem Gunes - Turkish +Adi Nugroho - Tagalog +Adnan Memija - Bosnian +airplanez - Korean +Ajith Manjula - Sinhala +Aled Powell - Welsh +Alexander Didebulidze - Georgian +Alexander Henket - Dutch +Alexander Jansen - Norwegian Bokmål +Alexander Lakhin - Russian +Alexey Lugin - Ukrainian +Alexey Salmin - Russian +Alfred John - Acoli +Amanpreet Singh Alam - Punjabi +André de Barros Martins Ribeiro - Brazilian portuguese +Andrey Brilevskiy - Russian +Andrey Wolk - Russian +Andri Pálsson - Icelandic +Andriy Bandura - Ukrainian +Anh Phan - Vietnamese +Aniket Eknath Kudale - Marathi +Animesh Swar - Nepalese +Aputsiaĸ Niels Janussen - Danish +Ara Bextiyar - Sorani (Kurdish) +Ari Constâncio - Portuguese +Arkadiusz Lipiec - Polish +Ask Hjorth Larsen - Danish +Audrey Prevost - French +Auk Piseth - Khmer +Bayarsaikhan Enkhtaivan Баярсайхан Энхтайван - Mongolian +Biraj Karmakar - Bengali (India) +Bruno Queirós - Portuguese +Bruno Vella - Italian +Caner Başaran - Turkish +Carlo Calabrò - Italian +Chandan Kumar - Hindi +Chesús Daniel Trigo - Aragonese +Christoph Miebach - German +Chynggyz Jumaliev - Kirgyz +Circo Radu - Romanian +Cristian Secară - Romanian +Daniel Nylander - Swedish +Daniel Winzen - German +David González - Spanish +David Planella - Catalan +Dean Lee - Simplified Chinese +Denis Arnaud - Breton +Derk-Jan Hartman - Dutch +DirektX - Hungarian +Dominko Aždajić - Croatian +Dylan Aïssi - French +Đorđe Vasiljević - Serbian +Eduard Babayan - Armenian +Eero - Estonian +Eirik U. Birkeland - Norwegian Nynorsk +Elizabeth Da Conceicao Baptista - Tetum +Emilio Sepúlveda - Interlingua +Emin Mastizada - Azerbaijani +Éric Lassauge - French +Farzaneh Sarafraz - Persian +Florence Tushabe - Chiga +Fouzia Bourai - Arabic +Frank Chao - Traditional Chinese +Freyr Gunnar Ólafsson - Icelandic +Friedel Wolff - Afrikaans +Fumio Nakayama - Japanese +Gabor Kelemen - Hungarian +Gaurav Kumar - Hindi +Gaëtan Rousseaux - Walloon +Ghjuvan Pasquinu - Corsican +Goce Manevski - Macedonian +Golam Maruf Oovee - Bengali +Gonçalo Cordeiro - Galician +Gorana Milicevic - Serbian +Goswami Hardikpuri Kishorpuri - Gujarati +Haakon Meland Eriksen - Norwegian +Han HoJoong - Korean +Hardik Kishorpuri Goswami - Gujarati +Hemanta Nandi - Bengali (India) +Huw Waters - Welsh +H.Shalitha Vikum - Sinhala +Ibrahima Sarr - Fulah +Ingmārs Dīriņš - Latvian +Israt Jahan - Bengali +Ivar Smolin - Estonian +Iván Seoane Pardo - Galician +Ivo Ivanov - Bulgarian +Iñaki Larrañaga Murgoitio - Basque +Iñigo Varela - Asturian; Bable +Jakub Žáček - Czech +James Olweny - Ganda +Jamil Ahmed - Bengali +Javier Varela - Spanish +Jean-Pierre Kuypers - French +Jens Seidel - German +Joao Almeida - Portuguese +Joel Arvidsson - Swedish +jogijs - Latvian +Jonas Larsen - Danish +Jon Stødle - Norwegian Nynorsk +Jouni Kähkönen - Finnish +Juha Jeronen - Finnish +Julen Ruiz Aizpuru - Basque +Kai Hermann - German +Kamil Páral - Czech +Kang Jeong-Hee - Korean +Kasper Tvede - Danish +Kaya Zeren - Turkish +Kenneth Nielsen - Danish +Khin Mi Mi Aung - Burmese +Khoem Sokhem - Khmer +Kola - Albanian +Kypchak Kypchak - Kazakh +Laurent Jonqueres - Occitan +Loba Yeasmeen - Bengali +Lorena Gomes - Catalan +Lorenzo Porta - Italian +Luqman Hakim - Indonesian +L. Balasubramaniam - Hindi +Mahrazi Mohd Kamal - Malay +Manolis Stefanis - Modern Greek +Manuela Silva/Alfredo Silva - Portuguese +Marián Hikaník - Slovak +Mario Siegmann - German +Marko Uskokovic - Serbian +Martin Srebotnjak - Slovenian +Martin Zicha - Czech +Matej Urbančič - Slovenian +Mathias C. Berens, welcome-soft - German +Mattias Põldaru - Estonian +Md. Rezwan Shahid - Bengali +Meelad Zakaria - Persian +Michael Bauer - Scottish Gaelic +Michal Halenka - Czech +Michał Trzebiatowski - Polish +Miguel Sousa - Portuguese +Mihkel Kirjutas - Estonian +Mindaugas Baranauskas - Lithuanian +Miroslav Oujeský - Czech +Morten Brix Pedersen - Danish +Mustafa Sandal - Czech +Myckel Habets - Dutch +Namhyung Kim - Korean +Niels Fanøe - Danish +Niklas 'Nille' Åkerström - Swedish +Olav Dahlum - Norwegian Bokmål +Oleksandr Natalenko - Ukrainian +Omer Ensari - Kurmanji (Kurdish) +Osama Khalid - Arabic +Otto Kekäläinen - Finnish +Paras Nath Chaudhary - Nepali +Pasindu Kavinda - Sinhala +Pau Iranzo - Catalan +Paula Iglesias - Galician +Pedro Valadares - Portuguese +Peter Jespersen - Danish +Petr Šimáček - Czech +Phan Anh - Vietnamese +Philipp Weissenbacher - German +Pittayakom Saingtong - Thai +Prasannajit Acharya - Oriya +Praveen Illa - Telugu +Predrag Ljubenović - Serbian +Pyae Sone - Burmese +Rajnikant Kumbhar - Marathi +Ricardo Perdigão - Portuguese +Ricardo Pérez López - Spanish +Roustam Ghizdatov - Russian +Ruei-Yuan Lu - Traditional Chinese +Saad Liaquat Kiani - Urdu +Sadia Afroz - Bengali +Said Marjan Zazai - Pashto +Salar Khalilzadeh - Persian +Sam Askari - Spanish +Sam Hocevar - British +Samuel Hocevar - French +Saúl Ortega - Spanish +Savvas Nesseris - Modern Greek +Sayan Chowdhury - Hindi +Seanán Ó Coistín - Irish +Semsudin Abdic - Bosnian +Shambhu Kumar - Hindi +Shantanu Sarkar - Hindi +Shashi Ranjan - Hindi +Siarhei Daryichau Дар'ічаў Сяргей - Belarusian +Sidney Doria - Brazilian Portuguese +Sigmund Augdal - Norwegian Bokmål +Simos Xenitellis - Modern Greek +Sipho Sibiya - Zulu +Sok Sophea - Khmer +Solomon Gizaw - Amharic +Sreejith P - Malayalam +Suraj Kawade - Marathi +Stian Jørgensrud - Norwegian Bokmål +Sveinn í Felli - Icelandic +Tadashi Jokagi - Japanese +Tarsem Singh - Hindi +Thanakrit Chomphuming - Thai +Tero Pelander - Finnish +Thomas De Rocker - Dutch +Thomas Graf - gettext support, German +Tomáš Chvátal - Czech +Tòni Galhard - Occitan +Umesh Agarwal - Bengali (India) +Umidjon Almasov - Uzbek +Václav Pavlíček - Czech +Valek Filippov - Russian +Vicente Jimenez Aguilar - Spanish +Vincenzo Reale - Italian +Vít Pelčák - Czech +viyyer - Hindi +Vladimir Yermolayev - Russian +Vojtěch Smejkal - Czech +Wei Mingzhi - Simplified Chinese +Xènia Albà Cantero - Catalan +Xuacu Saturio - Asturian +Yaron Shahrabani - Hebrew +Yaşar Tay - Turkish +Yhal Htet Aung - Burmese +Yogesh K S - Kannada +Yoyo - Simplified Chinese +Yuksel Yildirim - Turkish +Zabeeh Khan - Pashto +Zhang Tong - Chinese diff --git a/support/3rd_party/vlc/COPYING.txt b/support/3rd_party/vlc/COPYING.txt new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/support/3rd_party/vlc/COPYING.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/support/3rd_party/vlc/NEWS.txt b/support/3rd_party/vlc/NEWS.txt new file mode 100644 index 0000000..0bf55e7 --- /dev/null +++ b/support/3rd_party/vlc/NEWS.txt @@ -0,0 +1,6074 @@ +Changes between 3.0.20 and 3.0.21: +---------------------------------- + +Decoders: + * Improve Opus ambisonic support + * Fix some ASS subtitle rendering issues + * Fix Opus in MP4 behaviour + * Fix VAAPI hw decoding with some drivers + +Input: + * Add support for HTTP content range handling according to RFC 9110 + * Fix some HLS Adaptive Streaming not working in audio-only mode + +Video Output: + * Super Resolution scaling with AMD GPUs + * The D3D11 HDR option can also turn on/off HDR for all sources regardless of + the display + * Improve subtitles rendering on Apple platforms of notably Asian languages + by correcting font fallback lookups + +Video Filter: + * New AMD VQ Enhancer filter + * Add D3D11 option to use NVIDIA TrueHDR to generate HDR from SDR sources + +Audio Output: + * Fix regression on macOS causing crashes when using audio devices + with more than 9 channels + +Services Discovery: + * Fix exposed UPnP directory URL schemes to be compliant with RFC 3986 + +Contrib: + * Update FFmpeg to 4.4.4 + * Update dav1d to 1.4.2 + * Update libvpx to 1.14.1 + +libVLC: + * the HWND passed to libvlc_media_player_set_hwnd must have the WS_CLIPCHILDREN + style set. + * Fix crashes when using caopengllayer + +Misc: + * Fix various warnings, leaks and potential crashes + * Fix security integer overflow in MMS module + + +Changes between 3.0.19 and 3.0.20: +---------------------------------- + +Video Output: + * Fix green line in fullscreen in D3D11 video output + * Fix crash with some AMD drivers old versions + * Fix events propagation issue when double-clicking with mouse wheel + +Decoders: + * Fix crash when AV1 hardware decoder fails + +Interface: + * Fix annoying disappearance of the Windows fullscreen controller + +Demuxers: + * Fix potential security issue (OOB Write) on MMS:// by checking user size bounds + + +Changes between 3.0.18 and 3.0.19: +---------------------------------- + +Core: + * Fix next-frame freezing in most scenarios + +Demux: + * Fix FLAC playback quality regression with variable frame size + * Support RIFF INFO tags for Wav files + * Fix AVI files with flipped RAW video planes + * Fix duration on short and small Ogg/Opus files + * Fix some HLS/TS streams with ID3 prefix + * Fix some HLS playlist refresh drift + * Fix for GoPro MAX spatial metadata + * Improve FFmpeg-muxed MP4 chapters handling + * Improve playback for QNap-produced AVI files + * Improve playback of some old RealVideo files + * Fix duration probing on some MP4 with missing information + +Decoders: + * Multiple fixes on AAC handling + * Activate hardware decoding of AV1 on Windows (DxVA) + * Improve AV1 HDR support with software decoding + * Fix some AV1 GBRP streams, AV1 super-resolution streams and monochrome ones + * Fix black screen on poorly edited MP4 files on Android Mediacodec + * Fix rawvid video in NV12 + * Fix several issues on Windows hardware decoding (including "too large resolution in DxVA") + * Improve crunchyroll-produced SSA rendering + +Video Output: + * Super Resolution scaling with nVidia and Intel GPUs + * Fix for an issue when cropping on Direct3D9 + * Multiple fixes for hardware decoding on D3D11 and OpenGL interop + * Fix an issue when playing -90°rotated video + * Fix subtitles rendering blur on recent macOS + +Input: + * Improve SMB compatibility with Windows 11 hosts + +Contribs: + * Update of fluidlite, fixing some MIDI rendering on Windows + * Update of zlib to 1.2.13 (CVE-2022-37434) + * Update of FFmpeg, vpx (CVE-2023-5217), ebml, dav1d, libass + +Misc: + * Improve muxing timestamps in a few formats (reset to 0) + * Fix some rendering issues on Linux with the fullscreen controller + * Fix GOOM visualization + * Fixes for Youtube playback + * Fix some MPRIS inconsistencies that broke some OS widgets on Linux + * Implement MPRIS TrackList signals + * Fix opening files in read-only mode + * Fix password search using the Kwallet backend + * Fix some crashes on macOS when switching application + * Fix 5.1/7.1 output on macOS and tvOS + * Fix several crashes and bugs in the macOS preferences panel + * Improvements on the threading of the MMDevice audio output on Windows + * Fix a potential security issue on the uninstaller DLLs (CVE-2023-46814) + * Fix memory leaks when using the media_list_player libVLC APIs + +Translations: + * Update of most translations + * New translations to Esperanto, Interlingue, Lao, Macedonian, Burmese, Odia, Samoan and Swahili + + +Changes between 3.0.18-rc2 and 3.0.18: +-------------------------------------- + +macOS: + * Fix audio device listing with non-latin names + * Update some translations + +Misc: + * Fix rendering and performance issue with older GPUs + +Contribs: + * Update aom + + +Changes between 3.0.18-rc and 3.0.18-rc2: +----------------------------------------- + +Codec/Demux: + * Add support for Y16 chroma + * Fix build of gme plugin + +Lua: + * Fix script for vocaroo + * Fix script for youtube to allow throttled playback + (Note: Restrictions on youtube still prevent unthrottled playback) + +Service Discovery: + * Fix UPnP regression on Windows + +Video Output: + * Fix video placement with caopengllayer + +Misc: + * Fix password search in kwallet module + +Contribs: + * Update FFmpeg + + +Changes between 3.0.17.4 and 3.0.18-rc: +--------------------------------------- + +Demux: + * Major adaptive streaming update, notably for multiple timelies and webvtt + * Fix seeking with some fragmented MP4 files + * Add support for DVBSub inside MKV + * Fix some Flac files that could not be played + * Improve seeking in Ogg files + +Decoders: + * Fix DxVA/D3D11 crashes on HEVC files with bogus references + * Fix libass storage size and crash + * Fix decoding errors on macOS hw decoding on some HEVC files + +Video Output: + * Fix color regression with VAAPI/iOS and OpenGL output + * Fix some resizing issues with OpenGL on GLX/EGL/X11/XV + * Fix Direct3d9 texture stretching + * Fix 10-bit accelerated video filters on macOS + +Playlist: + * Avoid playlist liveloop on failed/tiny items (temporize EOS bursts) + +Misc: + * Misc fixes for the extension UI on macOS + * Improve SMBv1 and SMBv2 behaviours + * Improve FTP compatibility + * Support RISC-V + * Fix AVI muxing for Windows Media Player compatibility + * Fix seeking speed on macOS + +Contribs: + * update FFmpeg, bluray, upnp, pthread, x265, freetype, libsmb2, aom, dav1d, + libass, libxml2 (contains CVE), dvdread, harfbuzz, zlib, gme, nettle, GnuTLS, + mpg123, speex, bluray, libvpx + + +Changes between 3.0.17.3 and 3.0.17.4: +-------------------------------------- + +Service Discovery: + * Fix UPnP regression on Windows + + +Changes between 3.0.17.2 and 3.0.17.3: +-------------------------------------- + +Demux: + * Fix a regression causing a lack of audio in adaptive streaming + + +Changes between 3.0.17 and 3.0.17.2: +------------------------------------ + +Interface: + * Qt: Fix right click support on video + +Misc: + * Update YouTube script + + +Changes between 3.0.16 and 3.0.17: +---------------------------------- + +Core: + * Fix a regression in parsing secondary source MRLs + * Allow brackets in path part of URLs + +Access: + * Fix support for screen capture on macOS with avcapture + * Fix closing of HTTP 1.x connections + * Improve HTTP2 memory usage + * Improve AVCapture module + * Improve AudioCD support (audio/data mixed mode, musicbrainz) + * Improve SMB compatibility by changing the read size + * Several improvements on the SRT modules (including streamID) + +Decoders/Packetizers: + * Add support for DTS LBR + * Fix some HEVC hardware decoding on Windows and crashes when aspect ratio changes + * Fix hardware decoding for some AMD GPU drivers + * Add support for new Fourcc for E-AC3, AV1, GeoVision + * Fix crashes with VP9 streams + * Fix styling issues with subs tx3g (mp4) tracks + * Fix playback of live AV1 streams + +Audio Output: + * iOS/tvOS: add support for spatial audio + * macOS: fix some channels ordering for > 5.1 channels + * Android: rework audio volume management + +Video Output: + * Fix a D3D11 crash when the stream changes aspect ratio + +Demux: + * Major overhaul of the adaptive streaming stack + * Support for DAV video files + * Add WebP image mapping + * Fix missing audio start of Opus audio in MKV/WebM + * Fix an infinite loop in MP4 + * Fix attachments extractions in ogg files + * Support Uncompressed audio in mp4 (ISO/IEC 23003-5) + * Fix some lip sync issue in rare MPEG-TS streams + +Interface: + * Qt/macOS: Fixup user provided URLs + * Add safe area handling on macOS + * Qt: improve preferences search + * Qt: fix --no-mouse-events option + +Misc: + * Update YouTube script + * Fix Icecast directory parsing which could lead to missing entries + * Improve UPnP compatibility with some servers + +3rd party libraries (contrib): + * Update FFmpeg to 4.4 + * Update libflac to 1.3.4 to fix CVE-2020-0499 and CVE-2021-0561 + * Update libsmb2 to fix invalid UTF-8 encoding of some filenames + * Update taglib to fix corruptions when editing some OGG metadata + * Update dav1d to 0.9.2 + * Update fribidi to 1.0.11 + * Update freetype to 2.11.1 + * Update libass to 0.15.2 + * Drop pthreadGC2 in favor of winpthreads + * Enable Java support for blurays on Apple M1 + * Update libsrt to 1.4.4 + * Update twolame to 0.4.0 + * Update mpg123 to 1.29.3 + * Update libnfs to 5.0.1 + * Update libarchive to 3.6.0 + * Update AOM encoder to 3.1.1 + + +Changes between 3.0.15 and 3.0.16: +---------------------------------- + +Video Output: + * Fix a D3D11 crash on Windows 8/8.1 + +Access: + * Fix RTSP server timeout handling + +Interfaces: + * macOS: Add touchbar support + +Misc + * Multiple settings improvements + + +Changes between 3.0.14 and 3.0.15: +---------------------------------- + +Core: + * Add Opus & Alac wave format mappings + +Access: + * Fix opening DVD folders with non-ascii characters + +Demux: + * Fix asf regression with broadcast streams + * MP4: Fix audio drop on seek + +Video Output: + * Fix seek & volume sliders overlapping with subtitles + * Fix delays when seeking with D3D11 + +Text renderer: + * Improve freetype fonts outlining + +Misc: + * Fix GnuTLS support for Windows XP + + +Changes between 3.0.13 and 3.0.14: +---------------------------------- + +Core: + * Fix double loading of slave input + * Fix an issue causing the auto-updater not to launch the new version + installer + + +Changes between 3.0.12.1 and 3.0.13: +---------------------------------- + +Demux: + * Adaptive: fix artefacts in HLS streams with wrong profiles/levels + * Fix regression on some MP4 files for the audio track + * Fix MPGA and ADTS probing in TS files + * Fix Flac inside AVI files + * Fix VP9/Webm artefacts when seeking + +Codec: + * Support SSA text scaling + * Fix rotation on Android rotation + * Fix WebVTT subtitles that start at 00:00 + +Access: + * Update libnfs to support NFSv4 + * Improve SMB2 integration + * Fix Blu-ray files using Unicode names on Windows + * Disable mcast lookups on Android for RTSP playback + +Video Output: + * Rework the D3D11 rendering wait, to fix choppiness on display + +Interfaces: + * Fix VLC getting stuck on close on X11 (#21875) + * Improve RTL on preferences on macOS + * Add mousewheel horizontal axis control + * Fix crash on exit on macOS + * Fix sizing of the fullscreen controls on macOS + +Windows: + * Fix subtitles/OSD under Windows XP + +Misc: + * Update translations + * Improve MIDI fonts search on Linux + * Update Soundcloud, Youtube, liveleak + * Fix compilation with GCC11 + * Fix input-slave option for subtitles + + +Changes between 3.0.12 and 3.0.12.1: +---------------------------------- + +macOS: + * 3.0.12.1 is the first release for Apple Silicon macs + * Version bump to allow an automatic upgrade path + + +Changes between 3.0.11.1 and 3.0.12: +---------------------------------- + +Access: + * Add new RIST access module compliant with simple profile (VSF_TR-06-1) + +Access Output: + * Add new RIST access output module compliant with simple profile (VSF_TR-06-1) + +Demux: + * Fixed adaptive's handling of resolution settings + * Improve Bluray tracks support + * Improve WMV seeking and DASH support + * Fix crashes in AVI, MKV modules + +Audio output: + * Fix audio distortion on macOS during start of playback + +Video Output: + * Direct3D11: Fix some potential crashes when using video filters + +macOS: + * Add native support for Apple Silicon / ARM-64 + * Visual UI adaptations for macOS Big Sur + * Fix displaying EQ bands in the UI depending on which frequency + presets are set for the EQ in advanced preferences + * Fix UI issues in bookmarks window + +Misc: + * Several fixes in the web interface, including privacy and security + improvements + * Update YouTube and Vocaroo scripts + * Fix rotation filter mouse handling + * Update translations + + +Changes between 3.0.11 and 3.0.11.1: +---------------------------------- + +Demux: + * Fixed HLS playlist update mechanism, unable to start + in some cases. + * Because of broken HLS servers, adaptive no longer + considers Content-Type as authoritative. + * Fixed handling of WEBM WebVTT subtitles + * Workaround invalid ADTS in TS from Makito encoders + * Fixed Opus when using avformat demuxer + +Decoders: + * Fixed inverted explicit start/end positioning + +Service Discovery: + * Fix listing of media on certain Panasonic recorders discovered via UPnP + +macOS: + * Fix automatic playback resume with "Music" app + * Fix possible freeze after pause, seek, unpause + +Contribs: + * Updated gnutls to 3.6.14 + * Updated libebml to 1.4.0 + * Updated libmatroska to 1.6.0 + * Updated mpg123 to 1.26.2 + + +Changes between 3.0.10 and 3.0.11: +---------------------------------- + +Access: + * rtp descriptor leak on error fix + +Demux: + * Fixed regression with some encrypted HLS streams + * Live HLS delay until first update fix + * HLS rendition switch regression fix + * Fix imprecise m4a seek + +Decoder: + * Fixed missing captions with some capture cards + +Audio filters: + * soxr resampling fixes + +Contribs: + * Updated libfaad to 2.9.2 (Parametric Stereo regression) + * Updated libarchive to 3.4.2 + +macOS: + * Fixed moving video window with mouse + * Fixed UI issue showing "permissions warning" unnecessarily often + * Fixed stack buffer overflow listing bluray mount points + * Fixed potential crashes at startup + +Audio Output: + * Fix sound not coming back after a pause with CoreAudio (macOS/iOS) + +Misc: + * Update Youtube script + + +Changes between 3.0.9.2 and 3.0.10: +---------------------------------- + +Misc: + * Update Twitch & VLSub scripts + + +Changes between 3.0.9.1 and 3.0.9.2: +---------------------------------- + +Misc: + * Properly bump the version in configure.ac + + +Changes between 3.0.9 and 3.0.9.1: +---------------------------------- + +Misc: + * Fix VLSub returning 401 for earch request + + +Changes between 3.0.8 and 3.0.9: +---------------------------------- + +Core: + * Work around busy looping when playing an invalid item through VLM + +Access: + * Multiple dvdread and dvdnav crashs fixes + * Fixed DVD glitches on clip change + * Fixed dvdread commands/data sequence inversion in some cases causing + unwanted glitches + * Better handling of authored as corrupted DVD + * Added libsmb2 support for SMB2/3 shares + +Demux: + * Fix TTML entities not passed to decoder + * Fixed some WebVTT styling tags being not applied + * Misc raw H264/HEVC frame rate fixes + * Fix adaptive regression on TS format change (mostly HLS) + * Fixed MP4 regression with twos/sowt PCM audio + * Fixed some MP4 raw quicktime and ms-PCM audio + * Fixed MP4 interlacing handling + * Multiple adaptive stack (DASH/HLS/Smooth) fixes + * Enabled Live seeking for HLS + * Fixed seeking in some cases for HLS + * Improved Live playback for Smooth and DASH + * Fixed adaptive unwanted end of stream in some cases + * Faster adaptive start and new buffering control options + +Packetizers: + * Fixes H264/HEVC incomplete draining in some cases + * packetizer_helper: Fix potential trailing junk on last packet + * Added missing drain in packetizers that was causing missing + last frame or audio + * Improved check to prevent fLAC synchronization drops + +Decoder: + * avcodec: revector video decoder to fix incomplete drain + * spudec: implemented palette updates, fixing missing subtitles + on some DVD + * Fixed WebVTT CSS styling not being applied on Windows/macOS + * Fixed Hebrew teletext pages support in zvbi + * Fixed Dav1d aborting decoding on corrupted picture + * Extract and display of all CEA708 subtitles + * Update libfaad to 2.9.1 + * Add DXVA support for VP9 Profile 2 (10 bits) + * Mediacodec aspect ratio with Amazon devices + +Audio output: + * Added support for iOS audiounit audio above 48KHz + * Added support for amem audio up to 384KHz + +Video output: + * Fix for opengl glitches in some drivers + * Fix GMA950 opengl support on macOS + * YUV to RGB StretchRect fixes with NVIDIA drivers + * Use libpacebo new tone mapping desaturation algorithm + +Text renderer: + * Fix crashes on macOS with SSA/ASS subtitles containing emoji + * Fixed unwanted growing background in Freetype rendering and Y padding + +Mux: + * Fixed some YUV mappings + +macOS: + * Use a layer based video output on 10.14 and higher, which should + fix various rendering issues where the vout would glitch between + a wrong size and the correct size. + Additionally this works around OpenGL issues with Macs that have a + dedicated NVIDIA GPU, which caused rendering artifacts in the whole + OS, especially when the "Reduce transparency" accessibility option + is used + * Remove qtsound module and add avaudiocapture module as replacement + * Fix audio capture on macOS Catalina by using avaudiocapture + * Inform the user in case OS permissions are missing for certain actions + * Fix Apple Remote support on macOS Catalina + * Add support for pausing Apple Music on macOS Catalina + * Fix UPnP discovery crash without an active network interface + * Fix rare placement issues with fullscreen panel + * Fix problem in audio output remembering the last device configuration + in digital mode + +Service Discovery: + * Update libmicrodns to 0.1.2 + +Misc: + * Update YouTube, SoundCloud and Vocaroo scripts: this restores + playback of YouTube URLs. + * Add missing .wpl & .zpl file associations on Windows + * Improved chromecast audio quality + + +Changes between 3.0.7.1 and 3.0.8: +---------------------------------- + +Core: + * Fix stuttering for low framerate videos + +Demux: + * Fix channel ordering in some MP4 files + * Fix glitches in TS over HLS + * Add real probing of HLS streams + * Fix HLS MIME type fallback + +Decoder: + * Fix WebVTT subtitles rendering + +Stream filter: + * Improve network buffering + +Misc: + * Update Youtube script + +Audio Output: + * macOS/iOS: Fix stuttering or blank audio when starting or seeking when using + external audio devices (bluetooth for example) + * macOS: Fix AV synchronization when using external audio devices + +Video Output: + * Direct3D11: Fix hardware acceleration for some AMD drivers + +Stream output: + * Fix transcoding when the decoder does not set the chroma + +Security: + * Fix a buffer overflow in the MKV demuxer (CVE-2019-14970) + * Fix a read buffer overflow in the avcodec decoder (CVE-2019-13962) + * Fix a read buffer overflow in the FAAD decoder + * Fix a read buffer overflow in the OGG demuxer (CVE-2019-14437, CVE-2019-14438) + * Fix a read buffer overflow in the ASF demuxer (CVE-2019-14776) + * Fix a use after free in the MKV demuxer (CVE-2019-14777, CVE-2019-14778) + * Fix a use after free in the ASF demuxer (CVE-2019-14533) + * Fix a couple of integer underflows in the MP4 demuxer (CVE-2019-13602) + * Fix a null dereference in the dvdnav demuxer + * Fix a null dereference in the ASF demuxer (CVE-2019-14534) + * Fix a null dereference in the AVI demuxer + * Fix a division by zero in the CAF demuxer (CVE-2019-14498) + * Fix a division by zero in the ASF demuxer (CVE-2019-14535) + +Contribs: + * Update to a newer libmodplug version (0.8.9.0) + + +Changes between 3.0.7 and 3.0.7.1: +---------------------------------- + +Access: + * Update libbluray to 1.1.2 + +macOS: + * Fix bluray java menu playback regression in 3.0.7 + +Video Output: + * Fix hardware acceleration with some AMD drivers + * Improve direct3d11 HDR support + + +Changes between 3.0.6 and 3.0.7: +-------------------------------- + +Access: + * Improve Blu-ray support + * Fix sftp module build with libssh >= 1.8.1 + +Audio output: + * Fix pass-through on Android-23 + * Fix DirectSound drain + +Demux: + * Improve MP4 support + +Video Output: + * Fix 12 bits sources playback with Direct3D11 + * Fix crash on iOS + * Fix midstream aspect-ratio changes when Windows hardware decoding is on + * Fix HLG display with Direct3D11 + +Stream Output: + * Improve Chromecast support with new ChromeCast apps + +macOS: + * Fix UPNP service discovery, services are discovered on the highest priority + active network interface now + * Fix video distortion on macOS Mojave + +Misc: + * Update Youtube, Dailymotion, Vimeo, Soundcloud scripts + * Work around busy looping when playing an invalid item with loop enabled + +Translations: + * Update of most translations + +Security: + * Fix multiple buffer overflows in the ps demuxer + * Fix a buffer overflow when copying a biplanar YUV image + * Fix multiple buffer overflows in the faad decoder + * Fix buffer overflow in the svcdsub decoder + * Fix buffer overflows in the ogg muxer & demuxer + * Fix buffer overflows in libavformat demuxer + * Fix multiple buffer overflows in the MKV demuxer + * Fix a buffer overflow in the MP4 demuxer + * Fix a buffer overflow in the textst decoder + * Fix a buffer overflow in the webvtt decoder + * Fix a buffer overflow in the ASF demux + * Fix a buffer overflow in the UPNP SD + * Fix use after free in the ogg demuxer + * Fix multiple use after free in the MKV demuxer + * Fix multiple use after free in the DMO decoder + * Fix integer underflow in the MKV demuxer + * Fix an updater NULL pointer dereference on invalid signing keys + * Fix NULL pointer dereference in the MKV demuxer + * Fix an integer overflow in the spudec decoder + * Fix an integer overflow in the nsc demuxer + * Fix an integer overflow in the avi demuxer + * Fix reads of uninitialized pointers in the MKV demuxer + * Fix a floating point exception in the MKV demuxer + * Fix an infinite loop in the flac packetizer + + +Changes between 3.0.5 and 3.0.6: +-------------------------------- + +Core: + * Fix potential subtitle picture allocation failures + +Codec: + * Add support for 12 bits decoding of AV1 + * Fix HDR support in AV1 when the container provides the metadata + + +Changes between 3.0.4 and 3.0.5: +-------------------------------- + +Access: + * Improve RTSP playback + * BluRay fixes and improvements, notably for menus and seeking + * Improve the UDP/RTP truncated issue + +Codec: + * Add a new AV1 decoder based on dav1d library + * Enable libaom decoder by default + * Fix decoding of some HEVC streams with macOS hardware decoding + +Demux: + * MP4: Fix reading of some HDR metadata + * Miscellaneous AV1 demuxing improvements + * Fix CAF integer-underflow + * Fix an MKV crash on iOS 12.0, on iPhone XS phones + +Packetizer: + * Add an AV1 packetizer + +macOS: + * Starting with VLC 3.0.5, VLC will be distributed with runtime hardening + enabled on macOS Mojave. + All external VLC plugins need to be signed by a DeveloperID certificate in order + to continue working with the official VLC package. + * Update the VLC dark UI to better match the dark mode of macOS Mojave + * Fix convert & save panel stream option + +Audio output: + * Fix corking when the playback state is paused + * Improve corking on Android + +Video Output: + * Fix Direct3D11 tone-mapping when HDR is displayed on an SDR screen + * More accurate colors for SD sources in Direct3D11 + * Disable hardware decoding on some old Intel GPUs + * Fix zero-copy GPU acceleration on AMD RX Vega + * Misc Direct3D11 fixes + +Miscellaneaous: + * Improve ChromeCast + * Update numerous 3rd party libraries, including for minor security issues + * Update Youtube support + * Fix subtitles rendering with specific fonts with negative horizontal advance + + +Changes between 3.0.3 and 3.0.4: +-------------------------------- + +Decoder: + * Blacklist some intel GPU when decoding HEVC + * Decode AV1 streams + * Fix playback of low-fps files + * Fix hardware decoding of low-latency sliced H.264 streams on macOS + * Fix seeking with streams containing WebVTT subtitles + * Fix decoding some CC-608 streams with roll-up + * Fix crashes with LPCM streams + * Fix colorspace of JPEG, PNG and screen inputs + * Fix MediaCodec rotation handling + +Demux: + * Improve FLV fps detection + * Fix some ogg/flac + * Improve support for broken HEVC inside MKV + * Fix some AVI regression for broken files and for DVAudio + * Support files splitted in the .mts%d pattern + * Fixes for MKV seeking + * Fix for MP4 disabled track selection + * Fix playback of incomplete RAR files (downloading) + +Audio Output: + * Improve iOS session management and resume-from-pause + * Improve macOS audio performance + * Support 44.1kHz DTS passthrough + * Fix crashes on DirectSound output + +Video Output: + * Fix some crash in Direct3D11/Direct3D9 because of sensors + * Fix some broken DVD subtitles rendering (OpenGL, notably) + * Fix crashes on old mac machines, after some time + * Fix memleaks on the EGL output (Android notably) + * Fix misc display in Direct3D11 due to broken drivers + * Fix potential green screen on Windows XP + +Text renderer: + * Fix rendering of arabic fonts fallback on macOS + * Fix head buffer overflow on macOS with some fonts + * Fix rendering of fonts with specific fonts + * Fix some RTL rendering + +Misc: + * Fix live555, macOS-UI, screen capture crashes + * Change the extension registration names on Windows + * Fix VLM 'now' date + * Fixes on the HTTPD server + * Fix on the NTservice registration + * Fix --stop-time option + * Fix ChromeCast compatibility with web interface + * Fix subtitles alignment + * Fix infinite recursion on directory playback + * Fix detection SAT>IP servers + +Qt: + * Fix tooltip display when using Wayland + +macOS: + * macOS 10.7.5 is required now, VLC will no longer launch on earlier releases + * Fix delay and fps setting in subtitle dialog + * Modernized and improved support for media keys + * Fix issues with drag and drop of playlist items + * Fix support for audio capturing with qtsound module + * Fix layout issues in the Convert and Save panel + +Translations: + * Update of most translations + + +Changes between 3.0.2 and 3.0.3: +-------------------------------- + +Core: + * Update subtitles display while paused + +Access: + * Enable srt support on binary builds + +Decoders: + * Allow videotoolbox hardware decoding to be disabled + * Disable VideoToolbox for 10bits H.264 + * Fix VideoToolbox with some invalid HEVC streams + * Fix subsdec wide character support + * Fix 1st order Ambisonics in AAC + +Demux: + * Miscellaneous ogg improvements & bugfixes, including oggds + * Fix forced tracks selection + * Fix Topfield files + * Probe AAC/ADTS inside TS + * Fix tracks detection issues with DolbyVision and Bluray streams + +macOS: + * Fix "Open Network Stream" URL box focus + * Add option to disable hardware acceleration for video decoding + * Remove option to force dolby mode from simple preferences + +Video Output: + * Fix crashes on Direct3D11 + +Qt: + * Fix tooltip display on some desktop environments + * Fix spurious movement of the main Window + * Fix playlist being displayed in fullscreen + +Misc: + * Fix amem output + * Fix numerous issues on fonts fallback and font shaping + * Fix subtitles toggle through hotkeys + * Fix audioscrobbling + * Fix buffer over-read in avcodec audio encoding with non-default layouts + * Numerous 3rd party libraries updated, fixing security issues + +Translations: + * Update of most languages + + +Changes between 3.0.1 and 3.0.2: +-------------------------------- + +Core: + * Fix snapshotting with subtitles when using hardware acceleration + * Fix green/missing line/column when the picture dimensions are odd + +Decoders: + * Important improvements in hardware decoding for macOS, notably faster, + supporting more samples and removing crashes/deadlocks + * Improve compatibility for DxVA2 and D3D11 decoding, fix crashes when seeking + and fix blacklisting of broken drivers + * Fix SSA subtitles forced alignment + * Fix E-AC-3 stuttering + * Fix MIDI playback on macOS + * Add playback support for ProRes 4444 XQ + +Demux: + * Fix wrong colors in some AVI files + * Fix IFO files playback to start DVDs + * Fix a crash with missing/invalid MPEG SDT + * Update VP8/9/10 ISOBMFF bindings and improve HDR for those cases + * Fix TTML inside MP4 + * Improve MP4 read of color information + * Fix flac seeking and improve flac parsing + * Improve mkv opening & seeking speed + * Fix display of chapters with no name defined + * Miscellaneous MKV crash fixes + * Fix crash with multi-region DVDs + * Fix audio being muted on DVD chapter change + * Fix audio being muted when seeking in a BluRay disc + +Access: + * Avoid a crash/assert in FTP after seeking + +Audio output: + * Fix mmdevice default audio device handling + * Fix "reset audio volume" being forcefully deactivated + * Allow a default device to be used by VLC + * Only warn once about misconfiguration for AUhal devices on macOS + * Improve resampling and latency computation for CoreAudio + * Passthrough is now disabled by default + +Audio filters: + * Fix audio stutter after unpausing with headphones + * Fix silence when dolby-surround was mis-selected in preferences + +Video output: + * Fix OpenGL crashes or bad display with semi-planar chromas + * Fix OpenGL interop (zero-copy) disabled for tvOS + * Major rewrite of the iOS video output to fix numerous crashes + * Important improvements of the D3D11 video output to use less memory + and less GPU for HDR tone-mapping + * Fix crop on vertical videos with Direct3D11 + * Fix Direct3D9 filters settings not being applied properly + * Fix transform filters with hardware decoding + * Fix snapshot and filters with HEVC hardware decoding + * Fix a buffer overrun during GPU/CPU image copy + * Fix glitches on DVD menus with Direct3D11 + * Fix non-HDR content playback on HDR screens with Direct3D11 + * Fix YUV full range displayed incorrectly in Direct3D11 + * Fix miscellaneous crashes in Direct3D11 + * Fix potential black screen with 10bits videos on Direct3D11 + +macOS: + * Fix Growl notifications on recent macOS versions + * Fix conversion output file name encoding + * Fix crash reporting on macOS 10.7 and 10.8 + * Fix crash on exit + * Fix remember playback position + * Fix Blu-ray disc Java menu + * Fix swiping on time slider to change position + * Fix problems with restoring user name from keychain + * Fix localization issues + +Qt: + * Fix last folder used in open dialogs + * Allow to customize the seek jump when using the mousewheel + * Fix fullscreen controller positionment on multiscreen setups + * Fix pasted URLs not being trimmed + * Fix jump size not being configurable + * Fix missing time labels updates + * Fix playback speed slider not accepting 1.0x value + * Fix raw input dump + * Fix window size after a fullscreen playback + +Misc: + * Fix lua rc & oldrc interfaces host specification + * Fix crashes when searching for renderers + * Relocate localedir for Linux (improves snap i18n support) + * Fix VDPAU GLX usage on Linux + * Improve support for NetBSD + * Fix MSI script for Windows + * Fix libvlc_media_list not going to next media + * Fix character encoding on win32 consoles + * Miscellaneous chromecast improvements + * Fix missing OSD navigation feedback + * Various VLSub improvements + * lua: Fix scripts not being loaded on some filesystems + * lua: Add vlc.io APIs to handle UTF-8 paths + + +Changes between 3.0.0 and 3.0.1: +-------------------------------- + +Core: + * Fix use-after-free when cleaning playlists + * Fix crash on exit on Windows + +Video output: + * Fix HLG tone mapping on some systems like macOS. + * Fix screensaver inhibition on Windows XP + * Fix various Direct3D11 crashes + * Fix HDR tone mapping in Direct3d11 + * Fix pink screen on Windows + +Decoder: + * Fix potential stack buffer overflow with faad + * Enable Cineform HD in avcodec + +Hardware Decoder: + * macOS: Improve HEVC 10bit performance with Videotoolbox + * android: Add MPEG2 support via MediaCodec + * Fix HEVC decoding with some files on Android/macOS/iOS + * Improve Direct3D11 memory usage + +Demux: + * Improve MKV seeking speed + * Fix xspf base URL handling + * Fix reading mp4 trun with moof based offsets + * Fix adaptive http redirections + * Replace old API, fixing adaptive TLS leak + * Use mime type as fallback for HLS segment type + * Fix subtitle (srt,ssa..) seek when having a single entry + * Flag non default HDMV subset video streams + * Increase TS probing amount for 4K streams + * Miscellaneous MKV, MP4 & AVI crash fixes + +Packetizer: + * Fix out of bounds read in mpeg4video + +Stream Output: + * Improve chromecast loading speed + * Improve local/chromecast transition during playback + * Fix chromecast loading with some versions of Windows + * Fix chromecast loading with some chromecast devices (TVs and Android boxes) + * Fix wrong first cover art when casting + * Fix casting to VP9 + +macOS Interface: + * Re-add option to disable the fullscreen controller panel + * Auto-layout improvements + * Remove misleading playback warning indicator + * Fix crash with the interface for lua extensions (like VLSub) + * Fix show sidebar setting being ignored on restart + * Fix MKV files association + * Fix chromecast audio detection + +Qt Interface: + * Improve scaling on HiDPI displays + +Snap: + * Improve interface look and feel. + + +Changes between 2.2.8 and 3.0.0: +-------------------------------- + +Platform support changes: + * 3.0.x will be maintained as a LTS (best-effort basis, mostly for security) + that will be the last working version for quite a few systems. + + Indeed the 3.0.x branch will contain the last releases running on: + - Windows XP, Vista, and the servers equivalent of those Windows versions + - macOS 10.7, 10.8 & 10.9, iOS 7 & 8 + - Android 2.x, 3.x, 4.0.x & 4.1.x + - Compilers before gcc 5.0 and clang 3.4, or equivalent + + * For the 3.0 branch, please note: + * The Windows XP/2003/2003R2 support for VLC is now on a best-effort basis: + it should work, but not without limitations. + libVLC support for Windows XP is deprecated. + You _really_ should upgrade to a more modern Windows version! + * Windows Vista (all versions) without Platform Upgrade is not supported. + * 64bit version of VLC for Windows is recommended. + * Linux support requires now a kernel newer than 2.6.26. + * Mac OS X 10.6 support is now removed. You need OS X 10.7. + +Core: + * Support network browsing for distant filesystems (SMB, FTP, SFTP, NFS...) + and rewrite the parsing of the media files and inputs + * Support keystores: fetch and store passwords securely (sic!) for common + protocols (HTTP, SMB, SFTP, FTP, RTSP ...) + * Autodetect external audio tracks (ac3, m4a, aac, dts...) similar to subtitles + * Support HDMI passthrough for Audio HD codecs, like E-AC3, TrueHD or DTS-HD + * Support for 12bits codec and extended colorspaces (HDR) + * Support output renderers, like ChromeCast + * VLC now assumes vlcrc config file is in UTF-8 + * Support portable version of Windows build (create a "portable/" folder) + * Support wayland surface type + * Allow to start the video paused on the first frame + * Refactor preparsing input + * EPG rework: table and single event updates, now using network time + * Refactor and fix subtitles es selection. Demuxers can now override + es category single only or multiple es behavior + * Support for 360 video and audio, including viewpoint modification + * Support for ambisonic audio and more than 8 audio channels + * Support subtitles size live adjustments + +Access: + * Enable SMB2 / SMB3 support on mobile ports with libsmb2 + * New NFS access module using libnfs + * New SMB access module using libdsm + * Adaptive streaming: + * Rewrite MPEG-DASH (Dynamic Adaptive Streaming over HTTP) support, including + MPEG2TS and ISOBMFF profiles + * Support HDS (Http Dynamic Streaming) from Adobe (f4m, f4v, etc.) + * Large rework of the Smooth Streaming module + * Replaced httplive stream filter with new HLS demuxer, replaced smooth + stream filter with new Smooth demuxer, both using unified adaptive module + * Support HLSv4-7, including MP4 and raw muxing and ID3 tags + * Support decompression and extraction through libarchive (tar, zip, rar...) + * New HTTP/TLS access module for HTTP 2.0 support + * Improvements of cookie handling (share cookies between playlist items, + domain / path matching, Secure cookies) + * Support DVB-T2 on Windows BDA + * Support depayloading Opus from RTP + * New UPnP access module, to list directories without infinite recursions + * SMB/FTP/SFTP accesses can list directories + * Support sftp username and passwords options in URL, and key authentication + * New WASAPI audio capture module on Windows + * New "concat" access module for concatenating byte streams + * Named pipes and device nodes are no longer included in directory listings + by default. Use --list-special-files to include them back. + * Support for timeout in UDP input --udp-timeout= + * New SAT>IP access module, to receive DVB-S via IP networks + * Improvements on DVB scanning + * BluRay module can open ISO over network and has full BD-J support + * Support for DVD ISO over network + * New SRT access module using libsrt + +Hardware Decoder: + * Support HEVC hardware decoding on Windows, using DxVA2 and D3D11 + * Support hardware decoding using Direct3D11, including GPU-zerocopy mode, + and hardware filtering, for deinterlace and adjust + * DxVA2 GPU-zerocopy for hardware decoding and displaying on Windows, + and support for hardware filtering, for deinterlace and adjust + * Support HEVC hardware decoding using OMX and MediaCodec (Android) + * Use MediaCodec via NDK native API after Android Lollipop + * Support MPEG-2, VC1/WMV3 on Android using MediaCodec + * OMX GPU-zerocopy support for decoding and display on Android using OpenMax IL + * Support 4:4:4 and 4:2:2 chroma samplings with VDPAU hw acceleration + * Important VAAPI improvements for 10bits, HEVC, direct-rendering support + * Support VP9 and WMV3 decoding using OMX and performance improvements + * Important improvements for the MMAL decoder and output for rPI and rPI2 + * New hardware accelerated decoder for OS X and and iOS based on Video Toolbox + supporting H.263, H.264/MPEG-4 AVC, H.265/HEVC, MPEG-4 Part 2, and DV + +Decoders: + * Support for experimental AV1 video + * Support for ARIB STD-B24 subtitles + * Support for experimental Daala video + * New MPEG-1 & 2 audio layer I, II, III + MPEG 2.5 decoder based on libmpg123 + * New BPG decoder based on libbpg + * Fix uncompressed DVD-Audio (AOB) LPCM decoding + * Rewrite WPL playlists and add ZPL playlists support (Zune) + * Support TDSC, Canopus HQX, Cineform, SpeedHQ, Pixlet, QDMC and FMVC codecs + * TTML subtitles support, including EBU-TT-D variant + * Rewrite of webVTT subtitles support, including CSS style support + * Support 9-bit and 10-bit GBR planar formats + * Support for the OggSpots video codec + * HEVC packetization is mostly fixed + * H264 packetizer can now generate timestamps + * Packetizers have support for captions in SEI + * DTS packetizer handle DTS extensions (like DTS-HD): decoders like avcodec + can now decode up to 8 channels + * JPEG images correctly oriented using embedded orientation tag, if present + * Support VPX high bit depth support + * Extend MicroDVD support with color, fontname, size, position extensions + * BluRay text subtitles (HDMV) are now decoded + * Improve Closed Captions detection, notably inside the video streams + * CEA-708 decoder + * New MIDI decoder for macOS and iOS using the AudioToolbox framework, works + without a soundfont or with SoundFont2 and DLS soundfonts + +Demuxers: + * Important rework of the MP4 demuxer, including: + * Support for fragmented MP4 + * Support EIA-608/708 subtitles in MP4/mov + * Support WMV and WMAV in MP4/mov, aka Flip4Mac files + * Support bitmap audio channel reordering in MP4/mov + * Support for RTP Reception Hint Track with H.264, GSM and Speex payloads + * Support for XiphQT(MP4) vorbis and Flac + * Support for VP8/VP9/VP10/AV1 in MP4 + * Support GoPro HiLight chapters + * Support for TTML and WebVTT in ISOBMFF/MP4 and DASH + * Add new metadata fields + * Important rework of the TS demuxer, including: + * Support Opus in MPEG Transport Stream + * Fix program selection with recorded TS (TopField, DreamBox and others) + * Fix TS playback with PAT/PMT less recordings + * Basic support for MPEG4-SL in TS and T-DMB + * Support SCTE-18 / EAS inside TS + * Support for new descriptors and ETT tables + * Support for ARIB channel logos, as attachements, ARIB TR-B21/TR-B14-1 + * Improve broken-PCR probing and fixing + * Improvements for scrambled state detection + * Support HD-DVD .evo (H.264, VC-1, MPEG-2, PCM, AC-3, E-AC3, MLP, DTS) + * Important rework of the PS demuxer, including: + * HEVC support + * Fix large number of samples, notably with PSM-less H264 + * Partial support of PSMF + * Fix broken SCR samples + * Fix CDXA mpeg-1 support + * Improvements on MKV: + * Rewrite MKV seeking + * Support FFv1 inside MKV + * Improve ADTS and LATM inside MKV + * Improve DVD-menus support + * Support for lame's replaygain extension in mpeg files + * Support Daala in Ogg + * Improve Chained-Ogg support + * Fixes for DTS detection in WAV and MKV files + * Support for Creative ADPCM/alaw/ulaw/S16L in VOC files + * Support for Creative ADPCM in AVI + * Support WMV extended content metadata + * Directory Demux can now sort items, ignore extensions and hidden files + * Support AlbumArtist and DiscNumber metadata + * Support raw H265/HEVC files + * Support multi-channel WAV without channel-maps + * Support SBV subtitles + * Support for Scenarist Closed Caption + * Fix Quicktime Mp4 inside MKV and unpacketized VC1 + * Support for isofLaC + * Improve fLaC seeking + * Replace --demux dvb-open option with --stream-filter dvb to parse + channels.conf digital TV channel list files + +Stream filter: + * Add an ADF stream filter + * Add a ARIB STD-B25 TS streams decoder + * Add a stream prebuffering plugin + * Rewrite libarchive module as a stream_extractor + * Remove HTTP Live streaming stream filter + * Add a zlib (a.k.a. deflate) decompression filter + * Add a skiptags module to help demuxers skip ID3/APE tags + +Demux filter: + * Add a demuxer filter chain to filter or intercept control commands and demuxing + * Add a demuxer filter to block seeking (--demux-filter noseek) + +Audio output: + * Complete rewrite of the AudioTrack Android module, it is now the default + module for Android. It now supports HDMI/SPDIF passthrough for AC3/DTS/EAC3, + 5.1/7.1 channels and float output, depending on the Android version. + * Add Tizen audio module + * HDMI/SPDIF pass-through support for WASAPI (AC3/DTS/DTSHD/EAC3/TRUEHD) + * Support EAC3 and TRUEHD pass-through for PulseAudio + * Important rework of the AudioUnit modules to share more code between iOS and macOS + * Support Ambisonics audio with viewpoint changes + +Audio filters: + * Add SoX Resampler library audio filter module (converter and resampler) + * a52tospdif and dtstospdif audio converters are merged into tospdif, + this new converter can convert AC3, DTS, EAC3 and TRUEHD to a IEC61937 frame + * Add a Spatialaudio module with 2 submodules: + * an Ambisonics audio renderer, supporting up to 3rd order + * an Binauralizer audio filter, working with Ambisonics or 5.1/7.1 streams + * Add Headphones option in Stereo Mode: use the spatialaudio module for + headphones effects + * Add a pitch shifting module + +Video output: + * Linux/BSD default video output is now OpenGL, instead of Xvideo + * OpenGL: + * New OpenGL provider for Windows + * Drop OpenGL 1.x and OpenGL ES 1 support + * Direct rendering with OpenGL (starting OpenGL 4.4) + * Hardware direct displaying with VA-API interop + * Hardware direct displaying with VDPAU interop + * Hardware direct displaying with DxVA2/D3D9Ex interop + * Hardware direct displaying with VideoToolbox interop (iOS and macOS) + * HDR tonemapping support through libplacebo + * Wayland shell surface window provider + * Wayland shared memory video output + * Large rework of the Android video outputs: there is now Surface (2.1, 2.2) + NativeWindow (2.3+, supports hw rotation, subpicture blending, opaque) + * Support rotation in Android NativeWindow output and hardware decoders + * Rename the Direct3D output module to Direct3D9 + * Add a Direct3D11 video output supporting both Windows desktop and WinRT modes, + supporting subpicture blending and hardware acceleration + * Support HDR10 in Direct3D11 with Windows 10 Fall Creator Update + * EFL Evas video output with Tizen TBM Surface support + +Video filter: + * Hardware deinterlacing on the rPI, using MMAL + * New video filter to convert between fps rates + * Add 9-bit and 10-bit support to image adjust filter + * New edge detection filter uses the Sobel operator to detect edges + * Hardware accelerated deinterlacing/adjust/sharpen/chroma with VA-API + * Hardware accelerated adjust/invert/posterize/sepia/sharpen with CoreImage + * Hardware accelerated deinterlacing/adjust/chroma with D3D9 and D3D11 + +Text renderer: + * CTL support through Harfbuzz in the Freetype module + * New font fallback algorithm on most platforms + * More conforming EIA608 captions layout and aspect ratio + * More styles support for TTML, WebVTT and 708 + +Stream Output: + * Chromecast output module + * RGB24 and YCbCr 4:2:0 RTP packetization + +Encoder: + * Support for Daala video in 4:2:0 and 4:4:4 + * VP8 and VP9 encoder using libvpx + +Muxers: + * Add fragmented/streamable MP4 muxer + * Add support for muxing VC1 and WMAPro in MP4 + * Opus in MPEG Transport Stream + * Daala in Ogg + +Service Discovery: + * New NetBios service discovery using libdsm + * New mDNS services discovery using libmicrodns + * New mDNS services discovery using Bonjour (Mac OS X, tvOS, iOS) + * Rewrite of the UPnP service discovery + +Mac OS X Interface + * Drop support for Mac OS X 10.6 Snow Leopard + * Support right-to-left user interface layout for right-to-left languages + * New resizable fullscreen controller with improved design + * Add status bar icon which displays metadata and play controls + * Add support for keyboard blacklight dimming during fullscreen video playback + * Improve and simplify preferences window + * Huge performance improvements in playlist handling and other areas + * New AppleScript API giving access to audio desynchronization + * Expand AppleScript API for menu detection and navigation + * Support for building with disabled sparkle update mechanism + * Remove deprecated transcoding wizard, use convert and save dialog instead + +iOS: + * Drop support for iOS 6.x + +Qt interface: + * Batch convert support + * It is now possible to specify 'stop-time' in Convert/Save dialog + +Skins2: + * Support key accelerators + +libVLC: + * Add libvlc_media_new_callbacks for custom input byte streams + * Add libvlc_audio_output_device_enum to enumerate devices of current aout + * Split of libvlc_media_discoverer_new_from_name into libvlc_media_discoverer_new, + libvlc_media_discoverer_start and libvlc_media_discoverer_stop + This allows to attach media events between create and start + * Add libvlc_media_get_codec_description to get a human readable description of a codec + * Add libvlc_MediaListEndReached Event to get notified when a media list reached the end + * Add libvlc_media_list_player_get_media_player to get the media player instance of a list player + * Add libvlc_media_parse_with_options that uses a flag to specify parse options + * Add libvlc_audio_output_device_get to get the currently selected audio output device + identifier (if there is one available) + * Add libvlc_media_get_type to get the type of the media + * Add libvlc_media_player_get_full_title_descriptions to get full title info of the media + and +libvlc_title_descriptions_release to match it + * Add libvlc_media_player_get_full_chapter_descriptions to get full chapter info of the media + and libvlc_chapter_descriptions_release to match it + * Deprecate libvlc_video_get_title_description, libvlc_video_get_chapter_description, + libvlc_media_player_get_agl, libvlc_media_player_set_agl + * Add libvlc_media_player_set_android_context to integrate in an Android surface + * Add a new libvlc dialog API to forward dialogs requests to the applications: + libvlc_dialog_set_context, libvlc_dialog_get_context, libvlc_dialog_set_callbacks, + libvlc_dialog_dismiss, libvlc_dialog_post_action, libvlc_dialog_post_login + * Add libvlc_media_discoverer_list_get|release to list the media discoverers + * Add libvlc_media_slaves_add, libvlc_media_slaves_clear + libvlc_media_slaves_get, libvlc_media_slaves_release to add and get slaves + from a libvlc_media + * Add libvlc_media_player_(get|set)_role to set the media role + * Add libvlc_media_player_add_slave to replace libvlc_video_set_subtitle_file, + working with MRL and supporting also audio slaves + * Add vlc_epg_event_(New|Delete|Duplicate), vlc_epg_AddEvent, vlc_epg_Duplicate + and removes vlc_epg_Merge + +Logging + * Support for the SystemD Journal + * Use --syslog and --syslog-debug command line options to include debug + messages in syslog. With --syslog, errors and warnings will be sent only. + * New Android module for logging + +Misc + * remove langfromtelx + * remove ZPL playlist format + * Update libVLC doxygen modules + * Add a text-to-speech renderer for subtitles on OS X/iOS + * Add a text-to-speech renderer for subtitles on Windows + * Add Gnome libsecret-based crypto keystore + * Add KDE Kwallet-based crypto keystore + * Add a memory keystore + * Add a file keystore that can use a submodule to crypt secrets + * Add Keychain based crypto keystore for iOS, Mac OS X and tvOS + +Removed modules + * Atmo video filter + * QTCapture access module (use AVCapture instead) + * httplive (use adaptive instead) + * smooth (use adaptive instead) + * Gnome-VFS access module (i.e. Gnome 2.x) + * QuartzText text renderer module (use Freetype instead) + * Win32 GDI text renderer module (use Freetype instead) + * Growl notification (replaced by osx_notifications) + * VCDX "extended" Video CD access module (use the normal VCD module) + * Mac OS X Dialog Provider (use VLCKit instead) + * iOS Dialog Provider (use MobileVLCKit / TVVLCKit instead) + * QuickTime decoder module (use native codecs) + * BD access module (use libbluray) + * Direct2D module (use Direct3D11) + * EyeTV access module + * Rar access and stream filter: use libarchive + * VDA decoder: use VT + * Audioqueue: use audiounit + * SDL video output module + * DirectFB video output module + * RAOP stream output module + + +Changes between 2.2.7 and 2.2.8: +-------------------------------- + +Demuxers: + * Fix AVI invalid pointer dereferences + +Translations updates + + +Changes between 2.2.6 and 2.2.7: +-------------------------------- + +Decoders: + * Fix flac heap write overflow on format change + * Fix crash in libavcodec module (heap write out-of band) (CVE-2017-10699) + * Fix infinite loop in sami subtitle + * Fix AAC 7.1 channels detection + +Demuxers: + * Fix potential crash in ASX parser + * Fix AVI read/write overflow + +Mac OS X: + * Fix compatibility with macOS High Sierra + * Fix regression in ASS subtitle decoding + * Fix crash during automatic update. Some users might need to manually + update to the newest version. + +Video Output: + * Fix Direct3D9 output with odd offsets + +Misc: + * Fix crash in MTP + * Support libupnp 1.8 + +Translations updates + + +Changes between 2.2.5.1 and 2.2.6: +---------------------------------- + +Video output: + * Fix systematic green line on nvidia + * Fix direct3d SPU texture offsets handling + +Demuxer: + * Fix heap buffer overflows (CVE-2017-8310, 8311, 8312, 8313) + +Changes between 2.2.5 and 2.2.5.1: +---------------------------------- + +Security hardening for DLL hijacking environments + +Translations updates + +Misc: + * Update for Soundcloud, liveleak and Youtube scripts + * Fix potential out-of-band dereference in flac decoder (CVE-2017-9300) + * Fix potential out-of-band reads in mpeg packetizers (CVE-2017-9301) + * Fix infinite loop in subtitles demuxer + * Fix incorrect memory free in ogg demuxer + * Fix potential out-of-band reads in subtitle decoders and demuxers + * Fix green line on Windows with odd sizes + + +Changes between 2.2.4 and 2.2.5: +-------------------------------- + +Decoder: + * Fix mp3 playback quality regression in libmad + * Fix video scaling in VDPAU + * Fix playback of palettized codecs + * Fix ADPCM heap corruption (FG-VD-16-067) + * Fix AES3 16bps decoding + * Fix DVD/LPCM heap corruption (FG-VD-16-090) + * Fix SCTE-27 colors + +Demuxer: + * Fix possible ASF integer overflow + * Fix MP4, VOC, XA, SMF divide-by-zero errors + * Fix MP4 heap buffer overflows + * Fix Flac metadata integer overflow + * Fix NSVf and AIFF infinite loops + * Fix flac null-pointer dereference + * Fix vorbis and opus comments integer overflows and leaks + +Video output: + * Fix green line on Windows with AMD drivers + * Fix screenshots size + +Access: + * Fix crash in screen recording on Windows + * Fix FTP scan string injection + * Fix HTTP size handling + +Mux: + * Fix mp4 drift + +Lua: + * Fix vimeo, youtube, dailymotion, cli, appletrailers, http, + soundcloud scripts + +Audio filter: + * Fix heap write in stereo_widen audio filter + +Windows: + * The plugins loading will not load external DLLs by default. + Plugins will need to LoadLibrary explicitely. + * Fix uninstaller path handling + * Fix taskbar buttons behavior + +MacOS: + * Fix scrolling sensitivity on Sierra + * Resume points are deleted now if the user clears the list of + recent items + + +Changes between 2.2.3 and 2.2.4: +-------------------------------- + +Decoder: + * Fix crash in G.711 wav files + * Fix mp3 crash in libmad + * Fix out-of-bound write in adpcm QT IMA codec (CVE-2016-5108) + +Qt: + * Fix resizing issues + +Win32: + * Fix overlay creation on Windows XP for DirectDraw video output + +Misc: + * Build fixes for Hurd + +Translations: + * Update of Bulgarian, Catalan, German, French, Italian, Marathi, Norwegian + Bokmål, Norwegian Nynorsk, Portuguese, Slovak, Spanish (Mexico), Swedish, + Simplified Chinese, and Traditional Chinese translations + + +Changes between 2.2.2 and 2.2.3: +-------------------------------- + +Demux: + * Fix HLS quality selection and a potential stack overflow + * Fix potential MKV infinite loop and improve MKV tags support + * Fix WMV regression + +Decoder: + * Fix hardware decoding with libvdpau-va-gl + * Fix crashes with libvpx + * Use libass without caching dialog + +Video Output: + * Fix green lines on Direct3D output + +Skins2: + * Fix maximizing Window in multi-screen context + +Qt: + * Fix resume where you left off + * Fix infinite recursion in the customize dialog + * Fix size when switching to/from the minimal interface + * Fix size after resume toolbar is displayed + +MacOS X: + * Fix crashes in media information panel + * Correctly respect the disable-screensaver option + +Win32: + * Allow opening more than 15 elements in Explorer + +Translations: + * Update of most translations + + +Changes between 2.2.1 and 2.2.2: +-------------------------------- + +Access: + * Fix SetupFormat for continuous framesize in v4l2 + * Fix off-by-one buffer overflow in RealRtsp module + * Fix screen recording aspect-ratio, framerate and potential crash + * Fix Windows directshow input freeze + * Fix MMS segmentation fault/abort when server forces a large allocation + +Demux: + * Fix support for ms-dvr files + * Fix time detection in AVI files over HTTP + * HLS: fix hang on stop, crashes and small improvements + * Fix mp4 NULL dereference reported by by Fortinet's FortiGuard Labs + * Fix regression for VC-1 in WMV + * Fix MXF crashes on stop + * Fix EAC3 detection in some TS files + +Decoders: + * Fix importing surface from main memory in VDPAU + * Fix possible double-free in ADPCM decoder + * Support 9-bit and 10-bit GBR planar formats + * Support GoToMeeting 2 and GoToMeeting 3 codecs + * Fix crash in teletext (zvbi) decoder + * Fix Bluray subtitles (PGS) timestamps + +Audio output: + * Fix audio drop after a flush with pulseaudio + * Fix audio initialization on iOS + * Fix audio stuttering with AirPlay devices on OS X (2 sec delay needs to + be set manually by the user) + * Fix pulseaudio latency computation + * Fix alsa default device selection + +Skins2: + * Fix video control that fails to show up + * Fix UTF-8 conversion issues + * Fix Unicode folders location failing to open the skins + * Fix crash over malformed skins bitmaps + * Fix fullscreen for Gnome3/Unity Window Managers + +OS X: + * Support for OS X El Capitan + * Fix code signature for releases on El Capitan + * Improve resume dialog, starting time, preferences, lua extensions + * Fix threads ordering, preferences crashes, URL drag'n drops + +Qt: + * Fix crash when opening multiple items on Windows + * Fix recent items appending when using a playlist + * Improve addons manager dialog, playlist + * Fix changing the audio-device in the menu + * Fix key and mouse event support for Qt >= 5.5 under X11 + * Fix memory leaks + +Video Output: + * Fix build if one disables XCB but activate VDPAU on Unix + * Fix Direct3D plane allocation size to avoid colour bleeding + * Fix some crashes in swscale resizing + +Misc: + * Fix build with recent FreeRDP versions + * Fix interface crashes when input-title-format option is empty + * Fix MP4 mux divide-by-zero crash + * Improve PNG encoding time + * Fix some UPnP initialization lag + * Rewrite of the Jamendo Service Discovery + * Fix snapshot aspect ratio for anamorphic contents + * Fix custom snapshot sizes + * Dynamic generation of GnuTLS Diffie-Hellman parameters + * Fix "vb" transcoding parameter + * Fix superfluous audio channel extraction in the core + * Fix miscellaneous crashes, double-frees, integer overflows, infinite loops, + read overflow, invalid frees and division by zero issues + * Fix support for lua 5.2 and fix XSS in the http interface + * Update and improve Soundcloud, Vimeo and Youtube scripts + * Update of codecs and libraries to fix 3rd party security issues (like + TALOS-CAN-0036, TALOS-CAN-0037, CVE-2015-7981, CVE-2015-8126 + +Translations: + * Add Kashmiri and Maithili languages + * Update of most translations + +libVLC: + * Expose audio mute, cork and volume change events: libvlc_MediaPlayerCorked, + libvlc_MediaPlayerUncorked, libvlc_MediaPlayerMuted, + libvlc_MediaPlayerUnmuted and libvlc_MediaPlayerAudioVolume + * Fix propagation of libvlc_MediaPlayerTitleChanged event + +Translations: + * Update of most translations + + +Changes between 2.2.0 and 2.2.1: +-------------------------------- + +Codec: + * Fix compilation with older libavcodec versions + * Fix some VP9 decoding + * Fix flac crashes + * Fix lpcm channel ordering + * Fix potential NULL dereference in dmo + * Fix teletext framing code in DVB PES packets + * Fix potential buffer overflow in schroendinger decoder (CVE-2014-9629) + * Fix AAC samplerate + +Demuxers: + * Fix MP4 chapters + * Fix MKV overseeking, introducing slowness over network shares + * Fix crash when playing SPC files + * Fix ATRAC3 playback in MKV + * Revert to older ASX code + * Workaround TS issue with mpeg-audio + +Access: + * Fix sftp read and close sockets + * Fix DTV build with Linux DVB versions < 5.8 + * Fix UDP/RTP input on Windows + +Audio output: + * Fix Alsa HDMI plugs + * Improve Alsa output, with larger buffers + * Fix DirectSound output with multi-channel files + +OS X: + * Fix numerous crashes in the UI + * Fix video-wallpaper mode + * Fix race when starting VLC from command line + +Qt: + * Fix recent items behaviour + * Fix rotation filter activation + * Fix mux modules names for the streaming wizard + +Win32: + * Timestamp the signature of the dlls + * Fix extensions registration during install + * Fix extensions dialog crash + * Default to no DxVA decoding + +libVLC: + * fix libvlc_media_get_stats + +Translations: + * Update of Afrikaans, Albanian, Azerbaijani, Catalan, Czech, Danish, Dutch, + English (United Kingdom), Finnish, French, German, Hebrew, Hindi, Italian, + Japanese, Korean, Latvian, Macedonian, Malay, Modern Greek, Norwegian Bokmål, + Norwegian Nynorsk, Polish, Portuguese, Russian, Scottish Gaelic, Serbian, + Simplified Chinese, Slovak, Slovenian, Spanish, Swedish, Tamil, Thai, + Traditional Chinese, Turkish, Ukrainian translations + + +Changes between 2.1.6 and 2.2.0: +-------------------------------- + +Important changes: + * The licenses of more modules have changed from GPLv2+ to LGPLv2.1+, + notably most of the streaming output, muxers and access output modules + +Core: + * Support automatic rotation using streams metadata, GPU-accelerated when possible + * Add extensions manager and downloading from external repositories + * Rework the metadata fetching algorithm and policies + * Partial fix of playback of short audio samples + +Access: + * Added TLS support for ftp access and sout access + New schemes for implicit (ftps) and explicit (ftpes) modes + * MMS audio selection on split audio streams + * Blu-Ray: support overlays, preferred menu languages, region selection + and BD-J navigation + * Digital Cinema Package support, including encrypted DCP with KDM + * Partial fixes for Arccos protected DVDs + * Fix CDDB lookups, including pregap data + +Decoder: + * Support VDPAU acceleration for GPU-zerocopy decoding + * Support MediaCodec acceleration for GPU-zerocopy decoding + * Add Media Foundation Transform audio and video decoder + * Add video decoder module based on GStreamer plugins + * Add MMAL decoder for Broadcom VideoCore chips (like the RaspberryPi) + supporting MPEG-2 and H.264, supporting GPU-zerocopy display + * Partial support for Voxware MetaSound + * libvpx decoder for VP8 and VP9 + * Support MSN Audio, Atrac3+, VP7, Bink, TAK, On2 AVC, DK3, DK4, IMC, Vivo g723.1, + Smacker, FIC, Auravision, Canopus Lossless, and numerous videogame codecs + * Teletext subtitles display improvements + * Mediacodec speed improvements on x86 + * Support setting the post processing level in Theora + * OpenMax IL improvements, notably for RaspberryPi + * Fix channel ordering of LPCM codec in m2ts files + * New jpeg image decoder + * Add tx3g subtitles decoder + * New SVG image decoder + * Fix Speex decoding over RTP and in flv + * Support more x264 and FFv1 RGB modes + * Improvements on ZVBI teletext decoder, notably for speed and alignments + +Encoder: + * Support for MPEG-2 encoding using x262 + * Support for HEVC/H.265 encoding using x265 + * Support for Opus encoding using libopus + * New jpeg image encoder using libjpeg + * New png image encoder using libpng + +Demuxer: + * Support for Core Audio Format (CAF) files + * Important rework of the Ogg demuxer, notably improving seeking, + streaming resilience, speex demuxing and chained Ogg + * Important rework of the ASF/WMV demuxer, notably for seeking, + synchronization and tracks exclusion + * AVI improvements for better seek-indexing in non-fastseekable situations + * AVI fixes for uncompressed, indexed and paletized bitmaps + * MP4 fixes for fragmented files, vobsub, duration, aspect-ratio + and support for rotation, covr atom and tracks exclusion + * Support Opus in MKV + * Support VP8 in OGG + * Basic support for WebVTT + * Handle support for ISO/IEC 14496-3 (AAC) Audio stream type in TS + * Support HDPR TS files + * Support microseconds in SubRip subtitles + * FLAC packets validation using CRC + * Improvements in metadata support in Ogg/Opus/Vorbis files + * Fix encoding issues and relative paths in some XML playlist formats + * Support THP Wii/Gamecube, RenderWare and Escape Replay game video files + * New HEVC raw packetizer and demuxer + * TS support for WiDi/Miracast LPCM + * Handle MOV/MP4 tx3g styled subtitles through codec + * Support SVG images files (on glib platforms) + * Keep selection of tracks on segment changes in MKV + * Support detection of SRT languages based on filename + * Support for seeking Standard MIDI Files + +Video Output: + * Direct rendering and filtering for VDPAU hardware acceleration + * New CoreAnimation OpenGL video output module for NPAPI plugins + * New OpenGL ES 2.0 through EGL video output module for Android + * New Android native window provider module + * Direct rendering for MediaCodec Android hardware acceleration + * Support for loading HLSL shaders in Direct3D video output + * Add MMAL based video output for RaspberryPi + +Video Filter: + * New Oldmovie effect filter + * New VHS effect filter + * New Freeze effect filter + * Support I422 and J422 in transform + * NEON optimizations for deinterleaving chroma, notably NV12->I420 + * Fix audiobargraph activation and usage + +Audio Output: + * Allow setting volume while not connected with PulseAudio + * Audio device notifications for WASAPI + * Fix replay of sound buffer in DirectSound + * Split of MMDevice and WinRT audio modules + * Numerous fixes on AUHAL, including device management and stream changes + * Fixes for SPDIF passthru in most modules + +Muxers: + * Important rework of the Ogg muxer, notably for skeleton + * Fixes for the AVI muxer to respect the specification + * Support VP8 in OGG + * Add HEVC muxing in MP4 and TS + +Streaming: + * Important rework of the transcoding module to fix numerous bugs + * WebM streaming, including live sources, compatible with all major browsers + vlc vlc://quit --sout '#transcode{vcodec=VP80,vb=1000,acodec=vorb,ab=128} + :std{access=http{mime=video/webm},mux=webm,dst=:4212}' + * GSM, VP8, Opus and JPEG RTP packetization + * HLS: Allow setting the first segment number and numerous improvements + * new stats module to output block timing values and md5 sums + * transcode module access fps values as rationals now, eg 30000/1001 + * VLC now streams all elementary streams, you can revert to previous behaviour + with --no-sout-all + * --ts-out option has been removed, it has been superceded by --demux demuxdump + --demuxdump-access udp --demuxdump-file 127.0.0.1:1234 + * Support Metacube protocol when streaming over HTTP + +libVLC: + * add equalizer API libvlc_audio_equalizer_* functions + * add libvlc_media_player_program_scrambled function + +Visualizations: + * Add a 3D OpenGL spectrum visualization. + * Allow setting the FFT windowing style for 3D and normal spectrum + +Interfaces: + * Add support for subtitles drag 'n drop in skins2 + * Add record button in Qt menus + * New module for core dialogs on iOS + * New layout for Qt buttons customization + * Support to continue media playback where it was left off for Qt and OS X + +Mac OS X Interface: + * Support for OS X Yosemite + * Avoid grey bars in fullscreen when using Mavericks with multiple monitors + * Improve fullscreen behavior for the native and VLCs own mode + * Fixes for advanced preferences + * Added 'file size' column to playlist table + * in addition to iTunes, Spotify is automatically paused on playback start + * Option to increase playlist font size + * Improved crash log reporting + +Misc: + * New module for TLS on OS X and iOS + * Windows installer will kill running instance before installing + * Teletext navigation buttons support in Qt4 gui + * Update and improve Koreus, Dailymotion, Soundcloud and Youtube scripts + +Security: + * Numerous integer and heap overflow in Ogg, AVI, ASF, TTA and MP4 demuxers + +Removed modules: + * iOS video output: use ios2 + * OpenMash H.261 video decoder + * dirac encoder: use schroedinger + +Translations: + * New translation in Urdu, Tatar, Silesian, Samoan, Kapampangan, N'ko, + Kurdish, Kabyle, Mexican Spanish, Catalan, Amharic + * Update of all translations: + Traditional Chinese, Simplified Chinese, Vietnamese, Uzbek, Ukrainian, + Turkish, Thai, Swedish, Serbian, Albanian, Slovenian, Slovak, Russian, + Romanian, Brazilian Portuguese, Polish, Punjabi, Dutch, Nepali, Norwegian + Bokmål, Malay, Marathi, Latvian, Lithuanian, Korean, Kannada, Khmer, + Japanese, Italian, Icelandic, Indonesian, Hebrew, Galician, Scottish + Gaelic, French, Finnish, Persian, Estonian, Spanish, Modern Greek, German, + Danish, Welsh, Czech, Bosnian, Bengali, Asturian + + +Changes between 2.1.5 and 2.1.6: +-------------------------------- + +Audio output: + * Fix OSS stuttering + +Security: + * Fix heap overflow in decomp stream filter + * Fix buffer overflow in updater (CVE-2014-9625) + * Fix potential buffer overflow in schroedinger encoder + * Fix null-pointer dereference in DMO decoder + * Fix buffer overflow in parsing of string boxes in mp4 demuxer (CVE-2014-9626,9627,9628) + * Fix SRTP integer overflow + * Fix potential crash in zip access + * Fix read overflow in Ogg demuxer + * Fix RTP overflow (CVE-2014-9630) + +Win32 installer: + * Update translations and greek encoding + + +Changes between 2.1.4 and 2.1.5: +-------------------------------- + +Core: + * Fix compilation on OS/2 + +Access: + * Stability improvements for the QTSound capture module + +Mac OS X audio output: + * Fix channel ordering + * Increase the buffersize + +Decoders: + * Fix DxVA2 decoding of samples needing more surfaces + * Improve MAD resistance to broken mp3 streams + * Fix PGS alignment in MKV + +Qt Interface: + * Don't rename mp3 converted files to .raw + +Mac OS X Interface: + * Correctly support video-on-top + * Fix video output event propagation on Macs with retina displays + * Stability improvements when using future VLC releases side by side + +Streaming: + * Fix transcode when audio format changes + +Security contents: + * Updated GnuTLS to 3.1.25 (CVE-2014-3466) + * Updated libpng to 1.6.10 (CVE-2014-0333) + +Translations: + * Update British English + + +Changes between 2.1.3 and 2.1.4: +-------------------------------- + +Demuxers: + * Fix issue in WMV with multiple compressed payload and empty payloads + +Video Output: + * Fix subtitles size rendering on Windows + +Mac OS X: + * Fix DVD playback regression + * Fix misleading error message during video playback on OS X 10.9 + * Fix hardware acceleration memleaks + + +Changes between 2.1.2 and 2.1.3: +-------------------------------- + +Core: + * Fix broken behaviour with SOCKSv5 proxies + * Fix integer overflow on error when using vlc_readdir + +Access: + * Fix DVB-T2 tuning on Linux + * Fix encrypted DVD playback + * Fix v4l2 frequency conversion + +Decoders: + * Fix numerous issues (M2TS, VC1 interlaced, Lagarith, FFv1.3, Xvid) + by updating codec libraries + * Bring fluidsynth back on Mac OS X + * Fix some Opus crashes with some filters + * Fix teletext crash on Windows + +Demuxers: + * Avoid an infinite recursion in MKV tags parsing + * Fix an issue with some Vobsub tracks + * Fix missing samples at the end of some wav files + * Fix divide by 0 on ASF/WMV parsing + +Audio output: + * Fix audio device selection via command line on Mac OS X + * Fix audio crashes on Mac OS X + +Video Output: + * Fix selection of DirectDraw as the default output for XP + * Fix transform off-by-one issue + * Fix screensaver disabling on Windows outputs + * Fix DirectDraw device enumeration and multi-display output + * Fix a potential crash when playing a fullscreen game at the same time as VLC + +Stream output: + * Fix 24bits audio MTU alignment in RTP + * Fix record file names + +Qt interface: + * Fix minimal size possible on start + * Fix a crash with the simple volume widget + * Fix a crash in the audio menu building + * Fix multimedia keys issues on Windows + * Fix opening of DVD and BD folders on Windows + +HTTP interface: + * Fix album art display on Windows + +Translations: + * Update of Bulgarian, Catalan, Czech, Danish, German, Modern Greek, + Spanish, Basque, Finnish, French, Scottish Gaelic, Galician, Hebrew, + Hungarian, Italian, Japanese, Korean, Malay, Norwegian Bokmål, Nepali, + Dutch, Polish, Brazilian Portuguese, Portuguese, Romanian, Russian, + Sinhala, Slovak, Slovenian, Swedish, Telugu, Thai, Turkish, Ukrainian + and Simplified Chinese translations + * Fix encoding for Windows installer translations + + +Changes between 2.1.1 and 2.1.2: +-------------------------------- + +Audio output: + * Fix digital playback on OS X when more than one audio device is installed + * Fix digital playback (SPDIF/HDMI) on Windows + * Fix stuttering or silent playback when using sound enhancers or external + audio devices on OS X + * Improve responsiveness on OS X when playback starts or is being paused + * Improve responsiveness, silent playback intervals and reliability on iOS + +Demuxers: + * Fix Vimeo and DailyMotion parsing + * Various WMV playback improvements and fixes + +Decoders: + * Fix LPCM 20/24-bit decoding and 16 bits with channel padding + * Fix playback of some HEVC samples + +Video filters: + * Fix crash on deinterlace selection + +Qt interface: + * Fix some streaming profiles when copy existed + * Improve A-B loop control + * Fix album art update when changing media + +Mac OS X interface: + * Add a language option in the interface + * Option to control VLC's iTunes pausing behavior is more easy to find + * Improved UI resetting when requested in the preferences + * Fix issue which prevented to enable more than one video filter on Mavericks + * Fix an issue which could prevent automatic UI language settings from working + * Fix opening subtitles files through drag & drop or double-clicking + * Fix crash when closing window without decorations + * Fix issue where extra video window was resized even if this was disabled + +Win32 installer: + * Kill running VLC process on uninstall/update + +Translations: + * Update of Basque, Bosnian, Bulgarian, Croatian, Czech, Danish, Estonian, + French, Hungarian, Icelandic, Indonesian, Italian, Kannada, Khmer, + Lithuanian, Occitan, Persian, Polish, Romanian, Scottish Gaelic, Sinhala, + Slovenian, Spanish, Swedish, Tamil, Thai, Uzbek, Welsh translations + + +Changes between 2.1.0 and 2.1.1: +-------------------------------- + +Core: + * Fix random and reshuffling behaviour + * Fix recording + * Fix some subtitles track selection + +Decoders: + * VP9 support in WebM + * HEVC/H.265 support in MKV, MP4 and raw files + * Fix GPU decoding under Windows (DxVA2) crashes + +Demuxers: + * Fix crashes on wav, mlp and mkv and modplug files + * Support Speex in ogg files + * Fix some .mov playlists support + * Support Alac in mkv + * Fix WMV3 and palette in AVI + * Fix FLAC packetizer issues in some files + +Access: + * Fix DVB options parsing + * Fix DeckLink HDMI input + * Fix HTTPS connectivity on OS X by loading root certificates from Keychain + +Audio output: + * Fixes for DirectSound pass-through + * Fixes for OSS output, notably on BSD + +Interfaces: + * Fix HTTP interface infinite loop + * Fix D-Bus volume setting + +Qt: + * Reinstore right click subtitle menu to open a subtitle + * Fix saving the hotkeys in preferences + * Fix saving the audio volume on Win32, using DirectSound + * Fix play after drag'n drop + * Fix streaming options edition and scale parameter + +Stream out: + * Fix transcoding audio drift issues + * Fix numerous audio encoding issues + +Win32 installer: + * Important rewrite to fix numerous bugs, notably about updates + * Simplification of the upgrade mechanism + +Mac OS X interface: + * Reintroduce the language selector known from pre-2.1 releases + * Fix fullscreen behaviour and various crashes + * Fix about dialog crash in Japanese + * Fix crashes on proxy lookups + * Fixes on the playlist and information behaviours + * Fixes on the streaming dialogs + * Improves interface resizings + +Translations: + * Update of Arabic, Basque, Belarusian, Czech, Danish, Dutch, French, + Galician, Gujarati, Hindi, Hungarian, Icelandic, Italian, Japanese, Korean, + Lithuanian, Marathi, Modern Greek, Norwegian Bokmål, Occitan, Persian, + Polish, Portuguese, Punjabi, Romanian, Sinhala, Slovak, Slovenian, Spanish, + Swedish, Telugu, Thai, Traditional Chinese, Turkish, Ukrainian, Uzbek + translations + + +Changes between 2.0.9 and 2.1.0: +-------------------------------- + +Important changes: + * The licenses of numerous modules have changed from GPLv2+ to LGPLv2.1+ + * Discontinued support for PowerPC-based Macs; VLC now requires Mac OS X 10.6+ + Moreover, the official builds will be 64bit only + * The --with-tuning and --without-tuning options are removed; to tune + compilation for a specific processor type, set CFLAGS manually + +3rd party libraries (contrib): + * /extras/contrib has been replaced by a cleaner build system in /contrib + +Core: + * Audio core rewrite, supporting higher samplerates, better volume management, + better device selection, new channel layouts and new output capabilities + * Fix support for .001, .00x split files on Windows + * Full support for UNICODE Windows mode + * Disable and mark obsolete --language selection + * Port to Android + * Port to iOS + * Partial support for Windows Store App / WinRT + * Add an audio fingerprinter, using AcoustID! + * Remove SQL support + +Decoders: + * Support for CDXL, Ut Video, VBLE, Dxtory codecs via libavcodec + * Numerous improvements on the OpenMAX IL codec module + * Support for Ulead DV audio + * Support for TechSmith Screen Codec 2, Microsoft Expression Encoder Screen, + Microsoft Application Screen Decoder 1 (MSS1) and 2 (MSS2) + * Support for Indeo Audio Coder, RealAudio Lossless + * Add Hardware Acceleration support on OS X for H.264 based upon VDADecoder + * Add Hardware Acceleration support on Android Jelly Bean using MediaCodec + * Add Hardware Acceleration support on Linux using VDPAU + * Support for SCTE-27 subtitles + * Split G.711 decoder from Araw decoder + * X Window system raster image dump pseudo-decoder + * Support for Webinar GoToMeeting 4 (G2M4) + +Encoders: + * high10, high422 and high444 encoding support in h264 + * QuickSyncVideo Encoding (Intel Media SDK) support using Intel GPU on Windows + * New AAC encoder using the fdk-aac library (non-free) + +Access: + * Screen: add support for OS X Lion and later, + remove support for previous OS X releases + * Major improvements in DASH support + * Improvements in Blu-Ray module, notably for multiple video tracks support + * Important improvements and rewrite of the v4l2 access module + * HTTP: support for Internationalized Domain Names + * Microsoft Smooth Streaming support (H264 and VC1) developed by Viotech.net + * NTSC EIA-608 closed caption input support via V4L2 VBI devices + * Add support for VNC/rfb in view only mode + * Add support for Remote Desktop/RDP in view only mode + * Timecode: generate a clock/timecode as a subtitle track + vlc video.mkv --input-slave timecode:// --timecode-fps 30/1001 + * New video capture module for OS X based on AVFoundation, named AVcapture + * New shared memory framebuffer access module, named shm + +Demuxers: + * MP4: partial support for fragmented MP4 + * Vorbis: better support for metadata and cover art + * AVI: better support for tags and extended metadata + * Support for FLAC, Atrac and some ADPCM in AVI + * Support for DV data type 1 in AVI and 12 bits DV Audio + * Support for total number of tracks in major container + * Support for Cook and Atrac in MKV + * AVI: support for files produced by Nikon cameras + * Support for more MJPEG streams + * Add support for liveleak streams + * Add support for Wave/RF64 files + * Prevent numerous uncaught exceptions in MKV + * Add protection against several potential heap buffer overflow in libebml + +Audio output: + * Windows Audio Session API audio output support + * OpenBSD sndio audio output support + * Important improvements on the Android OpenSL ES audio output + * Android AudioTrack audio output support + * OS X Auhal output support for 6.1, 7.1, 8.0 and 8.1 playback and layouts + * Rewrite of OSS module to support OSSv4 + * OS X Auhal output support for multi-buffer output devices + This fix was facilitated through a hardware lending by TEAC Europe GmbH + distributing such devices under the brand "TASCAM" (US-122, US-144, etc.). + * Rewrite of the AudioQueue output for iOS (and OS X) + * New, simplified AudioUnit output for iOS + +Audio Filters: + * New remapping channel filter + * New filter to enhance stereo effect by mono suppression and delay effect + * New VSXu visualization plugin + * ARM NEON acceleration of volume filter + * Rewrite of the simple downmixer filter + * New gain audio filter + +Video Outputs: + * New output for Decklink Blackmagic cards + * New output using OpenMAX IL hardware acceleration API + * OpenGL: use glsl instead of ARB to do the YUV->RGB conversions + * OpenGLES: add support for color conversation shaders on Android and iOS + * Fix and enable the OpenGL ES1 and ES2 outputs + * Support for subpictures in the OpenGL ES2 output + * Fix the power management issue on Windows for standby management + * New output module for iOS using OpenGL ES2 + * Fix performance issue on Macs with multiple graphics cards + +Video Filters: + * New anaglyph video filter which transforms side by side 3D video streams in + anaglyph glasses (aka red/blue) compatible images + * Support in deinterlacing filter for most 4:2:0, 4:2:2, 4:4:4 YUV formats + and for bits depth higher than 8bits (like 10bits) + * Improvements on the transform filter, to support 10bits and RGB formats + * Revival of the openCV and openCV example filters + * ARM NEON acceleration of chroma filters + +Stream Output: + * Extended support for recording, notably for MKV and AVI + * Options support for AVIO output module + * Livehttp places more accurate segments durations in playlist + * Livehttp allows setting cachin-variable in playlist + * Livehttp stream encryption support + * Livehttp supports changing encryption key and uri on segment change with key-loadfile option + * Added chromaprint based audio fingerprinting + +Fingerprinters: + * Add AcoustID/Musicbrainz based fingerprinter + +Interfaces: + * configurable password for the HTTP server + * .hosts removed from the HTTP server + * fix Lua command line interface console mode under Windows + * Better support for MCE remotes on Windows + * Hotkey support for TS program selection + * Rewrite of D-Bus inhibit interface + * Improvements on motion sensing interface, fix orientation, move out + rotate mode into the rotate video filter + +Services discovery: + * UPnP A/V subtitles + * Support for multiple UPnP resources on a single item + +OS X Interface: + * Add support for multiple video outputs + * Add accessibility support to playback windows, open panel and fullscreen + controller + * Add a GUI to manage podcasts + * Add a new panel for media conversation and streaming + * Add a GUI for the QTSound access input to process audio captured locally + - This also allows to capture input from a webcam and a mic at the same time + * Add a GUI to capture QTSound data along with the current screen content + * Add an option to let the Apple Remote control the system volume instead of + VLC's internal volume level + * Add a new Subtitles menu to change Subtitles and their properties during + playback + * Add the ability to create custom equalizer presets based upon the current + selection and to manage the list of presets + * Add custom profiles for video and audio effects, which let the user keep + multiple configuration sets of all the individual filters + * Support for pausing iTunes during media playback with VLC + * Add support for video filters to clone the video output or split it in parts + * Add A->B loop feature known from the Qt interface + * Add an option to disable skipping to next/previous file with the Apple Remote + * Add an option to show next / previous buttons + * Add an option to hide the shuffle and repeat buttons + * Add an option to hide the audio effects button (default enabled) + * Add optional playlist columns for track number, genre, album, description, + date and language + * Add options to the Advanced Open File dialog for start and stop time + * Add an option to play videos as a desktop background + * Add support for playing video and showing audio visualizations side by side + * improve fullscreen controller time slider with larger click target + * rewrite of minimal macosx module for use within VLCKit + * Add support for 'macosx-autoplay' to the Apple Event / Apple Script bindings + when adding new inputs - this also affects network streams opened through + 3rd party applications + * Add a UI to the preferences dialog to configure the default application + handler for ftp, mms, rtmp, rtp, rtsp, sftp, smb and udp streams + (system-wide settings) + * Add support for the Video Title option + * Add support for the Boss Key + * The Streaming/Transcoding wizard and the open dialog's output panel are + deprecated now and will be removed in a future release + +Qt: + * Partial support for Qt5.0 + * Menus modifications and improvements + * Playlist improvements and fixes, including PictureFlow view + * Streaming output wizard rewrite + * Add bitrate graph in information panels + * Filters panels improvements, notably Equalizer and Compressor + * EPG display fixes and improvements + * Add SD pixmap sources + * Preferences hotkeys management fixes + * Display playlist total duration + * Support for a Maximum volume in the UI + * Add audio track fingerprinting from media info + * New profiles format and dialog to handle filters and quality + * Numerous fixes + +Skins2: + * Port to OS/2 + * Extend sliders, offsets options + * New bitmaps caching mechanism + * Numerous fixes and improvements + * Skinning of the Fullscreen controller + +libVLC: + * new libvlc_audio_output_device_list_get and libvlc_audio_output_device_list_release functions + to replace the deprecated libvlc_audio_output_device_count, libvlc_audio_output_device_longname + and libvlc_audio_output_device_id + * libvlc_audio_output_get_device_type and libvlc_audio_output_set_device_type are now deprecated + * new libvlc_media_tracks_get and libvlc_media_tracks_release methods to get more info about the + media tracks. libvlc_media_get_tracks_info is now deprecated. + * new fingerprinter_Create and fingerprinter_Destroy for fingerprinter support + * new libvlc_log_set, libvlc_log_set_file, libvlc_log_unset, libvlc_log_get_context and + libvlc_log_get_object for a better logger mechanism + * new libvlc_set_app_id to complement libvlc_set_user_agent to set the icons + +Removed modules: + * portaudio audio output: use the native audio output instead + * X11 On Screen Display notifications (xosd) + * Linux Framebuffer On Screen Display interface (fbosd) + * PVR: IVTV analog TV encoder - use V4L instead + * RTMP access: use libavformat avio instead + * RTMP access_output: use libavformat avio instead + * Hildon GUI + * MSN messenger "now playing" (broken and unmaintained since VLC 1.0.0) + * Telepathy framework "now playing" (broken and unmaintained since VLC 1.0.0) + * Nokia/Maemo MCE screen unblanking plugin + * Broken crop video filter + * Switcher module + * OSD parser and menu + * Xscreensaver: use xdg-screensaver + * Removed DLL loader for non-Windows Operating Systems + * SQL Media Library (broken and unmaintained) + * SQL Lite (only used as SQL Media library backend) + * htcpcp :) + +Translations: + * Update of all translations + + +Changes between 2.0.8 and 2.0.9: +-------------------------------- + +Demux: + * Improve handling of corrupt ASF files + * Fix buffer overflow in the mp4a packetizer + +Contribs: + * Fix modplug security issues + + +Changes between 2.0.7 and 2.0.8: +-------------------------------- + +Access: + * Fix ISDB-S tuning + * Fix crash in QTsound + * Fix screen mouse file location + * Fix invalid memcpy in MMS access + +Demux: + * Fix use after free in sgimb + * Improve resistance and checking against malformed MKV files + +Decoders: + * Fix crash in the libavcodec module + +Mac OS X: + * Fix interface crashes + * Fix autostart playback option + * Respect "playlist-autostart" option + +Translations: + * update Welsh translation + * New Kannada translation + + +Changes between 2.0.6 and 2.0.7: +-------------------------------- + +Input: + * Fix playback termination when switching ES tracks (PowerPC only) + * Fix memory exhaustion vulnerability when playing specifically crafted + playlist files + +Decoders: + * Fix WMA Pro, MPEG 4 ALS, APE, MLP and ADPCM-IMA4 playback + +Encoders: + * Fix audio encoding for numerous codecs, notably mp3 and aac + +Muxers: + * Fix noticeable memory leak when creating AVI files + +Video output: + * Fix crash when using libvlc in 3rd party applications (Mac only) + +Mac OS X Interface + * Minor improvements + * Fix issue which could lead to loss of media files created through transcoding + +HTTP Interface + * Fix two xss vulnerabilities (CVE-2013-3565) + +Translations: + * Update Basque, Simplified Chinese, Ukrainian, Turkish, Portuguese, Norwegian Bokmål, + Burmese, Lithuanian, Italian, Hindi, Spanish, German, Czech, Danish, Welsh translations + * New Azerbaijani, Kirgyz, Oriya translations + + +Changes between 2.0.5 and 2.0.6: +-------------------------------- + +Access: + * Fix HTTPS playback with some certificates previously rejected + +Audio Output: + * Improve lookup of human readable device names in AUHAL plugin (OS X) + +Demuxers: + * Fix crash with broken asf files (SA-1302) + * Fix MKV behaviour with unknown or new ebml elements + * Fix use-after-free crash in Ogg demuxer, found by Tomi Juntunen + * Fix regression on some paletted codecs in AVI + * Fix ALAC in mp4 regression + * Improvements to the vimeo playlist parser + +Decoders: + * Fix GPU decoding on Intel HD 2000/3000 cards on Windows + * Fix FLAC 6.1 and 7.1 channel layout + * Fix crashes in HTML srt subtitles + * 3rd party codecs updates + +Mac OS X: + * Fix subtitle rendering resolution when using OS X's native fullscreen mode + * Improve fullscreen controller time slider with larger click target + * Fix listing of the lua interfaces (web, telnet and console) + in the advanced preferences panel + * Fix spatializer audio filter panel + * Fix crash within the video output code + * Fix BDMV folder selection issue on OS X Mountain Lion, which treats such + folders as a AVCHD file as soon as they include an item named INDEX.BDM + * Fix bug which caused a hidden fullscreen panel + * Fix various minor UI drawing issues (main window, fullscreen controller, + lua extensions, ...) + * Allow VLC to be associated with .dvdmedia packages + +Qt: + * Fix clearing of Media Info panel on dialog exit + +GNU/Linux: + * Numerous D-Bus and MPRIS2 improvements + * Reject broken versions of PulseAudio + +Windows: + * Fix uninstallation in different location than C:\ + +Translations: + * Update of Brazilian Portuguese, Traditional Chinese, Thai, Portuguese, + Japanese, Italian, Hebrew, Estonian, Spanish, Czech, Catalan, Bosnian, + Asturian, French, Romanian, Serbian, Russian, Hindi, Estonian, German + Slovenian Norwegian Bokmål, Khmer, Icelandic, Interlingua, Welsh, Ukrainian, + Dutch, Danish, translations + * New Gujarati, Aragonese translations + + +Changes between 2.0.4 and 2.0.5: +-------------------------------- + +Access: + * Fix DVB-S delivery system detection + +Audio Output: + * Fix playback initial synchronization with PulseAudio + (however similar bugs in PulseAudio version 2.0 and later still exist) + * Fix file output bug affecting floating point on big endian systems + +Demuxers: + * Fix crash with some embedded subtitle fonts + * Fix buffer overflow in HTML subtitles parser + * Fix koreus lua parser + * Improve reliability for RTSP streams sent by some IP cameras + * Fix division by 0 in AIFF demuxer + * Fix some MKV crashes when ordered editions have empty or broken links + * Fix SWF potential crash on malformed files. + +Video filters: + * Fix crash in Freetype with embedded fonts + * Fix wrong aspect ratio in some cases + +Encoders: + * Fix Mpeg-2 audio and video encoders initialization + +Mac OS X: + * Fix Reveal-in-Finder for files with non-Western file names + * Fix crash with local statistics disabled + * Fix Time counter UI look + * Fix system sleep issue on OS X 10.5 + +Win32: + * Fix https streaming + +libVLC: + * Fix audio and video track selection: + The constant track identifier is now always used. Some functions previously + incorrectly used the (moving) index of the track in the table of tracks. + +Translations: + * Update of Asturian, Bengali (India), Bosnian, Croatian, Czech, Danish, + Dutch, Estonian, French, Galician, Scottish Gaelic, German, Hebrew, + Italian, Japanese, Khmer, Malayalam, Polish, Slovak, Simplified Chinese, + Traditional Chinese, Brazilian Portuguese, Turkish, Thai translations + * Initial translations for Welsh and Interlingua + + +Changes between 2.0.3 and 2.0.4: +-------------------------------- + +Audio Output: + * Improve playback synchronization with PulseAudio. + * Fix ALSA digital pass-through ("S/PDIF"). + * Fix live audio device selection on Mac OS X + * Fix detection of some 5.1 and 7.1 kits on Windows. + * Fix audio output behavior when the output device is plugged or unplugged + during playback on Mac OS X + +Access: + * Fix numerous DVD (dvdnav) crashes + * Fix HTTP playback through proxy and advertise gzip correctly + * Fix TLS busy-loop during client-side handshake + +Codecs: + * Support for Opus decoding via libopus, including multi-channel files + * Support MSS1 and MSS2 decoding through DMO libraries + * Fix Hebrew and Greek subtitles encoding + * Fix crashes on malformed subtitles and malformed png files + * Fix crashes when using hardware decoding + +Demuxers: + * Fix issues in Ogg with zero length packets + * Fix file duration of Ogg/Theora and Ogg/Vorbis files + * Fix vimeo, koreus and youtube lua parsers + * Support Youtube live streams + +Windows: + * Fix Wallpaper mode on Windows 7/8 + +Qt: + * Fix media info dialog update + * Fix random/repeat preferences saving + * Fix crashes when opening audio effects dialog, with skins and playlist + * Fix crash on association dialog on Windows XP + * Fix album art display at start + +Mac OS X: + * Fix command-line options to control the interface behavior + * Deactivate CoreAnimation effects on Leopard + * Fix menus display and behavior + * Fix various crashes and small issues including bookmarks, playlist, buttons, + streaming wizard, video size, hotkeys and fullscreen controller + * Fix font selection for Unicode subtitles + * Improve system sleep behavior when playing audio-only media. The screen is + allowed to sleep while the system is kept awake during playback. + * Fix code signing of Delete Preferences application + * Add option to Audio Effects panel to activate the Karaoke filter + +Miscellaneous: + * Fix Notify (D-Bus) plugin deadlock. + * Fix buffer corruption in freetype and subtitles modules + * Improve Blu-Ray and HLS support + * Fix issues on selection of playlist items for WebUI + * Codec and other 3rd party library updates + * Fix swscale and canvas behavior with Aspect Ratio + * Fix mime-type when streaming Webm over HTTP + * Fix recording behaviour in Windows network environments + * Codecs and 3rd party libary updates + +Translations: + * Updates of Norwegian Bokmål, Korean, Slovak, Serbian, Russian, Traditional + Chinese, Simplified Chinese, Portuguese, Walloon, Turkish, Thai, Polish, + Dutch, Khmer, Hindi, Japanese, Galician, Hebrew, German, Breton, Scottish + Gaelic, Czech, Estonian translations + * Initial translations for Bengali, Fula, Gujarati and Bosnian + + +Changes between 2.0.2 and 2.0.3: +-------------------------------- + +Access: + * Fix some HTTP request that broke some radio channels + +Demuxers: + * Fix support for some flv files (notably joined) + * Fix a crash when opening ape files with ID3v1 tags + +Mac OS X: + * Add GateKeeper support + * Fix handling for some hotkeys + * Fix fullscreen toggle over extra interfaces + * Minor bugfixes and improvements + +Qt: + * Fix Windows 8 interface style + +Translations: + * Updates for Breton, Czech, Dutch, Gaelic, German, Hebrew, Hindi, Icelandic, + Japanese, Khmer, Korean, Polish, Russian, Simplified Chinese, Slovenian, + Thai, Turkish and Walloon + * New translations to Uzbek and Marathi + * Fix activation of Gaelic and Thai translations + + +Changes between 2.0.1 and 2.0.2: +-------------------------------- + +Video Output: + * XP machine will now use DirectX mode by default, like in previous versions. + There were too many errors with broken drivers. + * More accurate colourspaces conversions for YUV->RGB in OpenGL + * Add menu support for libvlc / VLCKit applications on Mac OS X + * Various fixes on Mac OS X, notably for crop, zoom, osd and menu support + * Misc fixes in OpenGL module, on all platforms + * Fix video output on PowerPC-based Macs equipped with an ATI Radeon 7500, + an ATI Radeon 9200 or a NVIDIA GeForceFX 5200 Ultra. + * Fix video output of 10bit encoded contents on Intel-based Macs equipped + with an Intel GMA 950 chipset running OS X 10.6 or later. + * Add support for the HiDPI mode used on recent Apple products with so-called + Retina Displays. + +Access: + * Rework Digital TV module for Windows. DVB-T and DVB-C should work again + * Fixes for RAR compressed files + * Fix DirectShow crashes on exit + * Improve PulseAudio input latency + * Fixes for HTTP access through a proxy + * v4l2 webcam outputting H264 can now be used directly (use --v4l2-chroma=h264) + * Fix subtitles auto-detection in subfolders and detection behaviour + * IE http proxy is not used anymore by VLC on Win32 + * Accept more extensions for DVD images + * Fix crash in VC1 packetizer + * Improvements in Blu-Ray playback + * Improvements and fixes in HLS support + +Codec: + * Fix crashes in AAC decoder on channels changes, notably in ISDB streams + * Fix compilation with multiple FFmpeg and libav versions + * Fix G726 support + * Fix MP3 free format support + +Demuxers: + * Fixes for MKV segments, seeking and MKV title display + * Fix for some mp4, voc, midi and au crashes + * Fix for Real .ram, .f4v, .avi and .ra files support + * Fix for DVB channels file support + * Fixes for alac, vorbis, DTS, VC-1 and Dirac in mp4 + +Encoders: + * Fix for MPEG Audio encoding, use layer2 when using fourcc "mp2 " and "mp2a" + * Fix for JPEG generation, when doing snapshots + +Audio filters and output: + * Limitation of spatializer volume output + * Fix DirectSound device selection + * Correct PulseAudio volume control + * Do not apply volume in file output + * Fix sampling rate in JACK output + * Fixes in ALSA output for latency and for broken drivers + +Mac OS X: + * Enable drag and drop of playlist items between the temporary playlist and + the persistant media library + * Enable import of playlist items taken from the service discovery modules + to the media library or the temporary playlist + * Media key support for keyboards by other manufacturers than Apple + This fix was facilitated through a hardware donation by ZF Friedrichshafen AG + manufacturing keyboards under the brand "Cherry". + * Add support for the Apple Remote to set the Mac to sleep using a longer + press on the Play/Pause button + * Remove libfontconfig's font cache by an Apple Type Services lookup. + This removes the "Updating Cache" dialog, before finding all fonts. + * Re-add an option to hide the window decoration during video playback + * Improve compatibility with other 3rd party apps using SPMediaKeyTap + * Many Fullscreen fixes + * Keep Aspect Ratio when resizing is back + * Add controls to manipulate the Subtitles Duration to the Track + Synchronization panel + * Hidden items in the sidebar are being retained for the next launch now + * Fix crash when trying to open an Audio CD by drag & drop + * Improve reliability when opening DVDs or BDs by drag & drop + * Fix crashes on exit + * Fix crash when mounting a device with multiple logical volumes while + VLC is running + * Chosen audio output device is retained throughout multiple sessions + * Since running the Mac OS X interface as an Extra Interface or Control + Interface can lead to undefined results, eventual settings will be + automatically reset on the first launch. + - This fixes issues with unresponsive playback controls and crashes on quit. + * Update Growl plugin for use with Growl 1.3 + * Miscellaneous minor interface improvements + +Lua Scripts: + * Fixes for stdin/stdout and for different locale issues + * Fixes for icecast SD + +Qt: + * Fix preferences for audio devices on Windows + * Fix playlist search and selector behaviour + * Fix multiple issues in the Open Disc dialog + * Miscellaneous fixes in preferences, buttons, EPG, playlist and customize dialog + * Fix tags and file names display + * Fix various crashes, display issues and usability issues + +Skins2: + * Fix mousewheel on Windows + * Fix for key events and focus loss + +Web interface: + * Fix display of some buttons + * Fix listing of files in the Open interface + * Fixes for widgets behaviour and vlm dialog + +Security: + * Fix Ogg Heap buffer overflow + * Update taglib (CVE-2012-2396) + * Update libavcodec and other codecs libraries + +Translation: + * Traditional Chinese, Simplified Chinese, Walloon, Slovak, Polish, Khmer, + Japanese, Italian, French, Czech, Belarusian, Breton, Greek, Spanish, + Estonian, Irish, Galician, Hungarian, Japanese, Dutch, Telugu, Ukrainian, + Thai translations update + * New Scottish Gaelic translation + + +Changes between 2.0.0 and 2.0.1: +-------------------------------- + +Access: + * fix and improve the CDDB information retrieval + * fix the samba module compilation + * fix UDP / RTP multicast stream reception on Mac OS X when using the 10.7 SDK + * multiple fixes for HLS support, notably on Win32 and for encryption + * multiple fixes for Bluray discs playback + * fix for DVD decryption on some RPC-I drives + +Codecs: + * Support for MXPEG files + * limit auto-detected threads to 4 in avcodec module + * fix quicktime audio codecs in RTSP streams + +Demuxers: + * Fix multi-file splitted RAR archive support + * Fix a crash when seeking in mka + * Improve MKV multi-video tracks support + +Muxers: + * Fix ogm header creation + +Audio filters: + * limit spatializer filter distortions + * Use fastest SinC algorithm for samplerate module + +Audio output: + * Fix S/PDIF passthrough with ALSA. + * Remove flawed ALSA channels autodetection. + The available ALSA channels MUST be configured now (stereo by default). + * Fix delay when changing the volume on Mac OS X + +Video filters: + * Fix gradfun unloading on Windows platform + +Mac OS X interface: + * allow to hide the playlist to get a small controller window + * allow to hide the sidebar + * disable Lion fullscreen mode by default, since its behavior is misleading + - this fixes fullscreen video output on a secondary screen + * noticebly faster launch time + * correct a few visual glitches and accessibility support + * re-enable visual feedback on seek and volume changes + * improve track synchronization panel + * fix fontconfig cache dialog, closure of the interface and numerous crashes + * fix crop, aspect ratio handling, DVD (no menu) support and Open subtitle menu + +Qt interface: + * allow a native seek slider instead of the blue one + * fixes in the playlist, the addons dialog, the menus, the main toolbar + the open dialogs, preferences and customization dialogs + * fix for fontconfig cache dialog, when rebuilding ASS fonts + +Skins interface: + * fix for menus display + * Addition of $R to display current playback speed + * documentation update + +Web interface: + * fix mobiles display for remote control mode + * support for .drc and .3ga extensions + +Service discovery: + * fix SAP discovery, where an item was added multiple times + * fix SAP discovery on Mac OS X when using the 10.7 SDK + * Update Jamendo selections + +Miscellaneous: + * fix DBus crash + * fix build issues on BSD, Linux/PPC and Linux/Sparc + * fix a crash on VLM close + +Security: + * Update libpng to 1.5.9 (CVE-2011-3026) + * Update freetype to 2.4.9 (CVE-2012-1126 up to CVE-2012-1144) + * Fix MMS stack overflow (SA-1201 - CVE-2012-1775) + * Fix RealRTSP heap overflow (SA-1202 - CVE-2012-1776) + +Translations: + * Update of Czech, Spanish, Swedish, Turkish and Walloon translations + + +Changes between 1.1.13 and 2.0.0: +--------------------------------- + +Important notes: + * The licenses of libVLC and libVLCcore have changed from GPLv2+ to LGPLv2.1+ + * Start/end titles/chapters are now specified with # rather than @ to fix + conflicts with some URLs and file names. For instance, this plays a DVD + from the 2nd chapter of the 1st title up to the 4th chapter of the 3rd + title: vlc dvd://#1:2-3:4 + * The 40+ --*-caching options were simplified and dumbed down to 4 options: + - --file-caching specifies caching for local files, + - --network-caching specifies caching for network resources, + - --live-caching specifies caching for capture devices and + - --disc-caching specifies caching for local optical media. + All values are expressed in milliseconds as in previous versions. + * HTTP server IP address, port, and TLS configuration is now centralized: + - The --http-host option sets the address, e.g. "--http-host=[2001:db8::1]". + By default, both :: and 0.0.0.0 are used. + - The --http-port and --https-port options set the port numbers. + By default, 8080 is used for HTTP, and 8443 for HTTPS. + - The TLS credentials are configured with --http-cert (public certificate), + --http-key (private key), --http-ca (optional CA) and + --http-crl (optional CRL). + * RTSP server IP address and port are updated similarly. + Use --rtsp-host and --rtsp-port respectively. + * The --miface-addr option does not exist anymore. To select the multicast + output interface, use --miface instead, e.g. --miface=eth0. + * The Windows version will only work with Windows XP SP2 or later. + Windows 2000 SP4, Windows XP < SP2, Windows 2003 SP0 are now unsupported. + * The Mac OS version will require Quartz Extreme compatible machines. + +Important changes for packagers: + * The default builds now assume that the operating system uses UTF-8 for + its file systems and files content (except the Windows port). If this is + not acceptable, pass --enable-non-utf8 to the configure script. + Non-UTF-8 file systems support will be removed in future versions. + * The VLC plugins path can be overridden with the VLC_PLUGIN_PATH environment + variable. The --plugin-path command line option was removed. + * The default tarballs are now compressed with XZ/LZMA: .tar.xz + * OSS support is not compiled on Linux by default, pass --enable-oss to the + configure script if you use OSSv4 or really want to use OSS emulation. + * The webplugins have moved to: git://git.videolan.org/npapi-vlc.git + +Core: + * Major Video Core and Outputs rework and rewrite: + Subtitles, subpictures and OSD can now be sized and blent inside outputs + x11 (Unix), OpenGL (Unix) and Direct3D (Windows) are such video outputs. + * Almost every video filter can now be transcoded + * Playback rate doesn't get resetted to 1 between items anymore + * Option --sub-filter was renamed --sub-source + * Port to Android, iOS, OS/2 and Win64. + +Access: + * Multiple files are now supported inside RAR files + * Experimental support for ClearQam devices in the BDA/DTV module + * DVB-S scanning support on Unix + * DVB-C scanning on Unix scans correct modulation/symbolrate if needed + * Support for freq and video standard selection in DirectShow + * Support for VDR recordings (http://www.tvdr.de/) folders + * Experimental Blu-Ray Discs support using libbluray + * HTTP Live Streaming (IETF draft) playback support + * Blackmagic DeckLink SDI cards input support (Linux only currently) + * Linear Systems (HD-)SDI cards input support (Linux) + * PulseAudio audio input support + * Support for RTP dynamic payload types by specifying the payload format + in an option (no autodetection): only Theora supported for now + * Basic HTCPCP implementation for Coffee Pot control + * Support for all QTKit-compatible video input devices, aka QTCapture + * Support for all QTKit-compatible audio input devices, aka QTSound + * Support for capturing partially hidden windows in the X11 Screen input + * MPEG DASH (Dynamic Adaptive Streaming over HTTP) support + * Support for HTTPS is now fixed in the Windows port + +Codecs: + * One can now use ffmpeg-mt in conjunction with vlc, to split decoding load + on multiple cores. H.264, VP3, VP8, JPEG-2000, Mpeg-4 ASP/DivX and RV3/RV4 + are notably concerned. + * Important fixes for RealVideo 3.0 and 4.0 playback, notably in MKV + * Experimental Hardware decoding using Broadcom CrystalHD cards + * New module for decoding EBU subtitles (.stl) + * Support for 9bits and 10bits H.264/AVC decoding + * Support for 20-bits PCM and DAT-12 (digital magnetic tapes) from RTP + * New module for Dirac encoding, using the faster libschroedinger + The Schroedinger module should be prefered to the Dirac one + * Support for WMV Images, aka WMVP and WVP2, as used by Photo Story + * Support for Lagarith Lossless video codec + * Support for ProRes 422 video codec in 10bits + * Support for DNxHD (VC-3) and JPEG-2000 in 10bits + * EIA-608 closed captions improvements + * Support for JPEG-2000 and Motion JPEG-2000 in the Windows and Mac binaries + * Experimental support of IOMX for OpenMAX IL codecs on Android + * One can use "mp2 " fourcc to encode in mpeg1/2 layer 2 + +Demuxers: + * New images demuxer supporting jpeg, png, targa, xcf, git, tiff, bmp, pcx, lbm + * C64 SID file playback support of using sidplay2 + * Support for images/cover art in wma/wmv/asf files + * Improvements in .ape files metadata reading and writing + * New demuxer module for EBU subtitles (.stl) + * Support for caf, mtv, awb, f4v, amr, vro (DVD-VR) files + * Ogg, flv, mxf, amr seeking improvements + * Major improvements in Matroska (mkv) chapters/segments handling and seeking + * Support for duration and better seeking in Mpeg-TS files (.ts, .m2ts, .mts) + * Mov improvements, notably for aspect-ratio handling and Audio DV tracks + * Improved support of tracker files + * Real Media (.rm and .rmvb) demuxer is now based on libavformat + +Interfaces: + * Qt: effects dialogs rework + * Qt: new CoverFlow-like view of the playlist + * Qt: port to MacOS X platform + * Qt: various interface improvements, notably on the seek bar + * Skins2 / Qt: misc improvements and usability fixes + * Skins2: fullscreen controller support, relative placement support + and important cleanups and optimisations + * Mac OS X: re-written Main Window, which also includes the Video Windows + It is available in 2 looks, one grey (Lion style) and one black (QTX style) + * Mac OS X: new Audio Effects panel adding Compressor and Spatializer filters + * Mac OS X: new Track Synchronization panel + * Mac OS X: new Video Effects panel for color and geometry adjustments + * Mac OS X: re-written Open Disc functionality with automatic media detection + * Mac OS X: support for the native fullscreen mode on OS X Lion + * Mac OS X: enhanced AppleScript support + * Mac OS X: support for lua extensions + * The rc and telnet lua interfaces were merged into a new "cli" interface + * lua: the recommended way to run custom interface scripts is now to pass + -I luaintf --lua-intf myscript + * ncurses: heavy refactor of the complete interface + * dbus: Upgrade to an mpris2 compliant interface, see http://www.mpris.org + * dbus: Rewrite of the main loop to use a more efficient poll-based model + * webUI/http: Rewrite of the web interface, using jQuery + * webUI/http: some requests are now supported in JSON in addition to XML + * webUI/http: path values for input and output are deprecated in favour of uri + * Qt/Win32: the update system now downloads the updates in the temp folder + * Qt: preferences are now searchable + * Qt: the fullscreen controller is now stackable, full-width, at the bottom + +Video Output: + * New video output based on Direct2D for Windows 7 and Vista (with Platform Update) + * New video output for iOS platform + * Experimental work in progress on a video output using EGL + * Adaptation of the OpenGL layer for OpenGL ES 1.1 + * Various vmem improvements + * OpenGL video output now accepts YUV as input and uses fragment programs for + chroma conversion between YUV and RGB + * New video output for Android platform, based on Surface + * Support for 9/10bits output in the OpenGL output + * Updated OpenGL video output for Mac, requires a Quartz Extreme capable machine + * New video output based on kva API for OS/2 + +Audio Output and Filters: + * New audio output based on AudioQueue API for iOS + * New audio output in memory (amem) + * Important simplification and improvements in the core audio output + * New audio output based on OpenSL ES API for Android + * New audio resampler using Speex (DSP) + * New audio resampler using the Secret Rabbit Code (a.k.a. libsamplerate) + * New Compressor filter, a dynamic range compressor + * New simplistic Karaoke filter + * New audio output based on kai API for OS/2 + * Automatic handover from S/PDIF to PCM with PulseAudio 1.0 + +Video Filter: + * New gradfun filter for debanding videos using dithering + * Rewrite of the grain filter, faster and with better quality + * New posterize filter for lowering the number of colors + * Atmo ambilight: improve Fnordlicht support up to 254 channels + * New sepia filter for creating sepia effect in videos + * New deinterlacer mode Phosphor, a framerate doubling CRT TV simulator + * New deinterlacer mode IVTC, to do live inverse telecine for NTSC films + * New subsdelay filter to change subtitles delay + * New anti-flickering filter + * New OpenMAX DL IPCS filter for color space conversion and resizing + * New video filter for denoising, based on the famous hqdn3d filter + * Major improvements in the freetype text-rendering module, notably supporting + blackbox and customizable shadow. + NB: The freetype module is now used by default on the Mac OS X instead of + the quartztext module, which can still be enabled manually. + The Win32 font selection was improved too. + +Stream output: + * New livehttp-module for HTTP Live Streaming (IETF draft) output + example: vlc inputfile :sout="#transcode{vcodec=h264,acodec=mp3, + venc=x264{profile=baseline},width=320,vb=256,ab=96}:std{ + access=livehttp{index=public_html/iphonestream.m3u8, + index-url=http://url-to-iphonestreamfile-###.ts},mux=ts{use-key-frames}, + dst=public_html/iphonestreamfile-###.ts}" + * Support for Vorbis and Theora in RTP + * Major rework of VoD support + * New delay module, to introduce delays of one ES, when streaming: + #delay{id=12,delay=500}:standard... + * New setlang, setid modules to change lang or id of one ES, when streaming: + #setid{id=12,new-id=42}:std... + * New langfromtelx module, to change lang of one ES, when streaming, based on + a telextex page: #langfromtelx{id=12,magazine=7,page=0x99,row=1}:std... + * New select module, to replace an existing ES with another ES in the same track + #duplicate{dst=bridge-out{id=1},select=video,dst=bridge-out{id=0xa3},select=audio} + #transcode{...}:bridge-in{id-offset=0}:select{disable=0}:setid{id=0,newid=0xa3}:autodel:std{...} + * New libavformat/avio access_output module for network streaming + +Services Discovery: + * Search API to be able to query distant search APIs from the interfaces + * Upnp module was ported to Win32 + +libVLC: + * New capabilities for libVLC: + ** libvlc_media_player_navigate for DVD navigation + ** libvlc_audio_filter_list_get, libvlc_video_filter_list_get to get the + list of available audio and video filters + ** libvlc_audio_set_format, libvlc_audio_set_format_callbacks, + libvlc_audio_set_callbacks + allow grabbing audio data from a chosen memory location in real-time. + +Removed modules: + * asademux, subsass: use libass + * fake, invmem: use the new image demuxers + * hal, v4l, gapi, omapfb, hd1000a, hd1000v: obsolete unmaintained modules + * id3tag: use taglib + * upnp: use upnp_intel + * removal of old telnet interface in favor of the new lua CLI + * removal of http interface in favor of luahttp + * removal of the noise filter + * removal of the SDL audio output, use the native outputs + * growl_udp: use Growl for local notifications on the Mac. UDP support will be + removed in Growl's next release, too. + * removal of the OSSO screensave module, use the MCE one + +Translations: + * Update of translations for most languages. + * New Telugu and Kurmanji translations. + + +Changes between 1.1.12 and 1.1.13: +---------------------------------- + +Security: + * Heap overflow in TiVo demuxer fixed. + * Same default ACL for HTTP requests as for the rest of the HTTP interface. + +Audio outputs: + * PulseAudio channels mapping (non-stereo) fix. + * PulseAudio stream accidental overflow recovery. + +Video outputs: + * XVideo support for mixed CPU/GPU endianess (especially on PowerPC). + * XVideo support for automatic color keying. + * xosd Xlib initialization failure fix. + +Decoders: + * Camtasia decoding fix. + +Qt interface: + * Rare crash while seeking fixed. + * V4L2 video standard selection fixed. + +Translations: + * Update of Chinese simplified, Estonian, German and Polish languages. + + +Changes between 1.1.11 and 1.1.12: +---------------------------------- + +Audio outputs: + * Mac OS X / auhal: multiple fixes for the Digital Audio output (S/PDIF) + including support for OS X Lion + * Multiple fixes and improved synchronization for PulseAudio support + * Support for AC-3 and DTS passthrough with PulseAudio 1.0 + +Unix port: + * Fix build compatibility with taglib < 1.6 and Xulrunner 1.9.1 + +Misc: + * Fix crashes with Japanese locale on OS X + * Minor fixes for Webplugin under Win32, AVI demuxer, smem and AudioScrobbler + * Fix crash in HTTP and RTSP server (stream output or Web interface) + +Translations: + * Update of Breton, Chinese Simplified and Basque + + +Changes between 1.1.10 and 1.1.11: +---------------------------------- + +Security: + * Fix buffer overflows in the RealMedia demuxer (CVE-2011-2587) + and the AVI one (CVE-2011-2588). + +Mac OS X: + * Fixed scrolling direction if the input device's signal is inverted + * Update Auhal audio output to the latest API + * Fix images disappearing issue on the interface + * Reduced installation size by up to 30 MB + * Resolved conflict between iTunes and VLC wrt Media Key handling + +Mozilla/ActiveX webplugin: + * Fullscreen mode is fixed on Win32 + * Very simple fullscreen controller is visible on Win32 + +Demuxers/Meta Readers: + * Better support for cover art embedded in mp4, wma + +Muxers/Output: + * Fix AVI muxer so the generated files are readable on other players + +Extensions: + * Multiple fixes for crashes and malfunctionning issues + +Qt Interface: + * Fix quitting on Linux + * Fix opening of VIDEO_TS folders through the open disc dialog on Windows + * Miscellaneous + +Win32 port: + * Update of codecs, fixing the mpeg-2 decoder crash + +Translations: + * Update of Slovak, Lithunanian, Russian, Brazillian Portuguese, Serbian + + +Changes between 1.1.9 and 1.1.10: +--------------------------------- + +Windows and Mac OS X: + * Update of external library modplug, to address multiple security issues + +Mac OS X Interface: + * Improved Media Key handling based upon SPMediaKeyTap by Spotify AB + * Fix for various crashes and small issues + +Demuxer: + * Fix heap corruption / integer overflow in XSPF playlist parser + +Audio output: + * PulseAudio output re-written due to unstability of the current one + +Win32 port: + * Remove the fontconfig dependency from the freetype module + +Miscellaneous fixes in: + * Windows 7 taskbar buttons + * Qt interface + * asx, live555, dvdnav demuxer + * RTP output and XML export + * Subtitles colours when using GPU decoding on Windows + * v4l2 access + +Translations: + * Update of Norwegian Bokmål, Slovak, Afrikaans, Luganda, + Brazillian Portuguese, Irish, Thai, Estonian, Chinese, Polish, + Dutch, German, Galician, Bulgarian, Lithuanian and Japanese translations + * Initial Basque, Zulu, Peul, Amharic, Acoli, Chiga translations + + +Changes between 1.1.8 and 1.1.9: +-------------------------------- + +Windows and Mac OS X: + * Update of external library modplug, to address a security issue + +Demuxers: + * mp4: Fix heap-based buffer overflow (VideoLAN-SA-1103) + +Mac OS X Interface: + * Miscellaneous interface look adjustments + * Improve Apple Remote handling + * Fixe bugs in the Streaming / Transcoding wizard + * Layout fixes in the Preferences and Controls windows + * Fix incomplete list of hotkeys in the Preferences dialog + * Fix quitting through Apple Events (Dock menu, App Switcher, AppleScript, etc.) + +Mac OS X Port: + * Fix Growl local notification plugin + * VLC bundle now includes the Growl framework + * Fixes for eyeTV + +Translations: + * Updates of Lithuanian, Estonian, Chinese, Japanese, Bengali, Dutch, Polish, + German, Galician, Traditional Chinese translations + * New Luganda Translation + + +Changes between 1.1.7 and 1.1.8: +-------------------------------- + +Mac OS X Interface: + * New UI graphics by Damien Erambert + +Interfaces: + * Oldrc interface is again the default RC interface, on Windows + * Luarc, luahttp and luatelnet fixes + * Qt and Mac OS X fixes + * numerous Skins2 fixes, notably winamp2 skins + +Encoder: + * new libschroedinger-based Dirac codec encoder, faster than the current one + +Access/Demuxers/Codecs: + * Subtitles auto-detection is back for .txt files + * vod/rtsp server and rtsp input fixes + * mp4 demuxer improvements + * ogg, rstp input, video filters minor fixes + * taglib's replaygain is fixed for mp3 + * vobsub support has an improved auto-detection + * fix a crash in malformed ape files + +Miscellaneous fixes in: + * Pulseaudio audio output, notably for usb cards + * Stacktraces are now limited in size on Windows + * Video resolution is now limited to 8192x8192, for security reasons + See CORE-2011-0208, CVE-2010-3275, CVE-2010-3276 + * Configure and build system improvements + * DirectShow and BDA build headers have been updated + +Translations: + * Update for Finnish, Galician, Dutch, Chinese, German, Japanese, Lithuanian, + Slovak, French, Polish, Estonian, Brazillian Portuguese and Hebrew + * New icelandic translation + + +Changes between 1.1.6 and 1.1.7: +-------------------------------- + +Linux port: + * Integration with the KDE GUI platform is disabled due to KDE bugs + #234484 and #260719. + +Mac OS X port: + * Updated live555 library to fix playback of RTSP and Freebox streams + * Running VLC in 64bit mode requires Mac OS X 10.6.0 or later for speed + and stability reasons + +Demuxers: + * Fix for Matroska / WebM remote code execution vulnerability. + VideoLAN-SA-1102 + +Translations: + * Update for Hebrew, Japanese, Danish and Russian translations + + +Changes between 1.1.6 and 1.1.6.1: +---------------------------------- + +Source: + * Fix libnotify, lirc, pulse compilation and packaging for Unix/Linux + + +Changes between 1.1.5 and 1.1.6: +--------------------------------- + +Audio output: + * Multiple fixes and improvements on PulseAudio output + PACKAGERS are VERY STRONGLY advised to update libpulse to 0.9.22. + Update is required to use PulseAudio with the Phonon-VLC backend (KDE) + and with the Mozilla VLC web browser plugin. + +Access: + * Fix the Audio CD crash when looking for CDDB metadata on Windows + +Decoders: + * Support for MPC SV7 and SV8 on Windows and Mac OS X (Unix was already working) + * Enabled FluidSynth MIDI playback plugin on Mac OS X + * Faster VP8/Webm decoding with recent codecs libraries + * Fix heap corruption in CD+G decoder - CVE-2011-0021 / VideoLAN-SA-1101 + +Demuxers: + * Fix Buffer overflow in Real demuxer - CVE-2010-3907 / VideoLAN-SA-1007 + * Fix some asf/wmv seeking issues, notably when seek didn't go to a keyframe + * Support for 24-bits PCM over RTP (audio/L24) + +Subtitles and renderer: + * Do not auto-detect .txt files for subtitles + * Mark more freetype options as safe + * Mac OS X: fixed fontconfig cache creation + * Fix heap corruption in subtitle decoders, potentially exploitable, + discovered by Harry Sintonen - sintonen at iki.fi - CVE-2011-0522 + +Visualization: + * Fix projectM visualization for Linux in all locales + * Fix projectM visualization support for Windows + * Various projectM improvements: the module should be working now + * Fix goom crash on Windows XP and Mac OS X + +Interfaces: + * Qt4: fixes for media keys processing and MCE remotes + * Qt4: various fixes and portability improvements + +Miscellaneous fixes: + * KDE device solid actions + * XDG screensaver + * Transcode integer overflow + * HTTP Icy metadata reading + * Windows: revert to 1.1.4 performance timers + +Translations: + * Update translations for Chinese, Nippon, Slovak, Estonian, Spanish, Galician, + Swedish, Bulgarian, French, Bengalese, German, Slovak, Japanese, Dutch, + Polish, Hungarian, Indonesian, Sinhala and Irish + + +Changes between 1.1.4.1 and 1.1.5: +---------------------------------- + +Security: + * Fix a Windows crash on accessing Network Shared files/drives, + VideoLAN-SA-1006 + +Access: + * Support for RTP access for H264 streams by specifying the demux in the MRL + +Services Discovery: + * Integration in the playlist, of a list of web shows, provided by channels.com + +Demuxers: + * Game Music Emu (GME) plugin rewritten, using the proper C API + * DVDnav and DVDread fixes for encoding and misc issues + * Playback of live http .Webm streams + * Taglib thread-safety fix + +Decoders: + * Fix decoding of H264 using DxVA2 using Intel IGP, thanks to the donation from + "Puget Systems" + +Skins: + * Add an icon to VLC on Linux + +Video Output: + * fix a bug that could lead to 100% CPU usage on XCB + +Interfaces: + * fix for Qt bug where VLC didn't exit properly on some Windows XP configuration + * fixes on luatelnet and luarc + +Miscellaneous crashes and fixes in various plugins (telnet, live555, theora and + TS-mux, Qt) + +libLVC: + * add libvlc_media_new_fd() to play directly file descriptors (not Win32/Win64) + * Miscellaneous fixes + +Translations: + * Update translations for Walloon, Lithuanian, Spanish, Turkish, Estonian, Dutch, + Bengali, German, Polish, Brazillian Portuguese, Japanese, Italian, Galician, + French and Ukrainian + * Major update and activation on Windows of Modern Greek + * New Asturian translation + + +Changes between 1.1.4 and 1.1.4.1: +---------------------------------- + +Mac OS X: + * Fixed video output on PowerPC-based Macs for videos with widths divisible + by 16 + * Fixed an issue with the Equalizer's 170Hz slider + +Demuxer: + * Fix crash when closing rtsp streams + +Qt interface: + * Fix Windows 7 jumplists with Unicode files + * Various fixes for Windows + +Translations: + * New Armenian translation + * Update translations for Dutch, Estonian, Lithuanian, Japanese, Nynorsk, + Brazillian Portuguese, Armenian, Wallon + + +Changes between 1.1.3 and 1.1.4: +-------------------------------- + +Win32: + * Fix a security issue when loading DLLs, especially in Qt4 and dmo modules, + See VideoLAN-SA-1005 + * Fix folders opening from the interface + +Translations: + * Update translations for Lithuanian, Bengali, Slovak, French, Dutch, Ukrainian + Polish, Simplified Chinese, German and Galician + + +Changes between 1.1.2 and 1.1.3: +-------------------------------- + +Access and demuxers: + * fixes for FTP relatives path and FTP directory support + * fix for podcasts parsing + * DVD: fix an assert error and various memory leaks + +Taglib: + * fix NULL dereferences, as reported by FortiGuard Lab, + CVE-2010-2937 / VideoLAN-SA-1004 + +Playlist: + * fix a regression where the wrong entry was played + * fix m3u playlists exports + +Skins2: + * fix video autoresize behaviour + +Translations: + * Update translations for Dutch, Sinhala, Hebrew, Estonian, Spanish and Bengali + +Windows and Mac: + * Update of many codecs libraries, fixing bugs and improving speed + +Mac: + * architecture-specific installations will now be replaced by specific updates + +BSD: + * Add AltiVec detetion for OpenBSD/powerpc + + +Changes between 1.1.1 and 1.1.2: +-------------------------------- + +Demuxers: + * Avformat fps displaying fix + * TS, fix an issue where some programs would get dropped (fixes DVB issues too) + +Audio filters: + * fix timestamps handling on some filters that provoked issues when playback + of mono streams, especially on Windows + +Windows: + * fix a bug in direct3d video output with old nVidia drivers that broke video + playback with overlay (YUV->RGB) + * fix console output encoding + +Interface and extensions: + * Youtube and other scripts updates + * Misc fixes in Qt4 (especially VLM and EPG dialogs) and MacOS interface + + +Changes between 1.1.0 and 1.1.1: +-------------------------------- + +libVLC: + * New capabilities for libVLC: + * Adjust video filter control: libvlc_adjust_Enable, + libvlc_adjust_Contrast, libvlc_adjust_Brightness, libvlc_adjust_Hue, + libvlc_adjust_Saturation, libvlc_adjust_Gamma + * libvlc_media_player_set_pause() can force the pause state, whereas + libvlc_media_player_pause() would only toggle it. + * libvlc_set_user_agent() configures the "user agent" strings used for some + protocols (HTTP, PulseAudio...). This replaces the --http-user-agent and + the former --user-agent libvlc_new() parameters. + * libvlc_video_set_callbacks() and libvlc_video_set_format() allow grabbing + video frames from a chosen memory location in real-time. This replace the + ugly --vmem-* libvlc_new() parameters in previous versions. + See http://wiki.videolan.org/LibVLC_SampleCode_SDL as an example. + * libvlc_audio_get_delay() and libvlc_audio_set_delay() configure the delay + between audio and video/subpictures for the current input. + * Various fixes and crash preventions, especially when video functions were + called early + +Decoders/Demuxers: + * Fix performance issues with GPU decoding using DxVA2 using ATI graphic cards + You NEED ATI Catalyst 10.7 + * Fix :program selection in TS and DVB-T + * Fixes and improvements for MKV, Avformat and Avcodec modules + * Fix mod (.xm, .s3m, .it) files support on Windows and Mac builds + +Stream output: + * Fix h264 streaming in ts + +Interfaces: + * Qt: fix preferences, hotkeys, messages and some fulscreen behaviour + * Skins: support for mousewheel in fullscreen, fix radialsliders + * Http: fix fullscreen toggle + +Linux: + * Fix pulse closing + * VAAPI small improvements, notably for extraction mode selection + +MacOS: + * Multiple interface and crash fixes + * Deinterlace selection is repaired + * Crashes when playing multi-channel tracks fixes + +Windows: + * Activation of DEP on XP SP3 + * Fix opening of .m3u and .pls playlists + * Fix crash when My Document isn't available + * Fix crash when Windows was getting into standby while playing video + +Translations: + * Update translations for Spanish, Polish, German, Sinhala, Hungarian, Khmer, + Brazilian Portuguese, Chinese, Hebrew, Slovak, Galician + + +Changes between 1.0.6 and 1.1.0: +-------------------------------- + +Important changes for users: + * On Linux, known bugs in the ALSA library might prevent audio output. + Update to alsa-lib 1.0.24 or later, or use the PulseAudio output instead. + +Important changes for packagers: + * The module cache has moved to ${libdir}/vlc/. The module cache can now be + generated at install time except if you use staged installation. In the + later case, you can generate the module cache in your post-inst script + by invoking 'vlc-cache-gen'. If the module cache is not present and vlc + can't write in ${libdir}/vlc/, it will result it vlc taking a long time to + launch each time. + * Most X11-related plugins now use XCB instead of Xlib. VLC now uses + - xproto, + - xcb, xcb-shm, xcb-xv, xcb-randr (from libxcb), + - xcb-keysyms (from xcb-utils), + - x11-xcb (from libx11) - only for GLX support. + * On X11 platforms, a _working_ version of xdg-screensaver is typically + required to inhibit the screensaver during video playback. + +Access: + * Support for the sftp protocol + * Support for CDDB servers for Audio-CD on the Windows port + * New memory input (imem) access and access_demux module to feed VLC from data in memory + * New avio module to use libavformat capabilities for network streams, like rtmp:// + * Port of the screen module from Xlib to XCB + * Port of the dc1394 module from libdc1394 to libdc1394 v2.0 + +Decoders: + * Support for DxVA2 for H.264 decoding on GPU on Windows Vista and 7 + * Support for VAAPI for H.264 decoding on GPU on GNU/Linux + * Support for Audio/Video decoders and encoders using OpenMAX IL components for DSP + + * Support PGS subtitles for Blu-Ray + * Support for HD-DVB subtitles - Display Definition Segment + * Invmem module improvements + * Support for Atrac1 audio codec + * Support for SSE3 and SSE4 capabilities in some codecs + * Multiple improvements for subtitles styles in .SRT and .SSA + * Support for native decoding of Windows Media Speech (Voice) audio codec + * Support for AMR-NB audio codec on the Windows and Mac port + * Support for Indeo5 video codec + * Improvements on the FLAC format (7.1 channels and 88.2/176.4/192 kHz support) + * Direct rendering is used more often with H.264 in avcodec module + * Support for MPEG-4 ALS lossless audio codec + * Support for VP8 codec + * Support for 7.1 channels in vorbis audio + +Demuxers: + * Many fixes on Matroska support (notably seeking) and support for Webm format + * Support for .aob files from DVD-Audio (MLP and LPCM) (Full disc support is NOT present yet) + * Support for ADPCM in .flv streams + * Support for TwinVQ (.vqf) and AMV (.amv) files + * Various EGP improvements + * Support for embedded subtitles in OpenDML and legacy .avi files + * Metadata and cover art improvements + +Playlist: + * WPL and ZPL playlist support + * Lua scripts for Mpora, Vimeo playback and Rockbox FM radios + * New Play-And-Pause function to stop playback on latest video image + * Podcast images are now displayed + +Video Output: + * Rewrite of the video output core and most video outputs + * Added desktop mode to the Direct3D output module. It differs from DirectX + desktop mode, because it hides the desktop icons, but reacts to mouse clicks. + * New x11, glx and xv modules based on XCB + * New deinterlacing modes based on yadif and yadif(x2) + * New audio/video filter to show audio level on the video output + * Enhanced AtmoLight filter with hardware support for + Classic AtmoLight (http://www.vdr-wiki.de/wiki/index.php/Atmo-plugin) + Quattro AtmoLight (use just 4 Classic AtmoLights as one) + MoMoLight (http://www.ambilight4pc.com/momolight/momolight.html) + Simple serial DMX controller (http://www.ulrichradig.de/ search for DMX) + +Extensions: + * New content extensions lua framework + +Audio filters: + * Chorus/Flanger audio filter + * 3F1R to stereo down-mix filter + * Dolby mixer, parameterized equalizer, trivial mixer, scaletempo, bandlimited + resampler, linear resampler, ugly resampler, converter_fixed, DTS to SPDIF + and A/52 to SPDIF filters have been upgraded to the "audio filter2" API + * NEON assembly audio converter module + * Converter filters have been rewritten and extended to support s32 as input + +Service discovery: + * Service discoveries can now be written in lua + * Service discovery for Picture/Music/Video user directories + * Service discovery based on libudev + * Shoutcast Service discoveries are now removed + +Encoders: + * x264, add psy-rd parameter and change default settings + * x264, add profile-limitter same way as x264.exe has, for example + #transcode{vcodec=h264,venc=x264{profile=baseline,level=1.2},vb=384,width=320,height=176} + * x264, defaults to crf=23 as x264.exe-does, if bitrate is given, + uses ABR and if qp-value is set uses CQP + * libx264-version 0.76 or higher is required + * x264 has tune/preset parameters supported + +Stream output: + * New smem module, streaming to memory + * Allow duplicate outputs to be merged, like: + --sout "#duplicate{dst=transcode{vcodec=mp2v},select=es=0,dst=transcode,select=es=1}:std{...}" + +Interfaces: + * Renamed the legacy rc, telnet and http interfaces to oldrc, oldtelnet + and oldhttp. + * rc, telnet and http are now implemented using the lua interface system. + * qt4 interface contains new iconview and listview mode for playlist + +Visualization: + * Support of .milk visualization files using projectM libraries + +Mac OS X Port: + * Vastly improved VLCKit framework + * A new dialog provider for libvlc-internal interaction without full interface + * Improved update detection and installation by using the Sparkle framework + by Andy Matuschak et al. + * New CoreText based text renderer replacing the former ATSUI renderer + * New Video output module (mostly targetting VLCKit) + * Optimised behavior when using the 2009 Apple Remote + +Windows port: + * Integration in Windows 7 taskbar + * Playback of .Midi files is supported through fluidsynth's module + +Maemo port: + * Multiple improvements for N900 compliance and efficiency + * Support for HW accelerated video decoding on N900 + * Improvements to the maemo/hildon interface + +Misc: + * new sqlite module + * --save-config command line option not supported anymore. + * Fixed and reenabled netsync module. + * Improved Solaris port + +Bindings: + * new C++ wrapper around libVLC: libVLCpp + * phonon-VLC backend is now usable + +Removed modules: + * csri codec: use the libass module instead. + * galaktos visualisation: use the new projectM module instead. + * showintf: Useless in Qt and on Mac OS X + * transrate: broken since too long + * Xlib x11, Xlib xvideo, Xlib glx: Use the new XCB modules instead. + * HAL: Use libudev instead. + * gtk_main, gtk_main2, gnome_main, gnome_main2 and pda interfaces + * WinCE, BeOS and qnx interfaces + * opie, qte and qte_main interfaces + * linear_resampler and trivial_resampler are removed: use the ugly one. + * XvMC accelerated modules: use VAAPI instead. + * MGA (Matroska) for Linux: use Linux Framebuffer (or X) instead. + * opengllayer: use macosx_video instead. + * cddax: use cdda instead. + * cmml and tarkin codecs are removed because they are dead codecs. + * realaudio codecs: use libavcodec + * access_file removed in favor of filesystem + * RTMP input and output: use avio module + + +Changes between 1.0.5 and 1.0.6: +-------------------------------- + +Access: + * Fix crash on FTP URI with no file path + +Decoders/Packetizers: + * Fix overflows in A/52, DTS, MPEG Audio and subtitles support + +Demuxers: + * Update LUA script for Youtube pages + * Fix crashes in AVI, ASF and Matroska files + * Fix crashes on malformatted ZIP archives + * Fix crashes and leaks in the FFmpeg/avformat plugin + * Fix crash on invalid XSPF playlist + +X11 port: + * Partial Xlib threading fixes + More complete fixes are available in VLC 1.1.0. Please update! + +Interfaces: + * Fix crash (use after free) in Qt4 bookmarks + * Fix a few crashes in Qt4 playlist + +Translations: + * Simplified Chinese, Estonian, French, Japanese, Korean, Spanish, Swedish + and Walloon translations updated + * Sinhala translation started + +Removed modules: + * RTMP input and output are removed due to security problems. Please update + to VLC 1.1.0 which provides an FFmpeg-based RTMP input if needed. + + +Changes between 1.0.4 and 1.0.5: +-------------------------------- + +Decoders: + * SubRip extra styles improvements + * Fix potential crashes in SSA and svg decoders + +Mac OS X Interface: + * Improved support for the 2009 Apple Remote + +Windows port: + * Use of gcc 4.4.2 to compile instead of gcc 4.2. This might slightly + increase performance and fix x264 issues + +Translations: + * Portuguese Brazilian, Lithuanian, Romanian, Ukrainian, Japanese, Bengali, + Walloon, Galician, Danish, Khmer, Polish, Slovenian, Vietnamese, Finnish + Russian, Slovak translation updates + * New Malayalam, Macedoninan, Nynorsk translations + + +Changes between 1.0.3 and 1.0.4: +-------------------------------- + +Audio outputs: + * Fix deadlocks in the audio output core + * Make PulseAudio the default output if available + +Video outputs: + * Fix fullscreen mode with KDE 4.3.3 and other window managers + * Fix incompatibility with cairo-dock and compositing + +Input: + * Fix DVB scanning regression from VLC 1.0.3 + * Support for XZ-compressed byte stream (LZMA algorithm) + +Playlist: + * Support for .m3u8 playlist files (UTF-8 M3U) + +Unix: + * Support for xcb-keysyms version 0.3.4 or higher + * Fix globalhotkeys on FreeBSD + +Qt4 interface: + * Fix opening V4L version 1 devices + * Fix default destination ports in the streaming wizard + +Translations: + * New Walloon translation + * Swedish, Ukrainian and French translation updates + + +Changes between 1.0.2 and 1.0.3: +-------------------------------- + +Video outputs: + * Fix video quality when resizing the video on Windows Vista and 7, due to + regressions in most popular drivers + * New deinterlacers modules based on yadif and yadif(x2) algorithms + +Decoders: + * Windows version supports now natively the WMA Professional codec, as it + didn't work in the packaged version of 1.0.2 + * Fix downmixing of particual 4.0 AC-3 audio tracks + +Encoders: + * x264 has profile-limitter, like: + #transcode{vcodec=h264,venc=x264{profile=baseline,level=12}..} + +Input: + * Update for appletrailers lua script + * Fixes on the RAR stream filter + * Fix for E-AC3 in ATSC/TS streams + * Various fixes for v4l and v4l2 + * Fix a crash in mjpeg demuxer + +Service discovery: + * New udev module for linux + +Qt4 interface: + * Fixes on the playlist and the stream output panels + +Translations: + * French, Galician, Korean, Polish, Russian, Romanian, Slovak and Ukrainian updates + + +Changes between 1.0.1 and 1.0.2: +-------------------------------- + +Decoders: + * Native support for WMA Professional, without the use of the Win32 dlls + * Fix issues in subtitles, especially SSA ones + * Various fixes on theora and ogg + +Demuxers: + * Various fixes for EPG support in MPEG-TS demuxer + * Fixes for potential stack overflow in .avi, .mp4 and .asf demuxers + +Access: + * Fixes for v4l2 devices + * Fixes for dvb-c channels-scanning + +Qt Interface: + * Fix some playlist sorting issues + +Mac OS X Interface: + * Fixed a crash when updating VLC + * Fixed a crash related to QTKit when opening video files (10.6 only) + * Added the ability to play 2nd media in sync to the primary item (input-slave) + * Added the "Quit after Playback" feature + +Mac OS X Port: + * The "Delete Preferences" script is now delivered as a Universal Binary + with native code for PowerPC, Intel and Intel 64bit + * Full 64bit runtime compatibility on both Mac OS X 10.5 and 10.6 + - no support for Goom and SDL + - limited text rendering support + - This port is still considered as EXPERIMENTAL despite its binary release. + +Encoders: + * MPEG2 transrate stream output removed + * x264 default-values closer to x264.exe defaults. + * x264 rc-behaviour fixes: + - if user defines qp-value, CQP-mode is used + - otherwise if user defines vb=0, CRF-mode is used + - otherwise ABR-mode is used + * x264 set vbv-bufsize/vbv-maxsize better if user hasn't defined these: + - ABR mode set vbv-max-bitrate=bitrate + - vbv-bufsize is bitrate * seconds between keyframes (keyint/fps) + + +Playlist: + * Lua scripts for Mpora and Vimeo playback + +Unix builds: + * Various fixes to enable 1.0 to build on Solaris and OpenBSD + +Translations: + * New Kazakh and Croatian translations + * Lithunanian translation is available on Windows + * Galician, Korean, Nepali, Vietnamese, Ukrainian, Portuguese Brazilian, + Arabic and French translation updates + + +Changes between 1.0.0 and 1.0.1: +-------------------------------- + +Demuxers: + * Fix wmv/asf issues that caused audio to drop + * Various fixes for ac3, mp3, dts and stability for wav format + * Fix seek in RTSP in conformity to RFC 2326 + * Fix Dailymotion access script + * Fix crashes in xspf files handler + * Fix seeking and timing issues in some flv files on Windows version + +Access: + * Add extra caching for files on network shares + * Prevent integer underflow in Real pseudo-RTSP module, discovered by tixxDZ, + DZCORE Labs, Algeria + +Decoders: + * Fix seeking in mpeg2 video files + * Improve SSA subtitles rendering + * Update most codecs for the Windows and Mac version + +Muxers: + * Fix sound recording of .flv files with mp3 audio + +Qt Interface: + * Possibility to change the opacity level of the Fullscreen controller + * Fix various crashes and VIDEO_TS folders opening + +Mac OS X Interface: + * Added options to disable support for Apple Remote and Media Keys + * Fixed options for Volume, Last.fm password and Subtitle Encoding + * Fixed redraw issues when autosizing the video window + * Preferences panel now includes help through tool-tips + * More reliable Information and Messages panels + * Fix various crashes + +Windows port: + * The ZVBI module is now available for Windows, for complete teletext support + +Translations updates for Brazillian, French, German, Korean, Norwegian Nynorsk, +Lithuanian + + +Changes between 0.9.10 and 1.0.0: +--------------------------------- + +Important notes: +---------------- + * Alsa and OSS audio capture has been removed from the v4l and v4l2 accesses. + See 'Access:' for more info. + * Support for Mac OS X 10.4.x was dropped due to its technical limitations + +Playback: + * Instantaneous pausing + * Frame-by-Frame playback + * Finer speed control + * On-the-fly recording for all medias + * Timeshift for most medias + * RTSP trickplay support + * Subtitles core improvements and fixes + +Decoders: + * New AES3 (SMPTE 302M) decoder + * New Dolby Digital Plus - E-AC-3 (A/52b) decoder + * New True HD/MLP decoder and parser + * New Blu-Ray Linear PCM decoder + * New QCELP (Qualcomm PureVoice) decoder + * Improved Real Video 3.0 & 4.0 decoder + * New WMA v1/2 fixed point integer decoder + * Closed Captions using the SCTE-20 standard are now correctly decoded + * Improvement of WavPack decoder to support all integer modes and float mode + * Corrections on 5.1 and 7.1 channel decoding and ordering + +Demuxers: + * Support for Dirac, MLP and RealVideo in Matroska files + * Major improvements in RealMedia files opening (.rm and .rmvb) + * Improvements of the TS demuxer for M2TS files from Blu-Ray and AVCHD + * Metadata for mod files are supported + * GSM codecs in Wav files are supported + * New raw audio demuxer supporting raw PCM streams + * New Dirac demuxer for raw Dirac streams + +Encoders: + * Dirac encoding using libdirac (supported in Ogg and in TS) + * Shine mp3 fixed-point encoder + +Access: + * RTSP authentication with Darwin Streaming Server + * On-the-fly gzip and bzip2 file decompression (except on Windows) + * Playback for video in uncompressed multi-RAR archives + * DVB-S and ATSC cards support on Windows + * New OSS and Alsa accesses. The v4l2 and v4l modules no longer support + OSS or Alsa audio input. Use --input-slave alsa:// or oss:// if needed. + * DVB scanning on linux + * EXPERIMENTAL Blu-Ray Disc and AVCHD Folders support + * On-the-fly zip file decompression and browsing (MRL of the form + zip://file.zip!/file.avi to specify the file - the development form of + zip://file.zip|file.avi is not supported anymore) + * Opening of any file descriptor using 'fd://' + * MTP device access on Unix + * CD-Text support on the cdda module (CD-Audio) + * :start-time and :stop-time can handle sub-second values + +Inputs: + * Mouse cursor support in x11 and win32 screen modules + * Screen module now features partial screen capture and mouse following on + Windows and Mac OS X. + +Playlist: + * Export the playlist in HTML + * Lua script for BBC radio playback + * Better metadata handling and reading + +Linux/Windows interface: + * Global Hotkeys on Windows and Linux + * Various fixes for skins2 interface + * Recently played items list + * Interface toolbar customizations + * Various Improvements on the Qt interface: + - More menus actions + - Finer speed slider + - Improvements on many dialogs + - New dialog for plugins listing + - Fixed-size mode for videos + - Better Teletext, trickplay and encrypted streams control + * Better integration in GTK environments + +Mac OS X Interface: + * Controllable by the Media Keys on modern Apple keyboards (brushed Aluminium) + * Reveal-in-Finder functionality for locally stored items. + * Easy addition of subtitles through the Video menu + * Additional usability improvements + +Stream output: + * Restored the old mpeg2 transrating module. + * Multiple bridge-in instances are now possible. + * bridge-in can be used to configure a placeholder stream. + * Remote Audio Output Protocol (AirTunes) module. + * Fixed mosaic memleak. Mosaics are now usable again. + +Maemo Port: + * New Maemo port with: + - an interface based on Hildon framework. + - scaler based on the swscale_nokia770 library. + +Windows CE Port: + EXPERIMENTAL work for the winCE port has been done. + +Mac OS X Port: + * EXPERIMENTAL 64bit support + * Speed improvements by using llvm-gcc + * New document icons by Dominic Spitaler + * Support for latest iSight models + +Audio output: + * Removed obsolete Esound and aRts plugins + * Surround support for PulseAudio + +Video output: + * Effects (cube, torus, etc.) removed from OpenGL video output + * Video is able to stay in original size and to zoom in fullscreen + (hotkey 'o') while keeping black borders + * Image video output has been rewritten into a video-filter named 'scene'. + The old image video output has been removed. + * Support for scaling and converting video chromas with FFMPEG imgresample was + withdrawn due to bugs. Please use the newer FFMPEG swscale instead. + +Miscellaneous: + * Invmem, a fake codec to display images from external applications + +New Localization: + * Khmer + * Mongolian + * Sorani + + +Changes between 0.9.9a and 0.9.10: +-------------------------------------- + +HTTP Interface: + * Fixed default ACL + +Mac OS X: + * Fixed crashes on multi-screen setups + * Corrected volume and subtitle encoding options in the Preferences + * Improved Information panel behavior, when playlist is not displayed + * Fixed QTCapture input support for the latest iSight models + * Added a menu-item to unlock the video window's aspect ratio + * Fixed redraw issues when autosizing the video window + * Updated libpng, libgpg-error, libgcrypt, fribidi + +Various fixes to the following modules: + * access: + - HTTP, SMB + - updated and additional access scripts (BBC radio, dailymotion, ...) + - Prevent integer underflow in Real pseudo-RTSP module, discovered by tixxDZ, + DZCORE Labs, Algeria + * stream out: + - RTP, RTSP VoD, Mosaic Bridge + * decoder: + - TSCC + + +Changes between 0.9.9 and 0.9.9a: +--------------------------------- + +Mac OS X: + * Updated multiple 3rd party libraries to keep in sync with the Win32 port + * Playback fixes for PowerPC-based Macs + + +Changes between 0.9.8a and 0.9.9: +--------------------------------- + +Decoders: + * Experimental new decoder for Real Video 3.0 & 4.0 + +Demuxers: + * Various fixes related to real demuxer + +Mac OS X Interface: + * Fixed circumstances, which could lead to an empty Information panel + - Note that VLC will show information on the currently _selected_ item + instead of the currently _playing_ item, if the playlist is visible in the + main controller window. + * Fixed multiple UTF8 issues in the Streaming / Exporting Wizard + +Mac OS X Port: + * Improved video playback performance on Intel-based Macs + +New Localizations: + * Indonesian + * Bengali + * Updates of other localizations + +Various bugfixes: + * Support for receiving RTP packets on odd port numbers. + * Lots of small bugfixes. + * Correct Fullscreen behaviour on Multi-Screen setups on Windows + * Telnet fixes on Windows + * Resampling fixes when transcoding + + +Changes between 0.9.6 and 0.9.8a: +--------------------------------- + +Security update: + * Fixed buffer overflow in Real demuxer (SA-0811, CVE-2008-5276) + +Bunch of small bugfixes. + + +Changes between 0.9.5 and 0.9.6: +-------------------------------- +New Localizations: + * Ukrainian + +Security updates: + * Fixed overflow in CUE support from VCD access (SA-0810, CVE-2008-5032) + * Fixed overflow in RealText subtitles support (SA-0810, CVE-2008-5036) + + +Changes between 0.9.4 and 0.9.5: +-------------------------------- +Security updates: + * Fixed buffer overflow in TiVo demuxer (SA-0809, CVE-2008-4686, CVE-2008-4654) + * Fixed libpng CVE-2008-3964 in Win32 and MacOS builds + +Features: + * Closed Caption EIA 608/708 parsing enabled for libmpeg2 + +Various bugfixes: + * Fixed various potential crashes and memleaks + * Fixed issues with reading from files (especially non-local) + +Windows port: + * Fix bug where interface was "eating" some media keys + * Fix some crashes in DirectShow access + +Qt Interface: + * Fix bug when the resetting of preferences didn't reset the dialog states + * Right-click menu to select playlist columns reenabled + * Various fixed in playlist + +Access: + * MMAP module is now deactivated by default + +Translations: + * Update of Brazillian, Swedish translation + + +Changes between 0.9.3 and 0.9.4: +------------------------------------ +Various bugfixes: + * Crashes fixed in ogg, vobsub, dvdread + * Fixes several memory leaks. + +Mac OS X port: + * Apple machines without Quartz Extreme are no longer supported (use 0.9.2 or earlier ) + * Fixed a crash with deletion of old preferences. + * Fixed targetname for downloaded updates + +Windows port: + * Stability fix for the video output. + + +Changes between 0.9.2 and 0.9.3: +-------------------------------- + +Various bugfixes: + * Fixed DTS channel order on 5.1 systems + * Fixed pausing behavior for subtitles and for Audio-CD + * Multiple subtitles and podcast fixes + * Various crashes fixed in PS, SSA, mkv, xspf, freetype + * Fixed update system bugs + * Other bug fixes (dvd language selection, subtitle colours, HTTP keep-alive...+) + +Mac OS X port: + * Fixed ffmpeg slowness on PowerPC-based Macs + * Fixed crash on startup when installed on old preferences + * Fixed bug in directory opening on Mac OS X + * Fixed font selection in the Simple Preferences + * Thicker border to the subtitle renderer + * Fixed the appearance of playlist items in the Streaming/Transcoding Wizard + * Fixed AC3 passthrough on Mac OS X + * Fixed behavior of the Volume Normalizer settings on Mac OS X + * Removed the deprecated QuickDraw video output module to avoid crashes on + modern Mac OS X versions + +Windows port: + * Fixed sensitivity of Fullscreen Controller + * Fixed error messages on startup when VLC wasn't correctly uninstalled + before installation + * Fix showing of controller when returning from fullscreen playback + * Multiple directory and path location fixes. + +Qt4 interface: + * Added Faster/Slower icons to the controller panel + * Fixed lost playlist columns when switching the playlist view + * Added needed options to Simple preferences (to avoid NVIDIA drivers issues) + * Fullscreen controller: added time label, remembering of last position + * Fixed drag'n drop behaviour on the playlist + * Multiple other fixes (Enter hotkey in preferences, Skins selection...) + + +Changes between 0.9.1 and 0.9.2: +-------------------------------- + + * Restored the old behavior of --sout-keep. It is now de-activated by default. + * Skins2 interface repaired on Windows. + * Multiple bugfixes. + + +Changes between 0.9.1 and 0.9.0: +-------------------------------- + + * Multiple bug fixes. + + +Changes between 0.8.6i and 0.9.0: +--------------------------------- + +Important notes: +---------------- + * This release will need Windows 2000 and Mac OS X 10.4 (Tiger), or more + recent to work correctly + * The HTTP interface is now only available on the local machine by default. + If you want to make it available from other machines, you will have to + edit the ".hosts" file. + - On UNIX/Linux, the file is in /usr/share/vlc/http/.hosts + If you're using the old http interface, it's located in + /usr/share/vlc/http/old/.hosts + - On Windows they are in C:\Program Files\VideoLAN\VLC\http\.hosts and + C:\Program Files\VideoLAN\VLC\http\old\.hosts + - On Mac OS X, you can find it in VLC.app/Contents/MacOS/share/http/.hosts + and respectively in VLC.app/Contents/MacOS/share/http/old/.hosts + * This version of VLC contains a new interface for Windows and Linux. + This interface has a fullscreen controller and simplified preferences. + This interface lacks the "Streaming Wizard" that used to be present in VLC + 0.8.6, but provides basic profiles. + * The behavior of --sout-keep was changed. It's now activated by default. + * The marq, mosaic and logo commands in the rc interface changed. They + now require a target name as their first argument. Example: + vlc --sub-filter "marq@test{marquee=Hello}" -I rc + You can then use commands like: @test marq-marquee Goodbye + If you didn't name the object using @test, its name will default to the + plugin name (hence 'marq') in this example. + These new commands are also available in the telnet interface. + * The "rtp" access output module has been removed. + Please use the RTP stream output instead, e.g.: + Old: '#std{access=rtp,mux=ts,dst=239.255.1.2:5004,sap}' + New: '#rtp{mux=ts,dst=239.255.1.2,port=5004,sap}' + * You now need to append --m3u-extvlcopt to your command line to enable + EXTVLCOPT options parsing in m3u playlists. Note that only a limited set + of options is available to m3u playlists (CVE-2007-6683). + * The old access:url syntax is no longer supported to resolve ambiguities + with some file names. Use access://url instead. + E.g.: vlc:quit -> vlc://quit ; + udp:@239.255.12.12 -> udp://@239.255.12.12 + * The ffmpeg module has been removed and replaced by the new avcodec, + avformat, swscale (or imgresample if you use a swscale-less ffmpeg build) + and postproc modules. + * The web plugins ActiveX (IE)/Firefox/Mozilla/Safari now recognize the + following states: IDLE/CLOSE=0, OPENING=1, BUFFERING=2, PLAYING=3, PAUSED=4, + STOPPING=5, FORWARD=6, BACKWARD=7, ENDED=8, ERROR=9. With FORWARD and + BACKWARD being reserved for future implementations and are thus not + functional atm. + * Croping and padding in transcode are now done using the croppadd video + filter. For example: + transcode{vcodec=mp2v,vfilter=croppadd{cropttop=20,cropbottom=30,paddleft=100}} + * Canvas setting in transcode is now done using the canvas video filter. + For example: + transcode{vcodec=mp2v,vfilter=canvas{width=640,height=480}} + * Glide video output module has been removed. + +Changes: +-------- + +Security updates: + * Updated libfreetype on Windows and Mac OS X (CVE-2008-1806, CVE-2008-1806, + CVE-2008-1807) + * TTA Parser improvements (CVE-2008-3732) + * MMS Access Module improvements (CVE-2008-3794 ) + +Playlist: + * Vastly improved playlist support: + * Media library creation to save all your playlist items + * "Live search" + * Shoutcast TV listings + * Audioscrobbler/Last.FM support + * Album art support + * User definable Lua playlist scripts. See share/lua/playlist/README.txt + (Default scripts open YouTube, DailyMotion, metacafe, Google Video and + lots of other URLs) + * User definable Lua album art fetcher scripts. See share/lua/meta/README.txt + +Inputs: + * Video for Linux 2 (V4L2) input support + * UDP-Lite transport for RTP/AVP + * DCCP transport for RTP/AVP + * Proxy support for MMSH stream + * JACK audio input support + * Input run time option (improved live stream recording) + * BDA devices access module for DVB-C/S/T capture cards on Microsoft Windows + * Re-written Screen access module for Mac OS X + using OpenGL instead of QuickDraw + * Screen module now supports partial screen capture and mouse following on X11. + * Experimental EyeTV access module + This requires the user to install a plugin to EyeTV.app + (available as a separate download). + * Simple RTP input (with MPEG A/V, G.711 and PCM support). + * RTMP input support + * QTKit-based Input module for Mac OS X allowing display and streaming of video + taken from all iSight-labelled video cameras (no audio support) + * HTTP access now supports gzip compressed data and Digest Access + Authentication. + * New options to reduce latency between arrival of raw data and display of + frames. (--auto-adjust-pts-delay and --use-stream-immediate) + +Demuxers: + * MP4 gpac and Apple chapter support + * Fixed playback of AIFF stereo files + * Fixed audio glitch on seek + * Improved FLAC demuxer (duration / current time / meta data) + * AAC tags support + * APEv1/2 tags support + * Improved ID3v2 tags support + * Improved Ogg/Vorbis tags support + * Raw video support + * Standard MIDI File (types 0 & 1) support + * TiVo Series 2 support + * CD+G karaoke Files support + * MXF files support + * OMA support + +Decoders: + * VP60/VP61/VP6F/VP62 support + * Flash Screen Video support + * CamStudio Screen Video support + * DosBox Capture support + * Karl Morton's Video support + * limited atrac3 support + * Fraps support + * Fluidsynth MIDI software synthesis (with external sound fonts) + * New codec FOURCCs to support more specific files: + Avid, FCP, Sony, Samsung, ... + * H.264 PAFF support + * DNxHD / VC-3 support + * NellyMoser ASAO support + * APE (Monkey audio) support + * RealVideo support (with the RealVideo run-time) + * Dirac video support using libschroedinger + +Subtitles: + * Closed Caption Decoder (DVD, ReplayTV, TiVo, DVB/ATSC) + * VBI & EBU (Teletext) support (*nix, Mac OS) + * Ogg/Kate subtitles support + * AQTitle subtitles support + * MKV USF subtitles support + * HTML-based subtitles support + * MPSub subtitles support + * JacoSub subtitles basic support + * MPL2 subtitles support + * Rewrite of ASS/SSA scripts and subtitles support + * PowerDivx (.psb) Subtitles support + * Realtext subtitle support + * DKS subtitle support + * SubViewer 1.0 (SubRip09) subtitles support + * Correct Right-to-left languages in subtitles support + +Encoders: + * Flash Screen Video support + * Improved H.264 encoding speed + +Video outputs and filters: + * New CoreAnimation-based output module (VLCKit framework on OS X only) + * Adjust, Invert and Distort (now split into Wave, Ripple, Gradient and + Psychedelic) video filters can now be streamed + * New puzzle video output filter + * Re-written motion detection video filter + * New extract video filter (extract Red, Green and Blue components from a + video) + * New sharpen video filter (increase the contrast of adjacent pixels) + * New erase video filter (removes logos from a video) + * Enhanced subtitles' renderer to support bold, italic and some HTML tags + (Google Summer of Code Student project) + * Support for RGBA and I420 blending. + The latter improves Mosaic CPU usage *a lot*. + * New transparency mask video filter (for use with the mosaic_bridge module). + * New bluescreen video filter (for use with the mosaic_bridge module). + This was previously part of the mosaic module. + * Fixed random characters problem in RSS filter. + * Add rotate-deciangle for more precision on rotate filter + * Support for Intel SSE2 instruction set in chroma converters + * Improved use of Intel MMX instruction set in chroma converters + * New croppadd and canvas video filters. + +Audio outputs and filters: + * Replay gain support + * Audio playback when going slower/faster (with pitch correction via + new scaletempo audio filter) + * New spatializer audio filter + * Correct DTS output via S/PDIF + +Stream output: + * RTSP for TS-multiplexed broadcast streams + * New RTP payload formats: + * Speex voice audio codec + * ITU T.140 (for text, subtitles) output + * G.711 (both A-law and µ-law) output + * UDP-Lite transport for RTP + * DCCP transport for RTP + * Lots of fixes for RTSP broadcasting + * RTMP output + +Interfaces: + * All + * New Simple Preferences dialogs showing the most important settings in an + end-user suitable way. + * Improved user interaction + * Improved mouse gestures + * Vastly improved Update checker + * Full support for meta data editing (ID3v2, Ogg/Vorbis, AAC, APEv1/2) + * Windows/Linux + * Brand new interface for Linux and Windows, based on the Qt toolkit + * Fullscreen controller (transparency on Linux+Composite) + * Mac OS X + * Improved video output features + * Online access to VideoLAN's Help Wiki within VLC + * New setting to disable the "Recent Items" service + * When playing Radio (live) streams, the current track is shown correctly + * Correct appearance on Macs using Aqua's graphite theme + * Simplified Extended Controls panel + * Ncurses: + * Correctly displays wide characters when using an UTF-8 locale, + if libncursesw is available. + * Some nice colors if the terminal supports it (most do) + * Experimental Lua interface modules. See vlc -I lua and + share/lua/intf/README.txt for more info. + * Unix + * Option to allow only one running instance, using D-Bus interface. + * D-Bus Interface implementing the MPRIS + (Media Player Remote Interfacing specification), a common dbus control + interface for media players that intends to become an xdg standard when + finished: http://wiki.xmms2.xmms.se/index.php/Media_Player_Interfaces . + * Motion module using disk accelerometers to keep video horizontal + * Plugin to set Telepathy presence message using MissionControl + * Fixed VLM schedule time on Linux + +Linux Port: + * VLC now complies with the XDG Base Directory Specification version 0.6 + http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html + (which means that VLC doesn't use the $HOME/.vlc directory anymore) + +Mac OS X Port: + * Mac OS X Framework "VLCKit" that can be used to embed VLC in third party + applications (Google Summer of Code Student project, Mac OS X 10.5 only) + * New text renderer based on Quartz replacing the existing Freetype solution + * Complete compatibility with Mac OS X 10.5 Leopard + * It is now required to compile a fully featured build + * The support of Mac OS X 10.3.9 and QuickTime 6.x was discontinued. + +LibVLC: + * Event management and various improvements in libvlc + (Part of a Google Summer of Code Student project) + +New Localizations: + * Finnish + * Persian + * Polish + * Punjabi + * Bulgarian + +Developers: + * LibVLC now supports externally built plugins properly. + A "vlc-plugin" pkg-config package is provided. + * Java bindings are now built from a separate source. + + +Changes between 0.8.6h and 0.8.6i: +---------------------------------- + +Security updates: + * Fixed integer overflow in WAV demuxer (CVE-2008-2430) + +Various bugfixes: + * Fixed option to use shared memory within the GLX video output module + * Improved galaktos-based audio visualizations on FreeBSD + * Miscellaneous bugfixes in multiple modules and in libvlc + (transcode stream output, OSD menu video filter, VCD input, + SAP services discovery, http control interface) + * Updated Polish translation + + +Changes between 0.8.6g and 0.8.6h: +---------------------------------- + +Security updates: + * Updated GnuTLS and libgcrypt on Windows and Mac OS X (CVE-2008-1948, + CVE-2008-1949, CVE-2008-1950) + * Updated libxml2 on Windows and Mac OS X (CVE-2007-6284) + +Goodies: + * Updated libebml and libmatroska on Mac OS X. Reliability improvements. + * Miscellaneous bugfixes in multiple modules and in libvlc + (ftp access, record access filter, video filters, RC interface, + playlist demuxer, IP networking, MPJPEG muxer, stream outputs) + * Improved support for MPEG2 content created by Final Cut Pro + * More reliable audio reception for MPEG TS streams + * Fixed a regression in 0.8.6g where usage of the snapshot feature could lead + to an unexpected application termination + * New Serbian translation + * Updated Romanian translation + + +Changes between 0.8.6f and 0.8.6g: +---------------------------------- + +Security updates: + * Removed VLC variable settings from Mozilla and ActiveX + (CVE-2007-6683, VideoLAN-SA-0804) + * Removed loading plugins from the current directory + (CVE-2008-2147, VideoLAN-SA-0805) + * Updated libpng on Windows and Mac OS X (CVE-2008-1382) + * Fixed libid3tag denial of service (CVE-2008-2109) + * Fixed libvorbis vulnerabilities (CVE-2008-1419, CVE-2008-1420, CVE-2008-1423) + * Fixed speex insufficient boundary check (CVE-2008-1686, oCERT-2008-004) + +Various bugfixes: + * Fixed various memory leaks, improving stability when running as a server + * Fixed compilation with recent versions of FFmpeg + * Correctly parses SAP announcements from MPEG-TS + * Fixed AAC resampling + * The Fullscreen Controller appears correctly on Mac OS X, + if the 'Always-on-top' video option was selected. + + +Changes between 0.8.6e and 0.8.6f: +---------------------------------- + +Security updates: + * Really fixed subtitle buffer overflow (CVE-2007-6681, CVE-2008-1881) + * Fixed Real RTSP code execution problem (CVE-2008-0073) + * Fixed MP4 integer overflows (CVE-2008-1489, CVE-2008-1768) + * Fixed cinepak vulnerabilities (CVE-2008-1769) + - More information can be found in VideoLAN-SA-0801 and VideoLAN-SA-0803. + +Various bugfixes: + * The Mozilla plugin registers a usable range of MIME-types on Mac OS X + * Improved VLC's video output behavior on multi-screen setups running Mac OS X + * Fixed crashes in H264 packetizer + * Close MMS access on network timeout + * Fix some problems with AAC decoder & packetizer + + +Changes between 0.8.6d and 0.8.6e: +---------------------------------- + +Various bugfixes: + * Resume playback for viewing content over FTP + * Fixed XShm detection with remote X11 + +Security updates: + * Subtitle demuxers overflow (CVE-2007-6681) + * HTTP listener format string injection (CVE-2007-6682) + * Fixed buffer overflow in the SDL_image library (CVE-2006-4484) + * Real RTSP overflows (CVE-2008-0225, CVE-2008-0295, CVE-2008-0296, + VideoLAN-SA-0801) + * Arbitrary memory overwrite in the MP4 demuxer (CORE-2008-0130, + VideoLAN-SA-0802) + +Audio filter: + * Fixed DTS to S/PDIF converter + +Audio output: + * Fixed 5.1 audio on ALSA + +Access: + * Fixed some RTSP hanging and user/password passing through RTSP URLs + +Stream output: + * Fixed waiting for SPS/PPS problem in H.264 packetizer + +Encoders: + * Improved compatibility for creating H.264 video files playable on iPhones + * Improved detection of optimal amount of threads for multi-threaded H.264 + encoding on multi-cpu systems + - Note that this is used when transcode threads is set to 0 (default) + - Not supported on Windows (multiple threads require manual configuration) + +Mac OS X Interface & Port: + * Restored compatibility with Mac OS X 10.3.9 + * Corrected behavior of the Preferences panel + * VLC no longer crashes on quit while playing + +Localization: + * Updated Romanian and Polish translations + + +Changes between 0.8.6c and 0.8.6d: +---------------------------------- + +Various bugfixes: + * Mozilla plugin: supports a reasonable amount of MIME types on Windows + * Linux: Fixed S/PDIF passthrough with ALSA + * Automatic recovery on unexpected stream discontinuity (clock gap) occurrences + in input + * Use field order (top/bottom) for correct bob/linear deinterlacing + * Fix invalid free in bookmarks loading code + +Windows and Mac OS Binaries + * FLAC Security Update (CVE-2007-4619) to prevent multiple integer overflows + +Active X plugin: + * Security update (VideoLAN-SA-0703, CVE-2007-6262) + +Mac OS X Interface & Port: + * Apple Remote support on Mac OS X 10.5 Leopard with enhanced functionality + * Improved Video Output compatibility for Mac OS X 10.5 Leopard + * Improved behavior of the Fullscreen Controller and mode changes between + Fullscreen and Windowed Video Output + * Softened the white flash artifacts that may appear during the transition of + two different movies + * Support for current Ogg file formats + NOTE: This release requires Mac OS X 10.4 or higher. + Mac OS X 10.3.9 is not supported anymore. + +Encoders: + * Improved H.264 encoding speed on Mac OS X + +Other changes: + * The automatic updating facility was removed + * You now need to append --m3u-extvlcopt to your command line to enable + EXTVLCOPT options parsing in m3u playlists. + * RTSP server remote denial of service fixed (CVE-2007-6684). + + +Changes between 0.8.6b and 0.8.6c: +---------------------------------- + +Various bugfixes, notably: + * Windows Vista compatibility + * Cropping in Direct3D + * Fullscreen change crash on Mac OS X + * RSS filter string overflow + * Few memory leaks + * MKV demuxer crash (related to seeking) + +CDDA / Vorbis / Theora / SAP plugins: + * Security updates (VideoLAN-SA-0702, CVE-2007-3316, US-CERT VU#200928) + +Demuxers: + * Fixed a problem with detecting embedded subtitles (GAB2 format) in AVI + * Prevent WAV file integer overflow (CVE-2007-3467 & CVE-2007-3468) + +Decoders: + * Updated FLAC API compatibility + +Input: + * Support for new v4l2 encoder API + +Localisation: + * New localisation: Arabic, Persian + + +Changes between 0.8.6a and 0.8.6b: +---------------------------------- + +Various bugfixes, notably: + * Out-of-bound read in demuxers + * Demuxers crashes (incl. CVE-2007-0256) + * Mac OS X Interface crashes + * VP31 decoding on Windows platforms + * Direct3D Video Output modifications for Vista compatibility + * Correct behaviour for feeding streams to Icecast or Shoutcast servers + +Decoders: + * Enhanced Flash Video support incl. VP61 and VP60 + * Teletext subtitles (telx) support + +Webbrowser plugins: + * Rectified behaviour and improved usability + +Mac OS X Interface & Port: + * Diverse usability improvements + * New wizard option to embed subtitles + * Screensaver/automatic sleep mode is enabled when a video is paused + * Improved Delete-Preferences-Script + + +Changes between 0.8.6 and 0.8.6a: +--------------------------------- + +CDDA / VCDX plugins: + * Security updates (VideoLAN-SA-0701, CVE-2007-0017) + +Mac OS X Interface: + * Fullscreen controller improvements + + +Changes between 0.8.5 and 0.8.6: +-------------------------------- + +Playlist: + * Shoutcast TV listings support + +Input: + * Support for RTSP authentication + * Support for adding subtitles on the fly + * Fixed MPEG-PS duration calculation + * ATSC support for DVB input + * Partial reading support for DVR-ms recordings + * Partial reading support for MXF and GXF fileformat + * Improved support for Flash Video files + +Decoders: + * Native WMV9/VC-1 support + * WMA Speech support (through binary codecs) + * VP5/VP6 - Flash Video support (not VP61) + * The True Audio Lossless codec support + * Matroska WavPack support + * Improved H.264 support (interlaced, speed improvements etc but no PAFF) + * Fixed a problem with MPEG2 field pictures + * Fixed swapped colors on DVB subtitles + +Video output: + * Additional OpenGL effects (cylinder, torus, sphere, ...) + * Experimental Direct3D 9 video output (win32). Best served on Vista :) + * Improved libcaca support + +Interfaces: + * All + * New hotkeys for crop and zoom + * Support for snapshots from the HTTP interface + * Windows + * Systray support in skins + * OS X + * Support for Apple Remote control + * Fullscreen controller panel (artwork by Simon Damkjær Andersen) + * New playmode buttons (artwork by Simon Damkjær Andersen) + * right/ctrl-click menu in video outputs + * Main Menu uses autohide when playing videos in fullscreen mode + * Linux + * Notifications using notification-daemon + +Windows port: + * Support for Unicode filenames (Windows NT and above) + Windows 9x/ME users: + - Please note that these versions of Windows are not officially supported + - Unicode support for Windows 9x/ME applications is available through the + Microsoft Layer for Unicode available from the following location: + http://www.microsoft.com.nsatc.net/globaldev/handson/dev/mslu_announce.mspx + Download the MSLU package (unicows) and extract the content into the folder + C:\Windows\System + * Fixed IPv6 support on the client side + * Fixed disable screensaver (Direct3D and DirectX video output) + +Localization: + * Add Czech + * Add Slovak + * Add Malay + * Add Slovenian + +Developers: + * Updates to the libvlc API + * Fixes for the mozilla and activeX plugins + + +Changes between 0.8.4a and 0.8.5 +-------------------------------- + +Core support: + * Statistics collection (bitrates, packets, connections, ...) + * Support for downloading updates + * Updated strings + +Input: + * Initial support for RTSP-over-HTTP (to allow NAT traversal) + * Linux DV (Digital Video - Firewire) input + * Improvements to the Audio CD input + - Separate playlist entries for the tracks + - Support for CDDB + * Support for more DVB (satellite) encryption modules + * Improved subtitles encoding support + * Improved support for playing MP4 files from the Web + +Decoders: + * Cook (Real audio) support + +Playlist / Services discovery: + * XSPF playlist support + * Podcast support + * Updated Shoutcast to use new listing + +Audio output: + * New JACK audio output + +Video output: + * New video filters: + - magnify: allows you to zoom on part of the image + - gradient and edge detection: "cartoon-like" effect + - bluescreen: overlay parts of a video transparently on another one + * Logo video filter: can now loop through multiple images + * RSS video filter: display feed images. Support for Atom feeds. + * Improvements to the subtitles rendering + +Stream output: + * Initial support for throttling users on VOD streams + +Interfaces: + * System to inform the user and request information + - HTTP authentication + - Fatal errors + - ... + * wxWidgets + - VLM (VideoLAN Media Manager) control panel + - Improved media information panel (shows statistics, metadata, ...) + - Drag & Drop support in the playlist + * Skins2 + - New default skin + - Support for Winamp 2 skins + - Improved playlist handling + - Support for popup menus, animated bitmaps, equalizer, ... + * OS X + - Embedded Video output + - new Go-To-Specific-Time feature + - Video cropping and aspect ratio changing while playing + - Improved media information panel (shows statistics, metadata, ...) + - support for processing multiple items with the wizard in a single run + - option to save selections in the wizard for a session (default enabled) + * HTTP + - New default interface pages for VLC and VLM (including a mosaic wizard) + - A bunch of new RPN functions + +Windows Port: + * MSN messenger "Now playing" support + +OS X Port: + * Mac-Intel compatibility + * Enhanced support of various audio output devices + * Growl "Now playing" support + +*Nix port: + * Ability to log to syslog + * Root wrapper to avoid running VLC as root + +Developers: + * New libvlc API (not finished yet) + * Java bindings + * A bit more automatic testing + + +Changes between 0.8.4 and 0.8.4a: +--------------------------------- + +Audio output: + * Fix a52 over spdif in alsa + * SPDIF output available again in the Mac OS X Audio menu. + +Decoder: + * Add support for new BMP and Cook (RealAudio G2) decoders in ffmpeg + * Add support for some non-standard FOURCCs used for H.264/H.263 + +Demux: + * Fix bug with some HE-AAC audio tracks + +Services Discovery: + * HAL fixes, should now work with new API + * SAP, fix 20 second freeze on windows + * UPnP fixes + * Avahi 0.6 support + +Interfaces: + * Mac OS X + - fixed encoding of H.264/H.263 content when using the wizard + + +Changes between 0.8.2 and 0.8.4: +-------------------------------- + +Core support: + * Internal strings handling is now UTF-8 based + * New OSD system + +Video output: + * Fixed problems with OpenGL output + * New --monitor-par (pixel aspect ratio) option + * Fixed display problems with HDTV-1080 format + +Input: + * Improved DVB support for satellite bands other than Ku-band + * IPv6 and Extended passive mode support for FTP + * IPv6 Source Specific Multicast support + * GnomeVFS input module + * Support for RTP packet reordering + * Fixed syntax for FTP URLs + +Decoders: + * Support for libSDL_image to import different image types + * Musepack decoder using libmpdec + * QDM2 audio support (needs ffmpeg from 19th Oct 2005 or later) + +Services discovery: + * UPnP service discovery (Linux only at the moment) + * Bonjour service discovery using avahi (Linux only) + +Video filters: + * RSS feed overlay + +Audio filters: +* Fixes, enhancements and new options related to the Headphone Channel + Mixer and Dolby Surround + +Stream output: + * New shout output module to forward streams to icecast servers + * Fixed several SAP and SDP announcement bugs + * Fixed MTU handling to avoid IP fragments + +Interfaces: +- new cone icon by Richard ¯iestad (Eurodata, retron.info) + * Mac OS X + - New streaming and transcoding wizard + - New extended controls panel + - New bookmarks window + - Fixed playlist sorting + - Fixed drag-and-drop inside the playlist + * wxWidgets + - Rename wxWindows interface in wxWidgets. + - All the --wxwin-* options are now --wx-* + - Support for RTP streaming in Stream Output dialog + - Now require wx2.6 with Unicode support + * Skins2 + - Tree playlist + * HTTP + - New RPN functions to control VLC features (see play-howto) + - Facilities to correctly handle non-ASCII characters and spaces in + the names of files + - Include macro to include other files + - CGI 1.0 support + +ActiveX plugin: +* Should now work outside IE as well + +Mac OS X port: +* New script to delete the preferences automatically + +Windows port: +* Fixed bandwidth problems of HTTP streaming +* Fixed audio problems with DirectX audio output + +Translations: + The following languages were added: + * Galician + * Korean + * Romanian + * Simplified Chinese + The following languages were re-added: + * Swedish + + +Changes between 0.8.1 and 0.8.2: +-------------------------------- + +Core support: + * Rewrite of the playlist + - Tree structure + - Input preparsing (for meta-data) + - Grouping (by artist, ...) support + * Preferences improvements: + - New organization, designed to improve usability + - New configuration types (list of modules, ...) + * XML parsers + * Core image manipulation support + * Client-side SSL/TLS support + * SSL Client certificates checking support (allows for secure VoD) + * Renamed --spu-channel to --sub-track + * Renamed --spumargin to --sub-margin + * Renamed --audio-channel to --audio-track + * Renamed --filter to --vout-filter + * filters, extra interfaces, visualizations and service discovery modules are + now separated by ':' instead of ',' + * Access filter architecture + * Track selection based on preferred language (--sub-language and --audio-language) + * Zsh autocompletion for VLC's arguments + * Many bugfixes... + +Input/Demuxers: + * Support for SOCKS proxy + * Support for Shoutcast Meta-data + * Support for (HE-)AAC raw-audio streams + * Support for images on a HTTP server that get refreshed on the server + * Better support for Kasenna streams + * RTSP UDP->TCP rollover support + * Massive Matroska improvements + * Support for XA and VOC audio files + * TiVo demuxer + * Samba (Windows shares) access module + * Improved CDDAX module (uses several playlist items) + * Fixes to Linux DVB support + * Fix the "negative subtitles delay" bug + * Support for FTP over IPv6 + +Decoders / Encoders: + * Dirac decoder and encoder + * PNG decoder/encoder + * Improvements to DVB subtitles encoder + * Support for Apple Lossless Audio Codec + +Access filters: + * New Record and Timeshift filters + +Services discovery: + * New type of modules, that add items to the playlist + * Brand new SAP module + * To enable SAP, you now need to use "-S sap" or add SAP in + the "Manage->Services Discovery" menu + ( IPv6 SAP is now enabled by default ) + * Non-standard support for HTTP streams SAP announces removed + * HAL (Hardware Abstraction Layer) discovery + * DAAP (iTunes shares) support + * Shoutcast + +Audio output: + * Support for 20/24 bits LPCM + +Video output: + * Video snapshot support (png or jpg) + * Image file video output (png) + * Motion detection filter (can trigger playlist actions) + * Improvements to wall video filter + * Support for font color and opacity + +Stream output: + * Muxers + - ASF improvements + * VLM / VoD + - Ability to load a configuration file on startup + - Seeking support in VoD streams + * Mosaic (picture-in-picture system) + +Interfaces: + * wxWidgets + - Redesigned playlist : add playlist, add directory, ... + - Improved preferences + - Improvements to the wizard + - DVD, VCD and Audio CD navigation buttons + * MacOS X + - Redesigned playlist + - Improved preferences + * Skins + - Support for multiple actions + - Fixes + * HTTP + - Support for the new playlist system + * Lirc + - Now uses new config settings. See doc/lirc/example.lirc + +Windows port: + * Screensaver disabling fix + * DirectShow tuner configuration + * Support for no-decoration windows + +MacOS X port: + * Many Mac OS X 10.4 Tiger related fixes + * The OpenGL video output is back + * A new audio module that should work more reliable for analog audio output in various configurations. + - Supports multichannel discrete analog output + - Digital audio output requires you to change a preference setting because it + is not yet available in the new module + - Please read the README.MacOSX.rtf file for more information. + +BeOS port: + * Support for single-buffered overlay + +Pocket PC port: + * Many fixes + * New interface + * New video output + +Mozilla Plugin: + * Javascript fixes + * Mozilla plugin for MacOS X is back (not yet distributed) + +IE Plugin: + * Brand new Internet Explorer ActiveX plugin + +Translations: + The following languages were added: + * Catalan + * Danish + * Turkish + + +Changes between 0.8.0 and 0.8.1: +-------------------------------- + +Core support: + * Include TLS/SSL API (on plattforms where libgnutls is available) + * SSL support in the HTTP daemon (HTTP stream output and HTTP interface) + +Windows port: + * Fixed win32 multichannel audio output support (which was broken in 0.8.0) + * Fixed DV and MPEG (WinTV PVR 250/350) support in the dshow input + * Fixed spurious taskbar item after switching to fullscreen + +WinCE port: + * A few more updates (we still miss an interface and a fast video output). + +Audio Output: + * Portaudio audio output plugin improvements + +Video Output: + * Proper subpictures scaling using the aspect-ratio info when available + +Demuxers: + * Fixed crash with ODML avi files + * Fixed autodetection of VCD/SVCD bin files + * Supports Kasenna VoD (MPEG2 only) and simulcast streaming + +Stream Output: + * Encoders: + * Fixed aspect ratio and interlaced support in ffmpeg encoder module + * Stream output: + * Support of playlist group announcement + + +Changes between 0.7.2 and 0.8.0: +-------------------------------- + +Core support: + * Major work on libvlc. Changed/renamed/added functions + * Complete switch to the new input core (better seeking, multi-input, ...) + * New plugins cache to speed up launch time + * New --play-and-stop feature which stops the playlist after each played item + * Daemon mode (to run vlc in the background) + * Major improvements to the subtitle/OSD subsystem + +Input: + * New screen capture input plugin for X11, Win32, BeOS and Mac OS X + (Stream your desktop) + * Improved DVD support: + - uses libdvdnav for playing DVDs with menus support + - uses libdvdread for simple playback with menus (eg. for streaming) + * Experimental multi-input support ( use --input-slave to play with it ) + * Automatic MTU discovery for UDP streams + * More powerful MRL syntax for DVD/VCD/CDDA access + (selection of titles/chapters). + +Demuxers: + * Support for iTunes Music Store previews + * Support for MJPEG webcams (i.e. AXIS cams) + * Added initial mp4 and mpeg-ts text track support + * Windows Media Server RTSP support + * Support for MPEG TS streams with error correction (204/192 bytes TS packets) + * Support for DTS audio in MPEG TS (ETSI TS 102 154 Annex G) + * Skins2 .vlt file loader (only when skins2 is the current interface) + * Improved Ogg demuxer + * Support for MPEG PS streams with MPEG 4 video. + * Support for so called AACPlus webstreams + +Codecs: + * G.726 audio support + * 14496-17 MPEG TS text support + * MPEG-4 text support + * Vastly improved DVB subtitles decoder (ETS 300 743) + * Enabled color in DVB subtitles rendering + * VobSub supported both externally and in Matroska + +Stream Output: + Encoders: + * Re-use audio/video/spu decoders in transcoder module. From now on, + everything that is playable by VLC should be transcodable as well + * Subtitles overlaying in transcoder + * Subpictures overlaying in transcoder (see video output) + * Frame rate selection in the transcoder + * DVB subtitles encoder + * MPEG 1 layer 2 audio encoder using libtoolame + * Improved vorbis/theora encoding + Muxers: + * Text track muxing for mp4 + * Multipart mjpeg muxing. Your video is directly viewable in a Mozilla Browser + * 14496-17 text track muxing for MPEG TS + * Support for DTS audio in MPEG TS (ETSI TS 102 154 Annex G) + * Teletext (0x56 descriptor) streaming support in MPEG TS. + * New WAV muxer (supports multi-channel audio) + * Improved ASF muxer + Misc: + * H.263 RTP streaming support + * SDP generation outputs more compliant SDPs and can create SDP files now + * Improved RTSP and VoD server (experimental) + +Audio Output: + * New audio equalizer filter + * Very trivial volume normalizer + * True channel downmixing when playing 5:1 material on Stereo + * More gradual resampling which should improve the pitch changing effect + * New audio output plugin using portaudio v19 + +Video Output: + * Roku HD1000 Video output + * Experimental generic OpenGL video output (X11, Win32, MacOS X) + with support for effects. + * Improved filter and subpictures support : + - New filters can be streamed. + - "Subpicture filters" to overlay subpictures on video + - Centralized scaling and blending + * New filters : + - "time", to display current time + - "marq", to display a marquee + +Interfaces: + * OSD sliders for volume and postition information + * OSD icons for Play and Pause + * New Streaming Wizard for Windows and Linux default interfaces (wxWindows) + * A few skins2 improvements + * Added search, volume, loop and random functions to the ncurses interface + * Added a filesystem browser to the ncurses interface + * The remote control interface can now listen for commands on sockets + * Improved CORBA control module + +Mac OS X port: + * Fixed the "cannot set buffersize:[nope]" coreaudio problem + * Major speed improvements to the Quartz video output + * The Mac OS X interface is no longer required to display video + +Linux port: + * New galaktos visualization plugin (MilkDrop-compatible) + * Experimental SVG rendering module + * Support for DVB CAM modules. + +Windows port: + * DirectX Media Object decoder (allows playing some media types, like WMV3) + * DirectX Media Object audio and video encoder + * Fixed long standing win32 thread handles leak + * Fixed problem with CPU usage with subtitles rendering + * Wallpaper mode for the DirectX video output (only in overlay mode) + +WinCE port: + * Massive update (we still miss an interface and a fast video output). + +Mozilla plugin: + * Added a lot of Javascript accessible funtionality + * Volume, position, length, seek etc etc etc. + +Misc: + * Server/client network synchronization module + * VBrick streams fully supported + * Cisco IP/TV streams supported + * VLM enhancements + + +Changes between 0.7.1 and 0.7.2: +-------------------------------- + +Core support: + * Bookmarks feature for easier seeking/access inside medias. + * Support for video output embedded in interfaces. + * Improved HTTP daemon. + * Saved playlists now remember VLC-specific options. + +Codecs: + * New Continuous Media Markup Language (CMML) codec. + (http://www.annodex.net/overview.html) + * New H.261 video decoder using openmash. + * H264 encoder, demuxer and packetizer. + * Packetizer interfaces between demux and codec when needed + (allows using ffmpeg plugin to decode MPEG streams and better aac decoding). + * Support for Theora alpha3 (both decoding and encoding). + +Input: + * --start-time and --stop-time to start and stop playing a + file at the specified amount of seconds. Only works with a few + fileformats (avi, mov, mkv, mp4 ) + * Improved directory access module. + * New "file-cat" option to play truncated movies. + * Better handling of meta info (title, author, description, etc...). + * New options to pass meta info to the input. + * It is now possible to stream programs from a DVB-S/C/T stream + (satellite, cable, or digital terestrial television) + +Demux: + * Annodex (http://www.annodex.net) support. + * mmsh streaming fixes. + * Fixed infinite loop in the AVI demux on broken/incomplete files. + +Subtitles: + * Subviewer and subviewer v2 subtitles support. + * Ability to choose autodetected subtitles path. + * Subtitles delay can be changed in real time with hotkeys. + +Stream output: + * Improved session announcement system. + * Minimize threads usage by default. + * Added faster than realtime stream output (limited by CPU) for file output. + * Improved MOV/MP4 muxer. + * Improved MPEG TS muxer. + * Improved transrater. + * Meta info options used by the muxers. + * New configuration system. + * Better audio channels downmixing when transcoding. + +VideoLAN manager: + * New videolan (media) manager (vlm): a little manager designed to launch + and manage multiple streams from within one instance of VLC. + * Supports live streams and VoD. + * Supports scheduling. + * Telnet interface for vlm. + * HTTP interface for vlm. + +Interfaces: + * Skins II (Windows and Linux only) + - Ability to embed video output. + - Support for bitmap fonts. + - Lots of improvements. + * wxWindows (default Windows and Linux interface) + - New design and set of icons. + - Ability to embed video output. + - Support for hotkeys. + - Support for bookmarks. + * Mac OS X + - Support for 'groups' and playlist item properties. + - Better hotkeys handling. + +Mac OS X port: + * OpenGL video output is now the default when available. + * Added FAAC encoder (mp4a). + * Audio output fix to work with multiple streams on a HAL device. + * Possible fix for conflict with CodeTek VirtualDesktop (untested). + +Win32 port: + * DirectShow input plugin should work with more devices. + * Disable monitor power down when watching movies. + * Improved Windows installer. + +Linux port: + * PowerPC fixes. + +Misc: + * Improvements to the Goom visualisation plugin. + * Roku HD1000 audio output. + + +Changes between 0.7.1 and 0.7.1a: +--------------------------------- + +Mac OS X: + * Fixed the infamous 'mp3 takes twice the CPU it should take' bug + * Playing MOD files is working now. + + +Changes between 0.7.0 and 0.7.1: +-------------------------------- + +Core support: + * Fixed a nasty bug that causes preferences not to be saved some times. + * IGMPv3 support for VLC under Windows XP and Linux. + +Codecs: + * Brand new DTS Coherent Acoustics audio decoder based on libdts + (http://www.videolan.org/dtsdec.html) + * Fixed DTS S/PDIF output + * SVCD (Philips OGT) and CVD subtitles + +Playlist: + * Internal improvments + * Improved import/export + +Input: + * Experimental support for Nullsoft streaming video(.nsv) and real media(.rm) + container formars. + * New demux module that uses libavformat from ffmpeg. Adds support for many + small and strange formats. + * New PVA demux. + * New MOD audio demux. + * Support for DTS and A52/AC3 wav files. + * Support for DTS and A52/AC3 audio CD. + * New and experimental DVD input plugin with menus support (using libdvdnav). + * Added back DV audio support in raw DV demuxer. + +Stream output: + * MP4/MOV muxer improvements (fast-start, aac in mov, etc...). + * Fixed a nasty bug in the mpeg video packetizer. + * Improved transcoding (multithreading, more tuning, etc...). + +Service discovery: + * Fixed sdp in SAP. + +Mac OS X port: + * New opengl video output plugin. + +Win32 port: + * A few improvements to the DirectShow input plugin. + * Fixed ipv6 name resolution. + + +Changes between 0.6.2 and 0.7.0: +-------------------------------- + +Core support: + * Brand new decoder/packetizer api. + Adds a lot more flexibility while also simplifying the decoder plugins. + * New encoder api (Ffmpeg, Vorbis, Theora, Flac and Speex encoders available). + * Video outputs are recycled if possible. + This removes any 'flicker' between two similiar video files. + * Fixed the video filters. Video should no longer go black when using filters. + * New input core. Advantages are: better seeking, more responsive, support for + subtitle files at the core, and much much more. + +Playlist: + * Added a repeat mode to repeat a single file over and over. + * Playlist sorting + +Input: + * RTP/RTSP support. + * Fixed annoying seeking problem with Ogg files (seeking would take ages). + * Support for Flac in Ogg files. + * MPEG TS demuxer also handles A52 and AAC audio in DVB streams. + * Rewrite of the Flac demuxer. + * cddax and vcdx plugins using libcdio, libvcd and libvcdinfo. (Linux only) + * Reworked DVB tuning. + * Better Icecast support. + * New MPEG video elementary streams demuxer. + * New DTS audio elementary streams demuxer. + +Codecs: + * Support for Theora video encoding. + * Support for Speex audio decoding/encoding. + * Rewrite of the Flac decoder + encoding support. + * Support for MPEG2 422 decoding which was recently added to libmpeg2 (cvs). + * Support for AAC + SBR and proper multi-channel re-ordering. + * MPEG 2.5 audio support. + * Removed deprecated decoders (a52_old, mpeg_video and mpeg_audio). + +Stream output: + * Improvements to the MPEG TS muxer. + * New transrating module for MPEG2 video. + * Added packetization for MPEG AAC ADTS streams. + * Added packetizers for Flac, Speex, Theora, LPCM, DTS and SPU streams. + * Improved mp4 muxing and added AAC/MP4V support when transcoding. + * Improved Ogg muxing and added Theora, Speex, Flac and subtitles support. + * MPEG TS muxer follows the ATSC/DVB specs for embedded A52 audio. + * --sout-keep option to keep the stream open while changing input. + * Preliminary RTP support. + * Fixes to SAP announces. + +Interface: + * Skins: + - Bugfixes + - misc improvements (eg, "stay on top" option). + * New standardized and customizable hotkeys. + * wxWindows + - Playlist improvements (Sort, Search, mode buttons). + - Improvements and help in preferences + - New streaming wizard + - Revised Disc Open menu + * HTTP + - Improvements of the standard pages + - Support for new commands + * OSD ( OS X and hotkeys only atm ). + +Service discovery: + * Many fixes to the SAP module + * SAP now supports HTTP streams + +Subtitles: + * Text subtitles now have a black outline. + * Text subtitles autodetection. + * Text subtitles charset autodetection. + * Text subtitles for all videofiles. Results may vary. + * Text subtitles in Hebrew are supported. Arabic partially. + * Automatic fontsize selection for text subtitles. + * Fixed SAMI text subtitles support. + * Support for subtitles in Matroska files. + * Support for subtitles in DVB streams. + +Mac OS X port: + * New controller designed by Max Rudberg from www.maxthemes.com + * Save playlist. + * Works on 10.1.x again. Apologies for that problem. + * Support for Panther. + * Support for raw dumping of streams to disk. + * Mozilla plugin for Mac OS X (experimental). + +Win32 port: + * New DirectShow input module (for video acquisition cards, webcams, PVRs...). + * VLC can be installed as a Windows NT service. + * Allow on the fly switching of the main interface. + * Support for 3F2R in audio output. + * New --one-instance option to "force" only one running instance of VLC. + * Mozilla plugin for Windows (experimental). + * Multimonitor support (untested). + * Fixed nasty timing bug on some dual-cpu / P4 with hyperthreading systems. + +Linux port: + * Improved Video4Linux input. Also added support for an audio only input. + * Support for real-time priority when running with root privileges. + * Allow on the fly switching of the main interface. + +iPaq port: + * Brand new Gtk 2 interface + +Miscellaneous: + * Audio visual effects filters (spectrum, scope and random). + * Audio visual effects filter using goom. + * Spanish, Portuguese Brazilian and Hungarian translations. + * libcaca video output (colored ascii) + + +Changes between 0.6.1 and 0.6.2: +-------------------------------- + +Core support: + * Fixed a nasty regression in 0.6.1 which made some streams unplayable. + +Stream output: + * Transcoder now generates proper pts/dts thus should work a lot better. + * Improved MPEG TS muxer. + +Access input: + * Support for DVB-S/C/T cards using v4l2 API for Linux 2.6.x kernels. + * Few fixes to the VCD navigation. + +Interfaces: + * Support for DVD menus navigation added to the wxWindows interface. + +UNIX ports: + * ALSA multi-channel support fixed and tested. + * Fixed fullscreen with gnome metacity. + +Win32 port: + * Fixed VCD support which was broken on some machines. + +iPaq port: + * Familiar interface with Gtk+-1.2 and GPE support removed (deprecreated). + +Miscellaneous: + * Text subtitles now centered on the picture. + * Ffmpeg decoder now generates proper pts and can be used to play + mpeg1/2 videos. + + +Changes between 0.6.0 and 0.6.1: +-------------------------------- + +Core support: + * There should be less bogus resampling, particularly on DVDs. + * VLC will now wait for the medium to wake up before starting its clock + after a pause. + +Stream output: + * Added vorbis audio support in Ogg streaming. + * Added vorbis audio transcoding support. + * Added mp3 audio transcoding support (when ffmpeg is compiled with mp3lame). +UNIX ports: + * ALSA multi-channel support fixed and tested. + * Fixed fullscreen with gnome metacity. + +Win32 port: + * Fixed VCD support which was broken on some machines. + +iPaq port: + * Familiar interface with Gtk+-1.2 and GPE support removed (deprecreated). + +Miscellaneous: + * Text subtitles now centered on the picture. + * Ffmpeg decoder now generates proper pts and can be used to play + mpeg1/2 videos. + + +Changes between 0.6.0 and 0.6.1: +-------------------------------- + +Core support: + * There should be less bogus resampling, particularly on DVDs. + * VLC will now wait for the medium to wake up before starting its clock + after a pause. + +Stream output: + * Added vorbis audio support in Ogg streaming. + * Added vorbis audio transcoding support. + * Added mp3 audio transcoding support (when ffmpeg is compiled with mp3lame). + * PS muxer can create mpeg1 files now and produce streams with system headers. + * You can transcode a52 with more than two channels to mpga now. + +Win32 port: + * Fixed DVD support which was partly broken due to a bug in libdvdcss + * Fixed 5.1 audio support for the sblive/audigy soundcards. + * Fixed sound on Windows NT. + +UNIX ports: + * Fixed/improved ALSA support and enabled multi-channel audio output. + * X11/Xvideo: Should now work on big endian machines, and you can now + use the arrow keys to browse through the DVD menus. + +iPaq port: + * Gtk+2 interface called PDA + * Familiar Gtk+ is now deprecreated + * Codec a52, Faad2 and flac added + * Video4Linux enabled (demux and transcode) + * Stream Out with transcode support enabled (use codecs: HuffYuvv and A-law). + +Interfaces: + * Small updates/fixes to the wxWindows interface. + * Improved HTTP remote control interface. You can now create your own HTML pages. + * A new CORBA control plugin. + +Input demux: + * Improved support for the Matroska container format. + +Miscellaneous: + * Improved build system. + * New video filter plugin to overlay logos. + * Added support for Winamp 3 B4S files. + * New subtitle module which uses freetype2 to render arbitrary fonts in any size. + Should also work with languages like russion for instance. + + +Changes between 0.5.3 and 0.6.0: +-------------------------------- + +Core Support: + * Channel Server support was removed (was deprecated) + +Input access: + * Fixed a big bug in ftp and http access that prevented many platforms + (OSX most prominently) to view ftp and http streams. + * Fixed large file support on Windows + * Video 4 Linux support + * CD Digital Audio support + * Fixed IPv6 multicasting on Windows and OSX. + +Input demux: + * Better detection of AAC and mp3 files + * Support for OpenDML avi files + * More complete .mp4/.mov support + * Very early support for the Matroska container format (don't complain if it doesn't work ;) + +Codecs: + * VLC's own MPEG1/2 decoder has been replaced with libmpeg2 + * Support for Sorenson 3 (SVQ3 or Quicktime content) via ffmpeg + * OSX support for QDM2 and QDMC sound, often used in QT content. + * Fixed a bug which was causing artefacts in DivX video (ffmpeg) + * Updated our theora decoder to use the alpha 2 release of libtheora + * If ffmpeg cannot keep up, skip and try to recover instead of stopping altogether + * Indeo Video 3 (IV32) support for little-endian computers. (so not for OSX) + +Interfaces: + * The wxWindows interface is now fully useable as well as Unicode safe + * New HTTP remote control interface + +Stream output: + * New stream output scheme. It is now possible to build a chain of stream outputs + allowing for instance to stream and display some content at the same time. + * The stream output now allows to transcode content on the fly. + * Fixed major bug that prevented streaming mpeg 1/2 video with pulldown content. + * SAP/SDP announcing support. (both IPv4 and IPv6) + +Miscellaneous: + * New reset option for the preferences + * You can set your language in the prefences + * New video chroma conversion module using ffmpeg + * Added a Gentoo ebuild to the distribution + * Added a new smaller subtitles font (now the default) + scripts to generate your own + * SAP/SDP IPv6 support + +UNIX ports: + * Basic support for the X11 Xinerama extension. + * New skinable interface ported to X11. + * Run opie-vlc and zaurus-vlc as GuiServer + +Mac OS X port: + * When you add several items to the playlist, they are sorted alphabetically. + * New about panel and revamped preferences panel. + * Fixed the deinterlace menu. + * Float on top, Fit to Screen and a Transparency option for video out. + * New output dialog for transcode and display while stream capabilities. + * New icons by Davor Orel. + * New audio resampler. Should make VLC much faster. + * Fixed disappearing and crackling sound (PTS is out of range bug) + * We no longer automatically save the preferences when you quit the application + * Arrow keys are now use to browse the menus in a DVD + +Win32 port: + * the wxWindows interface is now the default interface + * The keyboard shortcuts are now identical to the linux version + * Fixed the "no sound" problem on NT4 + * Improved skinnable interface (it now uses the wxWindows interface dialogs). + * Added support for compressed skins files (.vlt files) + * Fixed SVCD chapters support. + * Fixed memory leak with 5.1 audio. + +BeOS port: + * Interface localization + * Screensaver disabled if playing in fullscreen + * A few new keyboard shortcuts + * New full-featured Preferences window + + +Changes between 0.5.2 and 0.5.3: +-------------------------------- + +Core Support: + * fixed DTS S/PDIF output on little-endian machines + * support for skins at the interface level + * new OSD module using Freetype2 + * video outputs are now destroyed when the associated input ends + * the video output takes into account the caching delay introduced at the + input level before dropping out of date frames. + * configuration option to disable the translation of the interface + +Input access: + * fixed HTTP redirects + * support for opening an entire directory + * EOF should be detected more reliably + * new video4linux access plug-in + * new kfir access plug-in designed to work around a bug in the kfir driver + +Input demux: + * added stream type for some Motorola MPEG-2 video encoders + * fix for some ogg web radio streams + * fixed reading TS streams over HTTP + +Codecs: + * support for 3ivx D4 (not previous versions) + * support for '3ivd' and '3vid' encodings + * support for 'MSS1' codec ( same as WMV2 ) + * support for SAMI subtitles (untested and incomplete) + * better SSA4 subtitles recognition + * new codec for raw I420 video + * improvements to the libmpeg2-based MPEG video decoder + +Interfaces: + * improvements to wxWindows based interface + (although it still misses some important features) + * skeleton for a Gnome2/GTK2 plug-in + +Stream output: + * new HTTP output support + * fixed a segfault in the AVI muxer + * fixed AV synchronization issues + +Miscellaneous: + * support for oldstyle id3 genres + +UNIX ports: + * the SDL vout plug-in will now work on big-endian machines + +Mac OS X port: + * reorderable playlist + * fixed the hiding of the mouse on multiple monitors + * fixed a big issue with some USB speakers + * support for mono audio output devices + * reset the audio-device to its default mode before quitting VLC + * fixed several cosmetic issues + * you can drag the controller window by its background (as it should be) + * the messages window remembers more lines + * delay and fps can now be overruled with subtitles files + * http and ogg stream output options + * Apple menu and friends will now be translated as well + +Win32 port: + * new skinnable interface + * the directx video output doesn't crash anymore on ctrl+alt+del events. + +iPAQ familiar Linux port: + * support for FLAC audio format + * the interface adapts to the screen size/rotation + * playlist + * network tab in the interface + * "apply" handling in preferences + + +Changes between 0.5.1a and 0.5.2: +--------------------------------- + +Core support: + * advanced config options are now hidden by default + * new --spdif option to use the S/PDIF audio output by default + * fixed a 'clicking' sound when switching between streams + * new bandlimited resampler that should improve audio quality on primarily + Mac OS X + * fixed a problem with audio over http that caused some web radios to not work + * DTS S/PDIF support + +Codecs: + * support for DV audio through the ffmpeg library + * support for FLAC audio through libflac + * new but basic MPEG video decoder based on libmpeg2 + * fixed a major bug in LPCM code (fixes a problem with iDVD disks) + +Stream output: + * support for streaming DivX 1/2/3, wmv1/2, h/i263 over MPEG-2 TS + * new --ttl option for Time To Live + +DVD support: + * fixed quite a few problems with the dvd menu support + +UNIX ports: + * fixed the GNU-pth support + +Win32 port: + * multi-channel audio and S/PDIF support for both the DirectX and Waveout + plugins + * localization support via gettext is now fully working + * rc interface is now fully useable + * fixed the MSVC project files generation + +Mac OS X port: + * several fixes for multi channel audio devices. AC3 over SPDIF with + M-Audio Sonica Theater still does not work. this is most likely a driver + bug and has been reported to M-Audio. (Sonica, Revolution, Delta, Griffin + iMate and MOTU firewire devices should work) + * VLC now uses the default audio device + * new info panel + * very preliminary support for VLC control via applescript + * support for mouse gestures + * new priority scheme allowing to avoid lock-ups on low-end machines + +Linupy port: + * there is a whole new port for the linupy distribution used by o.a. the + YOPY PDA. It is still experimental, please test it + +Miscellaneous: + * improved ID3 tag detection + * changed several errors into warnings ; the frequently reported "this is + not a PS stream, continuing" is one of these + * mouse gestures work on windows and osx, but there still isn't any useful + gestures + * some support for .pls playlists used by shoutcast + + +Changes between 0.5.1 and 0.5.1a: +--------------------------------- + +Mac OS X port: + * fixed a problem that caused VLC to select the wrong language when + English was set as the preferred language + + +Changes between 0.5.0 and 0.5.1: +-------------------------------- + +Core support: + * new mouse gesture interface + * audio volume can now be changed at any time, even when no file is + playing + +Input access: + * various minor fixes on the network inputs + * fixed some weird URL parsing problems (/Volumes/toto:tata/harry@coin.mpg) + * VCD: fixed track number and chapter indexing + +Input demux: + * fixed a bad initialization in the mp4 plug-in + * new --buggy-psi option for TS streams which do not update their + continuity counter + +Codecs: + * support for MPEG-2 intra slice refresh (aka. Slice-I) streams + +DVD support: + * fixed a bug which turned the default interface command-line only + without the user consent + +UNIX ports: + * GTK: fixed a crash when going fullscreen or changing volume from the + popup menu + * X11: new screen saver disabling plug-in (--extraintf screensaver) + * KDE: fixed compilation with KDE 3.1 + * ALSA: fixed mono files output + +Mac OS X port: + * fixed a crash on start-up on some localized systems + * lowered real-time priorities to avoid lock-ups on slow machines + * VLC can now be made the handler of ftp http mms and udp URLs + * playlist enhancements + * added half, normal and double video window menu items + * new step forward/step backward commands + * the dock should no longer be visible in fullscreen mode + * the Mac OS X binary is now compiled with Ogg/Theora support + * vlc.app is now VLC.app + +Win32 port: + * fixed the "RichEdit line insertion error" bug + * VLC can now be run from outside its installation directory + * fixed a bug that prevented to find the default subtitle font + +BeOS port: + * smarter BeOS priorities to avoid lock-ups + * few enhancements in the interface (especially the Settings window) + +Opie port: + * native video output is working again + * only commandline interface support + * support for MPEG4, DivX through ffmpeg package + + +Changes between 0.4.6 and 0.5.0: +-------------------------------- + +Core structure: + * object structure which allows for full re-entrancy, known as libvlc + * new audio output architecture based on filter pipelines, providing + S/PDIF and multi-channel support + * localization support via gettext on most architectures + * new stream output architecture, allowing to use VLC to unicast, + multicast or broadcast a stream to another VLC (only MPEG 1, 2 and 4 + and A/52 streams are supported) + * build system now uses autoconf/automake/autopoint + +Input access: + * mms:// support + * ftp:// support + * stability fixes in the HTTP access + * auto-detection of RTP encapsulation + * VCD entry points support + * VCD image file support + +Input demux: + * support for *.asf format + * improved support for *.avi, especially over an HTTP connection + * support for *.mp4 and *.mov format + * support for ogg encapsulation + * support for raw DV format + * support for *.wav format + * new demuxdump demux allowing to save a stream to a file + * raw AAC support + +Stream discovery & playlists: + * support for the SAP/SDP and SLP protocols + * support for .m3u file format + * support for .asx file format + * hack to find the streaming sources in html-pages with embedded wmp + +Codecs: + * support for the microdvd, subrip, ssa1, ssa2-4 subtitles file formats + (only available with the .avi demux) + * support for ADPCM audio codec + * support for raw PCM data + * support for Cinepak video codec + * support for DV video codec via libdv or ffmpeg + * support for AAC audio codec via libfaad2 + * support for Xvid codec + * support for Xiph.org's Vorbis audio codec + * support for Xiph.org's Tremor audio codec (when compiling from sources) + * support for Xiph.org's Tarkin and Theora video codecs (when compiling + from sources) + * new codecs supported by latest ffmpeg versions: WMV, WMA, SVQ 1, H263, + H263i, MJPEG A/B + * fixed an endianness bug in LPCM codec + +DVD support: + * experimental preliminary support for DVD menus via libdvdplay + +Miscellaneous: + * new WxWindows interface + * all interfaces allow to dynamically change the volume, the audio + device and the channels configuration + * headphone channel mixer with virtual spatialization effect + * Mozilla plugin based on libvlc for embedded playback in webpages of any + format that VLC can play + * new swedish translation + * enhancements of the playlist window + * new messages window to see debug info + * fixed a few crashes + +iPaq port: + * slider bar in GTK+/GPE Familiar interface + * fixed crash on directory change in Familiar interface + * added qte_main module for use in all modules that need Opie or Qte support + * native video output module for Qt Embedded/Opie is not working + diff --git a/support/3rd_party/vlc/README.txt b/support/3rd_party/vlc/README.txt new file mode 100644 index 0000000..22222ea --- /dev/null +++ b/support/3rd_party/vlc/README.txt @@ -0,0 +1,57 @@ +README for the VLC media player +=============================== + +VLC is a popular libre and open source media player and multimedia engine, +used by a large number of individuals, professionals, companies and +institutions. Using open source technologies and libraries, VLC has been +ported to most computing platforms, including GNU/Linux, Windows, Mac OS X, +BSD, iOS and Android. +VLC can play most multimedia files, discs, streams, allows playback from +devices, and is able to convert to or stream in various formats. +The VideoLAN project was started at the university École Centrale Paris who +relicensed VLC under the GPLv2 license in February 2001. Since then, VLC has +been downloaded close to one billion times. + +Links: +====== + +The VLC web site . . . . . http://www.videolan.org/ +Support . . . . . . . . . . http://www.videolan.org/support/ +Forums . . . . . . . . . . http://forum.videolan.org/ +Wiki . . . . . . . . . . . http://wiki.videolan.org/ +The Developers site . . . . http://wiki.videolan.org/Developers_Corner +VLC hacking guide . . . . . http://wiki.videolan.org/Hacker_Guide +Bugtracker . . . . . . . . http://trac.videolan.org/vlc/ +The VideoLAN web site . . . http://www.videolan.org/ + +Source Code Content: +=================== +ABOUT-NLS - Notes on the Free Translation Project. +AUTHORS - VLC authors. +COPYING - The GPL license. +COPYING.LIB - The LGPL license. +INSTALL - Installation and building instructions. +NEWS - Important modifications between the releases. +README - This file. +THANKS - VLC contributors. + +bin/ - VLC binaries. +bindings/ - libVLC bindings to other languages. +compat/ - compatibility library for operating systems missing + essential functionalities. +contrib/ - Facilities for retrieving external libraries and building + them for systems that don't have the right versions. +doc/ - Miscellaneous documentation. +extras/analyser - Code analyser and editor specific files. +extras/buildsystem - different buildsystems specific files. +extras/misc - Files that don't fit in the other extras/ categories. +extras/package - VLC packaging specific files such as spec files. +extras/tools/ - Facilities for retrieving external building tools needed + for systems that don't have the right versions. +include/ - Header files. +lib/ - libVLC source code. +modules/ - VLC plugins and modules. Most of the code is here. +po/ - VLC translations. +share/ - Common Resources files. +src/ - libvlccore source code. +test/ - testing system. diff --git a/support/3rd_party/vlc/THANKS.txt b/support/3rd_party/vlc/THANKS.txt new file mode 100644 index 0000000..fa7b6c5 --- /dev/null +++ b/support/3rd_party/vlc/THANKS.txt @@ -0,0 +1,106 @@ +Some VLC plugins use external libraries and make extensive use of the +following persons' or companies' code: + +FAAD2 - Copyright (c) Nero AG, www.nero.com" - GPLv2 or later +FFmpeg - Copyright (c) 2000-2017 the FFmpeg developers - LGPLv2.1 or later +FluidLite - Copyright (c) 2016 Robin Lobel - LGPLv2.1 or later +FluidSynth - Copyright (c) 2003-2010 Peter Hanappe, Conrad Berhörster, Antoine + Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson - LGPLv2.1 or + later +Fontconfig - Copyright (c) 2000,2001,2002,2003,2004,2006,2007 Keith Packard, + (c) 2005 Patrick Lam, (c) 2009 Roozbeh Pournader, (c) 2008,2009 Red Hat, + Inc., (c) 2008 Danilo Šegan, (c) 2012 Google, Inc. - MIT License +freetype - David Turner, Robert Wilhelm, and Werner Lemberg - FreeType License +GSM - Copyright (c) 1992 - 1994, 2009 Jutta Degener & Carsten Bormann - GSM + permissive license +GNU FriBidi - Copyright (c) 2004-2012 Behdad Esfahbod, Dov Grobgeld, Roozbeh + Pournader - LGPLv2.1 or later +GnuTLS - Copyright (C) 2000-2012 Free Software Foundation, Inc. - LGPLv2.1 or + later +harfbuzz - Copyright (c) 2010, 2011, 2012 Google, Inc., (c) 2012 Mozilla + Foundation, (c) 2011 Codethink Limited, (c) 2008, 2010 Nokia Corporation + and/or its subsidiary(-ies), (c) 2009 Keith Stribley, (c) 2009 Martin Hosken + and SIL International, (c) 2007 Chris Wilson, (c) 2006 Behdad Esfahbod, + (c) 2005 David Turner, (c) 2004, 2007, 2008, 2009, 2010 Red Hat, Inc., + (c) 1998-2004 David Turner and Werner Lemberg - Old MIT License +liba52 - Aaron Holtzman & Michel Lespinasse, et al. - GPLv2 or later +libav - Copyright (c) 2000 - 2015 the libav developers - LGPLv2.1 or later +libass - Copyright (c) 2006-2015 Grigori Goronzy et al. - ISC License +libbluray - Copyright (c) 2009-2015 VideoLAN and authors - LGPLv2.1 or later +libcaca - Copyright (c) 2004 Sam Hocevar - WTFPL / LGPLv2.1 or later / + GPLv2 or later / ISC +libdca - Copyright (c) 2004-2007 VideoLAN and authors - GPLv2 or later +libdvbpsi - Copyright (c) 2001-2017 VideoLAN and authors - LGPLv2.1 or later +libdvdcss - Copyright (c) 2001-2017 VideoLAN and authors - GPLv2 or later +libdvdread - GPLv2 or later +libdvdnav - GPLv2 or later +libebml - Copyright (c) 2002-2015 Steve Lhomme - LGPLv2.1 or later +libFLAC - Copyright (c) 2001 - 2014 Josh Coalson et al. - Xiph.org BSD license +libgme - LGPLv2.1 or later +libgpg-error - Copyright 2003, 2004, 2005, 2006, 2007, 2013 g10 Code GmbH + - LGPLv2.1 or later +libkate - Copyright (c) 2008-2011 Vincent Penquerc'h - 3-clause BSD License +liblive555 - Copyright (c) 1996-2015 Live Networks, Inc. - LGPLv2.1 or later +libmad - Copyright (c) 2000-2004 Robert Leslie, et al. - GPLv2 or later +libmatroska - Copyright (c) 2002-2015 Steve Lhomme - LGPLv2.1 or later +libmpeg2 - Aaron Holtzman & Michel Lespinasse, et al. - GPLv2 or later +libmodplug - Oliver Lapicque, Konstanty - Public domain +libogg, libvorbis - Copyright (c) 2002-2015 Xiph.org Foundation - Xiph.org BSD + license +libpostproc - Copyright (C) 2001-2015 Michael Niedermayer, et al. - GPLv2 or + later +libpng - Copyright (c) 2004, 2006-2014 Glenn Randers-Perhson, et al. - libpng + license +libsamplerate - Copyright (c) 2002-2011 Erik de Castro Lopo - GPLv2 or later +libschroedinger - Copyright (c) 2006 BBC and Fluendo - MIT License +libsdl - Copyright (c) 1997-2014 Sam Lantinga et al. - LGPLv2.1 or later +libshout - Copyright (c) 2012 - LGPLv2.1 or later +libtheora - Copyright (c) Xiph.org Foundation - Xiph.org BSD license +libtiff - Copyright (c) 1988-1997 Sam Leffler, (c) 1991-1997 Silicon Graphics, + Inc. - BSD-like +libtwolame - Copyright (c) 2001-2004 Michael Cheng, (c) 2004-2006 The TwoLAME + Project - LGPLv2.1 or later +libupnp - Copyright (c) 2000-2003 Intel Corporation - 3-clause BSD License +libvpx - Copyright (c) 2010-2015, Google Inc. - 3-clause BSD License +libxml2 - Copyright (c) 1998-2014 Daniel Veillard - MIT License +lua - Copyright (c) 1994-2008 Lua.org, PUC-Rio. - MIT License +Musepack decoder library - Copyright (c) 2005-2011, The Musepack Development + Team - 3-clause BSD License +OpenJPEG - Copyright (c) 2002-2014, Communcations and Remote Sensing + Laboratory, UCL, Belgium - ISC License +Opus - Copyright 2001-2013 Xiph.Org, Skype Limited, Octasic, Jean-Marc Valin, + Timothy B. Terriberry, CSIRO, Gregory Maxwell, Mark Borgerding, + Erik de Castro Lopo - Xiph.org BSD License +Sparkle — Andy Matuschak et al. - MIT License +Speex, Speexdsp - Copyright (c) 1992-2015 Xiph.org Foundation, Jean-Marc Valin, + Analog Devices Inc. Commonwealth Scientific and Industrial Research + Organisation, David Row, Jutta Degener, Carsten Bormann - 3-clause BSD + License +taglib - Copyright (c) 2004-2016 Scott Wheeler, et al. - LGPLv2.1 or later +x264 - Copyright (c) 2004-2017 VideoLAN and authors - GPLv2 or later +x265 - Copyright (c) 2004-2015 x265 project - GPLv2 or later +Zapping VBI library - Copyright (c) 2000-2003 Michael H. Schimek, Iñaki García + Etxebarria - LGPLv2.1 or later +zlib - Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler - zlib license + +The VideoLAN team would like to thank the following donators: + +Julian Cain, who made a $1000 donation +The French website MacBidouille gave €500 to help us buy a PowerMac G5 +The French magazine à vos MAC gave €500 to help us buy a PowerMac G5 +Laurent Dupuy, who made a €540 donation +The French company Cybervia (Actech) gave €2000 to pay for webserver hosting +Dennis Perov - Hardware donation + +...the following active members of our user community: + +Alan Wright +David J LaBarre "DJ" +Eric Adler +Julien Bouquillon + +...and code auditors and testers: + +David Thiel +Philippe A. aka "Lotesdelère" +Sebastien Chaumat diff --git a/support/3rd_party/vlc/axvlc.dll b/support/3rd_party/vlc/axvlc.dll new file mode 100644 index 0000000..22f0647 Binary files /dev/null and b/support/3rd_party/vlc/axvlc.dll differ diff --git a/support/3rd_party/vlc/hrtfs/dodeca_and_7channel_3DSL_HRTF.sofa b/support/3rd_party/vlc/hrtfs/dodeca_and_7channel_3DSL_HRTF.sofa new file mode 100644 index 0000000..63aee4d Binary files /dev/null and b/support/3rd_party/vlc/hrtfs/dodeca_and_7channel_3DSL_HRTF.sofa differ diff --git a/support/3rd_party/vlc/languages/AfrikaansExtra.nsh b/support/3rd_party/vlc/languages/AfrikaansExtra.nsh new file mode 100644 index 0000000..9a45f11 --- /dev/null +++ b/support/3rd_party/vlc/languages/AfrikaansExtra.nsh @@ -0,0 +1,77 @@ +!insertmacro LANGFILE_EXT Afrikaans +${LangFileString} Name_Section01 "Mediaspeler (vereis)" +${LangFileString} Name_Section02a "Begin-kieslyskortpad" +${LangFileString} Name_Section02b "Werkskermkortpad" +${LangFileString} Name_Section34 "Webinproppe" +${LangFileString} Name_Section03 "Mozilla-inprop" +${LangFileString} Name_Section04 "ActiveX-inprop" +${LangFileString} Name_Section05 "Afspeel van Skywe" +${LangFileString} Name_Section06 "Lêertipekoppelings" +${LangFileString} Name_SectionGroupAudio "Oudiolêers" +${LangFileString} Name_SectionGroupVideo "Videolêers" +${LangFileString} Name_SectionGroupOther "Ander" +${LangFileString} Name_Section07 "Kontekskieslyste" +${LangFileString} Name_Section08 "Skrap voorkeure en kas" + +${LangFileString} Desc_Section01 \ + "Die mediaspeler self" +${LangFileString} Desc_Section02a \ + "Voeg items tot u begin-kieslys toe vir maklike toegang" +${LangFileString} Desc_Section02b \ + "Plaas ikoon op u werkskerm vir maklike toegang" +${LangFileString} Desc_Section03 \ + "Die VLc Mozilla- en Mozilla Firefox-inprop" +${LangFileString} Desc_Section04 \ + "Die VLC ActiveX-inprop" +${LangFileString} Desc_Section05 \ + "DVD en CD afspeelregistrasie" +${LangFileString} Desc_Section06 \ + "Stel VLC-mediaspeler in as die verstektoepassing vir die gespesifiseerde lêertipe" +${LangFileString} Desc_Section07 \ + "Voeg kontekskieslysitems toe (‘Speel af met VLC’ en ‘Voeg toe tot VLC se afspeellys’)" +${LangFileString} Desc_Section08 \ + "Skrap VLC-mediaspelervoorkeure en kaslêers wat van vorige installasies oorgebly het" + +${LangFileString} Name_Section91 "Deïnstalleer" +${LangFileString} Name_Section92 "Skrap voorkeure en kas" + +${LangFileString} Desc_Section91 \ +"Deïnstalleer VLC-mediaspeler en al sy komponente" +${LangFileString} Desc_Section92 \ +"Skrap VLC-mediaspelervoorkeure en kaslêers" + +${LangFileString} ShellAssociation_Play "Speel" +${LangFileString} ContextMenuEntry_PlayWith "Speel af met VLC-mediaspeler" +${LangFileString} ContextMenuEntry_AddToPlaylist "Voeg toe tot VLC-mediaspeler se afspeellys" + +${LangFileString} Link_VisitWebsite "Besoek die VideoLAN VLC-mediaspelerwebblad" + +${LangFileString} Name_InstTypeRecommended "Aanbeveel" +${LangFileString} Name_InstTypeMinimum "Minimum" +${LangFileString} Name_InstTypeFull "Vol" + +${LangFileString} Action_OnArrivalDVD "Speel DVD-rolprent" +${LangFileString} Action_OnArrivalAudioCD "Speel oudio CD" +${LangFileString} Action_OnArrivalVCDMovie "Speel VCD-rolprent" +${LangFileString} Action_OnArrivalSVCDMovie "Speel SVCD-rolprent" +${LangFileString} Action_OnArrivalVideoFiles "Speel videolêers" +${LangFileString} Action_OnArrivalMusicFiles "Speel oudiolêers" +${LangFileString} Action_OnArrivalDVDAudio "Speel oudio DVD" +${LangFileString} License_NextText "U is nou bewus van u regte. Klik Volgende om aan te gaan." + +${LangFileString} Detail_CheckProcesses "Gaan prosesse na…" +${LangFileString} MessageBox_VLCRunning "Dit wol voorkom of VLC loop en dit sal nou afgesluit word." +${LangFileString} MessageBox_VLCUnableToClose "Die installeerder kon VLC nie afsluit nie, doen dit asb. handmatig." +${LangFileString} MessageBox_InstallAborted "Installasie is laat vaar" + +${LangFileString} Reinstall_Headline "Reeds geïnstalleer" +${LangFileString} Reinstall_HeadlineInstall "Kies hoe u VLC wil installeer." +${LangFileString} Reinstall_HeadlineMaintenance "Kies die onderhoudopsie om uit te voer." +${LangFileString} Reinstall_MessageOlder "’n Ouer weergawe van VLC is op u stelsel geïnstalleer. Kies die operasie wat u wil uitvoer en klik Volgende om aan te gaan." +${LangFileString} Reinstall_MessageNewer "’n Nuwer weergawe van VLC is reeds geïnstalleer. Dit word nie aanbeveel om af te gradeer na ’n ouer weergawe nie. Kies die operasie wat u wil uitvoer en klik Volgende om aan te gaan." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} is reeds geïnstalleer. Kies die operasie wat u wil uitvoer en klik Volgende om aan te gaan." +${LangFileString} Reinstall_OptionUpgrade "Gradeer VLC op deur vorige instellings te gebruik (aanbeveel)" +${LangFileString} Reinstall_OptionDowngrade "Gradeer VLC af deur vorige instellings te gebruik (aanbeveel)" +${LangFileString} Reinstall_OptionComponents "Voeg komponente toe/Verwyder dit/Installeer dit" +${LangFileString} Reinstall_OptionAdvanced "Verander instellings (gevorderd)" +${LangFileString} Reinstall_OptionUninstall "Deïnstalleer VLC" diff --git a/support/3rd_party/vlc/languages/AlbanianExtra.nsh b/support/3rd_party/vlc/languages/AlbanianExtra.nsh new file mode 100644 index 0000000..9ab60cf --- /dev/null +++ b/support/3rd_party/vlc/languages/AlbanianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Albanian +${LangFileString} Name_Section01 "Aparati Media (e nevojshme)" +${LangFileString} Name_Section02a "Fillo Meny Shkurtues " +${LangFileString} Name_Section02b "Desktop Shkurtues" +${LangFileString} Name_Section34 "Plugin-et Web" +${LangFileString} Name_Section03 "Plugin-i Mozilla" +${LangFileString} Name_Section04 "Plugin ActiveX" +${LangFileString} Name_Section05 "Ridëgjim Disku" +${LangFileString} Name_Section06 "Asociacion tip dokumenti" +${LangFileString} Name_SectionGroupAudio "Dokumente Audio" +${LangFileString} Name_SectionGroupVideo "Dokumente Video" +${LangFileString} Name_SectionGroupOther "Të Tjera" +${LangFileString} Name_Section07 "Meny konteksti" +${LangFileString} Name_Section08 "Fshi preferencat dhe depo" + +${LangFileString} Desc_Section01 \ + "Aparati Media vetë" +${LangFileString} Desc_Section02a \ + "Shton ikona në menynë tuaj fillojnë për qasje të lehtë" +${LangFileString} Desc_Section02b \ + "Shton ikona në dekstop tuaj për hyrje të lehtë" +${LangFileString} Desc_Section03 \ + "Plugin-i VLC Mozilla dhe Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Plugin-i VLC ActiveX" +${LangFileString} Desc_Section05 \ + "DVD dhe CD luaj-mbrapa regjistrimin" +${LangFileString} Desc_Section06 \ + "Vendos VLC media player si programin default application per kete tip file" +${LangFileString} Desc_Section07 \ + "Shto meny kontekst mjete ('Luaj Me VLC' dhe 'Shto Tek Lista VLC's')" +${LangFileString} Desc_Section08 \ + "Fshij preferencat dhe file-et e cache te VLC media player-it te mbetura nga instalimet e meparshme" + +${LangFileString} Name_Section91 "Ç'instalo " +${LangFileString} Name_Section92 "Fshi preferencat dhe depo" + +${LangFileString} Desc_Section91 \ +"Ç'instaloj aparatin VLC media dhe të gjithë komponentët" +${LangFileString} Desc_Section92 \ +"Fshij preferencat dhe file-et e cache te VLC media player-it" + +${LangFileString} ShellAssociation_Play "Luaj" +${LangFileString} ContextMenuEntry_PlayWith "Luaj me aparatin VLC media " +${LangFileString} ContextMenuEntry_AddToPlaylist "Shto tek lista e apartit VLC media" + +${LangFileString} Link_VisitWebsite "Vizitoni faqen e aparatit VideoLAN VLC media " + +${LangFileString} Name_InstTypeRecommended "Rekomanduar" +${LangFileString} Name_InstTypeMinimum "Minimum" +${LangFileString} Name_InstTypeFull "Plotë" + +${LangFileString} Action_OnArrivalDVD "Luaj film DVD" +${LangFileString} Action_OnArrivalAudioCD "Luaj audio CD" +${LangFileString} Action_OnArrivalVCDMovie "Luaj film VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Luaj film SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Luaj dokument video" +${LangFileString} Action_OnArrivalMusicFiles "Luaj dokument audio" +${LangFileString} Action_OnArrivalDVDAudio "Luaj audio DVD" +${LangFileString} Action_OnArrivalBluray "Luaj Blu-ray" + +${LangFileString} License_NextText "Ju tani jeni të vetëdijshëm për të drejtat tuaja. Klikoni Tjetër për të vazhduar." + +${LangFileString} Detail_CheckProcesses "Duke kontrolluar proceset..." +${LangFileString} MessageBox_VLCRunning "VLC duket se po punon dhe tani do të mbyllet." +${LangFileString} MessageBox_VLCUnableToClose "Ky instalues nuk ishte në gjendje për të mbyllur VLC, ju lutemi ta mbyllni në mënyrë manuale." +${LangFileString} MessageBox_InstallAborted "Instalimi i ndërprerë!" + +${LangFileString} Reinstall_Headline "Instaluar Tashmë" +${LangFileString} Reinstall_HeadlineInstall "Zgjidhni se si ju dëshironi të instaloni VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Zgjidhni opsionin e mirëmbajtjes për të kryer." +${LangFileString} Reinstall_MessageOlder "Një version më i vjetër i VLC është i instaluar në sistemin tuaj. Zgjidhni operacionin që ju dëshironi për të kryer dhe të klikoni Tjetri për të vazhduar." +${LangFileString} Reinstall_MessageNewer "Një version i ri i VLC tashmë është instaluar! Nuk është e rekomanduar që ju të degradoni në një version më të vjetër. Zgjidhni operacionin që ju dëshironi për të kryer dhe të klikoni Tjetri për të vazhduar." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} është instaluar tashmë. Zgjidhni operacionin që ju dëshironi për të kryer dhe të klikoni Tjetri për të vazhduar." +${LangFileString} Reinstall_OptionUpgrade "Përmirëso VLC duke përdorur cilësimet e mëparshme (e rekomanduar)" +${LangFileString} Reinstall_OptionDowngrade "Degrado VLC duke përdorur cilësimet e mëparshme (e rekomanduar)" +${LangFileString} Reinstall_OptionComponents "Shto/Hiq/Riinstalo komponentët " +${LangFileString} Reinstall_OptionAdvanced "Ndrysho cilësimet (avancuar) " +${LangFileString} Reinstall_OptionUninstall "Ç'instalo VLC" diff --git a/support/3rd_party/vlc/languages/ArabicExtra.nsh b/support/3rd_party/vlc/languages/ArabicExtra.nsh new file mode 100644 index 0000000..9257a54 --- /dev/null +++ b/support/3rd_party/vlc/languages/ArabicExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Arabic +${LangFileString} Name_Section01 "مشغّل الوسائط (مطلوب)" +${LangFileString} Name_Section02a "اختصار في قائمة ”ابدأ“" +${LangFileString} Name_Section02b "اختصار على سطح المكتب" +${LangFileString} Name_Section34 "ملحقات الوِب" +${LangFileString} Name_Section03 "ملحقة موزيلا" +${LangFileString} Name_Section04 "ملحقة ActiveX" +${LangFileString} Name_Section05 "تشغيل الأقراص" +${LangFileString} Name_Section06 "ارتباطات أنواع الملفات" +${LangFileString} Name_SectionGroupAudio "الملفات الصوتية" +${LangFileString} Name_SectionGroupVideo "الملفات المرئية" +${LangFileString} Name_SectionGroupOther "أخرى" +${LangFileString} Name_Section07 "قوائم المحتوى" +${LangFileString} Name_Section08 "احذف التفضيلات والخبيئة" + +${LangFileString} Desc_Section01 \ + "مشغّل الوسائط ذاته" +${LangFileString} Desc_Section02a \ + "يضيف أيقونات لقائمة ”ابدأ“ لوصول أيسر" +${LangFileString} Desc_Section02b \ + "يضيف أيقونة على سطح المكتب لوصول أيسر" +${LangFileString} Desc_Section03 \ + "ملحقة VLC لموزيلا وموزيلا فَيَرفُكس" +${LangFileString} Desc_Section04 \ + "ملحقة VLC لِ‍ ActiveX" +${LangFileString} Desc_Section05 \ + "تسجيل تشغيل CD و DVD" +${LangFileString} Desc_Section06 \ + "يضبط مشغّل الوسائط VLC ليكون التطبيق المبدئي لنوع الملفات المحدد" +${LangFileString} Desc_Section07 \ + "أضِف عناصر إلى قائمة السياق (’شغّل بِ‍ VLC‘ و’أضِف إلى قائمة تشغيل VLC‘)" +${LangFileString} Desc_Section08 \ + "يحذف التفضيلات والخبيئة لمشغّل الوسائط VLC التي بقت من النسخ السابقة" + +${LangFileString} Name_Section91 "أزِل التثبيت" +${LangFileString} Name_Section92 "احذف التفضيلات و ذاكرة تخزين مؤقت" + +${LangFileString} Desc_Section91 \ +"أزِل تثبيت مشغّل الوسائط VLC وكلّ مكوّناته" +${LangFileString} Desc_Section92 \ +"احذف تفضيلات مشغّل الوسائط VLC وملفات الخبيئة" + +${LangFileString} ShellAssociation_Play "شغّل" +${LangFileString} ContextMenuEntry_PlayWith "شغّل بمشغّل الوسائط VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "أضِف إلى قائمة مشغّل الوسائط VLC" + +${LangFileString} Link_VisitWebsite "زُر موقع مشغّل الوسائط VLC من VideoLAN" + +${LangFileString} Name_InstTypeRecommended "مُوصى به" +${LangFileString} Name_InstTypeMinimum "الأدنى" +${LangFileString} Name_InstTypeFull "كامل" + +${LangFileString} Action_OnArrivalDVD "شغّل فيلم DVD" +${LangFileString} Action_OnArrivalAudioCD "شغّل CD صوتي" +${LangFileString} Action_OnArrivalVCDMovie "شغّل فيلم VCD" +${LangFileString} Action_OnArrivalSVCDMovie "شغّل فيلم SVCD" +${LangFileString} Action_OnArrivalVideoFiles "شغّل ملفات الفيديو" +${LangFileString} Action_OnArrivalMusicFiles "شغّل الملفات الصوتية" +${LangFileString} Action_OnArrivalDVDAudio "شغّل DVD صوتي" +${LangFileString} Action_OnArrivalBluray "تشغيل بلو-ري" + +${LangFileString} License_NextText "أصبحت على علم بحقوقك. انقر ”التالي“ للمتابعة." + +${LangFileString} Detail_CheckProcesses "يتحقق من العمليات..." +${LangFileString} MessageBox_VLCRunning "يبدو أن VLC يعمل وسيُغلق الآن." +${LangFileString} MessageBox_VLCUnableToClose "تعذر على المثبّت إغلاق VLC، رجاءً أغلقه يدويا." +${LangFileString} MessageBox_InstallAborted "تم الإحباط التثبيت" + +${LangFileString} Reinstall_Headline "مثبًّت مسبقا" +${LangFileString} Reinstall_HeadlineInstall "اختر طريقة تثبيت VLC." +${LangFileString} Reinstall_HeadlineMaintenance "اختر نوع الصيانة التي تريد القيام بها." +${LangFileString} Reinstall_MessageOlder "ثمة نسخة أقدم من VLC مثبّتة في النظام. اختر العملية التي تريد إجراءها وانقر ”التالي“ للمتابعة." +${LangFileString} Reinstall_MessageNewer "ثمة نسخة أحدث من VLC مثبّتة! ليس مستحسنا العودة إلى نسخة أقدم. اختر العملية التي تريد إجراءها وانقر ”التالي“ للمتابعة." +${LangFileString} Reinstall_MessageSame "النسخة ${VERSION} من VLC مثبتة بالفعل. اختر العملية التي تريد إجراءها وانقر ”التالي“ للمتابعة." +${LangFileString} Reinstall_OptionUpgrade "رقِّ VLC مستخدما الإعدادات السابقة (مستحسن)" +${LangFileString} Reinstall_OptionDowngrade "أنزِل نسخة VLC مستخدماً الإعدادات السابقة (مستحسن)" +${LangFileString} Reinstall_OptionComponents "أضِف/أزِل/أعِد تثبيت المكوّنات" +${LangFileString} Reinstall_OptionAdvanced "غيّر الإعدادات (متقدم)" +${LangFileString} Reinstall_OptionUninstall "أزِل تثبيت VLC" diff --git a/support/3rd_party/vlc/languages/AsturianExtra.nsh b/support/3rd_party/vlc/languages/AsturianExtra.nsh new file mode 100644 index 0000000..bec484d --- /dev/null +++ b/support/3rd_party/vlc/languages/AsturianExtra.nsh @@ -0,0 +1,77 @@ +!insertmacro LANGFILE_EXT Asturian +${LangFileString} Name_Section01 "Reproductor multimedia (ríquese)" +${LangFileString} Name_Section02a "Atayu nel menú d'aniciu" +${LangFileString} Name_Section02b "Atayu nel escritoriu" +${LangFileString} Name_Section34 "Plugins web" +${LangFileString} Name_Section03 "Plugin pa Firefox" +${LangFileString} Name_Section04 "Plugin d'ActiveX" +${LangFileString} Name_Section05 "Reproducción de discos" +${LangFileString} Name_Section06 "Asociaciones de tribes de ficheru" +${LangFileString} Name_SectionGroupAudio "Ficheros d'audiu" +${LangFileString} Name_SectionGroupVideo "Ficheros de videu" +${LangFileString} Name_SectionGroupOther "Otros" +${LangFileString} Name_Section07 "Menús contestuales" +${LangFileString} Name_Section08 "Desaniciar caché y preferencies" + +${LangFileString} Desc_Section01 \ + "El propiu reproductor" +${LangFileString} Desc_Section02a \ + "Amiesta iconos al menú Aniciu pa un accesu fácil" +${LangFileString} Desc_Section02b \ + "Amiesta iconos al Escritoriu pa un accesu fácil" +${LangFileString} Desc_Section03 \ + "El complementu VLC de Mozilla y Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "El complementu VLC d'ActiveX" +${LangFileString} Desc_Section05 \ + "Rexistru de reproducción DVD y CD" +${LangFileString} Desc_Section06 \ + "Afitar el Reproductor multimedia VLC como aplicación predefinida pa la triba de ficheru especificada" +${LangFileString} Desc_Section07 \ + "Amiesta opciones nel menú contestual («Reproducir con VLC» y «Amestar a la llista de VLC»)" +${LangFileString} Desc_Section08 \ + "Desanicia los ficheros de caché y preferencies del reproductor multimedia VLC d'instalaciones anteriores" + +${LangFileString} Name_Section91 "Desinstalar" +${LangFileString} Name_Section92 "Desaniciar caché y preferencies" + +${LangFileString} Desc_Section91 \ +"Desinstalar reproductor VLC y tolos componentes" +${LangFileString} Desc_Section92 \ +"Desanicia los ficheros de caché y preferencies de VLC" + +${LangFileString} ShellAssociation_Play "Reproducir" +${LangFileString} ContextMenuEntry_PlayWith "Reproducir con VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Amestar a la llista de VLC" + +${LangFileString} Link_VisitWebsite "Visita'l sitiu VideoLAN VLC" + +${LangFileString} Name_InstTypeRecommended "Recomiéndase" +${LangFileString} Name_InstTypeMinimum "Mínima" +${LangFileString} Name_InstTypeFull "Completa" + +${LangFileString} Action_OnArrivalDVD "Reproducir película DVD" +${LangFileString} Action_OnArrivalAudioCD "Reproducir CD d'audiu" +${LangFileString} Action_OnArrivalVCDMovie "Reproducir película VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Reproducir película SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Reproducir ficheros de videu" +${LangFileString} Action_OnArrivalMusicFiles "Reproducir ficheros d'audiu" +${LangFileString} Action_OnArrivalDVDAudio "Reproducir DVD d'audiu" +${LangFileString} License_NextText "Agora que yes consciente de los tos drechos, calca Siguiente pa siguir." + +${LangFileString} Detail_CheckProcesses "Comprobando procesos..." +${LangFileString} MessageBox_VLCRunning "VLC entá ta executándose y va zarrase agora" +${LangFileString} MessageBox_VLCUnableToClose "Esti instalador nun pudo zarrar VLC, por favor, failo tu." +${LangFileString} MessageBox_InstallAborted "Instalación encaboxada" + +${LangFileString} Reinstall_Headline "Yá ta instaláu" +${LangFileString} Reinstall_HeadlineInstall "Seleiciona cómo quies instalar VLC" +${LangFileString} Reinstall_HeadlineMaintenance "Seleiciona la opción de caltenmientu a facer" +${LangFileString} Reinstall_MessageOlder "Hai instalada una versión más antigua de VLC nel sistema. Seleiciona la operación que quies facer y primi Siguiente pa continuar" +${LangFileString} Reinstall_MessageNewer "Hai instalada una versión más nueva de VLC nel sistema. Nun se recomienda qu'instales una versión más vieya. Seleiciona la operación que quies facer y primi Siguiente pa continuar." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} yá ta instaláu. Seleiciona la operación que quies facer, y primi Siguiente pa continuar." +${LangFileString} Reinstall_OptionUpgrade "Anovar VLC usando les siguientes preferencies (recomiéndase)" +${LangFileString} Reinstall_OptionDowngrade "Baxar VLC de versión usando les preferencies anteriores (recomiéndase)" +${LangFileString} Reinstall_OptionComponents "Amestar/Desaniciar/Reinstalar componentes" +${LangFileString} Reinstall_OptionAdvanced "Camudar preferencies (avanzáu)" +${LangFileString} Reinstall_OptionUninstall "Desinstalar VLC" diff --git a/support/3rd_party/vlc/languages/BasqueExtra.nsh b/support/3rd_party/vlc/languages/BasqueExtra.nsh new file mode 100644 index 0000000..7e7017d --- /dev/null +++ b/support/3rd_party/vlc/languages/BasqueExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Basque +${LangFileString} Name_Section01 "Multimedia-erreproduzigailua (beharrezkoa)" +${LangFileString} Name_Section02a "'Hasi' menuko lasterbidea" +${LangFileString} Name_Section02b "Mahaigaineko lasterbidea" +${LangFileString} Name_Section34 "Weberako pluginak" +${LangFileString} Name_Section03 "Mozilla plugina" +${LangFileString} Name_Section04 "ActiveX plugina" +${LangFileString} Name_Section05 "Diskoen erreprodukzioa" +${LangFileString} Name_Section06 "Fitxategi moten asoziazioak" +${LangFileString} Name_SectionGroupAudio "Audio-fitxategiak" +${LangFileString} Name_SectionGroupVideo "Bideo-fitxategiak" +${LangFileString} Name_SectionGroupOther "Bestelakoak" +${LangFileString} Name_Section07 "Testuinguru-menuak" +${LangFileString} Name_Section08 "Ezabatu hobespenak eta cachea" + +${LangFileString} Desc_Section01 \ + "Multimedia-erreproduzigailua bera" +${LangFileString} Desc_Section02a \ + "Sarbidea errazteko ikonoak gehitzen ditu 'Hasi' menuan" +${LangFileString} Desc_Section02b \ + "Sarbidea errazteko ikonoak gehitzen ditu mahaigainean" +${LangFileString} Desc_Section03 \ + "Mozilla eta Mozilla Firefox VLC plugina" +${LangFileString} Desc_Section04 \ + "ActiveX VLC plugina" +${LangFileString} Desc_Section05 \ + "DVD eta CDen erreprodukzioaren erregistroa" +${LangFileString} Desc_Section06 \ + "VLC multimedia-erreproduzigailua lehenetsitako aplikazio gisa ezartzen du zehaztutako fitxategi motarentzat" +${LangFileString} Desc_Section07 \ + "Gehitu testuinguru-menuko elementuak ('Erreproduzitu VLCrekin' eta 'Gehitu VLCren erreprodukzio-zerrendan')" +${LangFileString} Desc_Section08 \ + "Aurreko instalazioetatik dauden VLC multimedia-erreproduzigailuaren hobespenak eta cacheko fitxategiak ezabatzen ditu" + +${LangFileString} Name_Section91 "Desinstalatu" +${LangFileString} Name_Section92 "Ezabatu hobespenak eta cachea" + +${LangFileString} Desc_Section91 \ +"Desinstalatu VLC multimedia-erreproduzigailua eta bere osagai guztiak" +${LangFileString} Desc_Section92 \ +"VLC multimedia-erreproduzigailuaren hobespenak eta cacheko fitxategiak ezabatzen ditu" + +${LangFileString} ShellAssociation_Play "Erreproduzitu" +${LangFileString} ContextMenuEntry_PlayWith "Erreproduzitu VLC multimedia-erreproduzigailuarekin" +${LangFileString} ContextMenuEntry_AddToPlaylist "Gehitu VLCren erreprodukzio-zerrendan" + +${LangFileString} Link_VisitWebsite "Bisitatu Videolan VLC multimedia-erreproduzigailuaren webgunea" + +${LangFileString} Name_InstTypeRecommended "Gomendatua" +${LangFileString} Name_InstTypeMinimum "Gutxienekoa" +${LangFileString} Name_InstTypeFull "Osoa" + +${LangFileString} Action_OnArrivalDVD "Erreproduzitu DVD filma" +${LangFileString} Action_OnArrivalAudioCD "Erreproduzitu audio CDa" +${LangFileString} Action_OnArrivalVCDMovie "Erreproduzitu VCD filma" +${LangFileString} Action_OnArrivalSVCDMovie "Erreproduzitu SVCD filma" +${LangFileString} Action_OnArrivalVideoFiles "Erreproduzitu bideo-fitxategiak" +${LangFileString} Action_OnArrivalMusicFiles "Erreproduzitu audio-fitxategiak" +${LangFileString} Action_OnArrivalDVDAudio "Erreproduzitu audio DVDa" +${LangFileString} Action_OnArrivalBluray "Erreproduzitu Blu-ray-a" + +${LangFileString} License_NextText "Zure eskubideen berri duzu orain. Jarraitzeko, egin klik 'Hurrengoa' botoian." + +${LangFileString} Detail_CheckProcesses "Prozesuak egiaztatzen..." +${LangFileString} MessageBox_VLCRunning "VLC exekutatzen ari dela dirudi eta itxi egingo da orain." +${LangFileString} MessageBox_VLCUnableToClose "Instalatzaileak ezin izan du VLC itxi, egizu eskuz." +${LangFileString} MessageBox_InstallAborted "Instalazioa abortatuta!" + +${LangFileString} Reinstall_Headline "Dagoeneko instalatuta" +${LangFileString} Reinstall_HeadlineInstall "Aukeratu nola nahi duzun instalatu VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Aukeratu burutu beharreko mantenu-aukera." +${LangFileString} Reinstall_MessageOlder "VLCren bertsio zaharragoa instalatuta dago sisteman. Hautatu burutu nahi duzun eragiketa eta jarraitzeko egin klik Hurrengoa botoian." +${LangFileString} Reinstall_MessageNewer "VLCren bertsio berriagoa instalatuta dago lehendik! Ez da gomendagarria bertsio-zahartzea. Hautatu burutu nahi duzun eragiketa eta jarraitzeko egin klik Hurrengoa botoian." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} instalatuta dago lehendik. Hautatu burutu nahi duzun eragiketa eta jarraitzeko egin klik Hurrengoa botoian." +${LangFileString} Reinstall_OptionUpgrade "Bertsio-berritu VLC aurreko ezarpenak erabiliz (gomendatua)" +${LangFileString} Reinstall_OptionDowngrade "Bertsio-zahartu VLC aurreko ezarpenak erabiliz (gomendatua)" +${LangFileString} Reinstall_OptionComponents "Gehitu/kendu/berrinstalatu osagaiak" +${LangFileString} Reinstall_OptionAdvanced "Aldatu ezarpenak (aurreratua)" +${LangFileString} Reinstall_OptionUninstall "Desinstalatu VLC" diff --git a/support/3rd_party/vlc/languages/BosnianExtra.nsh b/support/3rd_party/vlc/languages/BosnianExtra.nsh new file mode 100644 index 0000000..ef8b70f --- /dev/null +++ b/support/3rd_party/vlc/languages/BosnianExtra.nsh @@ -0,0 +1,77 @@ +!insertmacro LANGFILE_EXT Bosnian +${LangFileString} Name_Section01 "Medijski Izvođač (neophodan)" +${LangFileString} Name_Section02a "Prečac Start Menija" +${LangFileString} Name_Section02b "Prečac Radne Površine" +${LangFileString} Name_Section34 "Web dodaci" +${LangFileString} Name_Section03 "Mozilla dodatak" +${LangFileString} Name_Section04 "ActiveX dodatak" +${LangFileString} Name_Section05 "Reproduciranje Diskova" +${LangFileString} Name_Section06 "Asocijacije tipa datoteke" +${LangFileString} Name_SectionGroupAudio "Zvučne Datoteke" +${LangFileString} Name_SectionGroupVideo "Video Datoteke" +${LangFileString} Name_SectionGroupOther "Druge" +${LangFileString} Name_Section07 "Kontekstni Meniji" +${LangFileString} Name_Section08 "Izbriši postavljanja i predmemoriranje" + +${LangFileString} Desc_Section01 \ + "Sam medijski izvođač" +${LangFileString} Desc_Section02a \ + "Dodaje ikone na vaš start meni za jednostavan pristup" +${LangFileString} Desc_Section02b \ + "Dodaje ikonu na vašu radnu površinu za jednostavan pristup" +${LangFileString} Desc_Section03 \ + "VLC Mozilla i Mozilla Firefox dodatak" +${LangFileString} Desc_Section04 \ + "VLC ActiveX dodatak" +${LangFileString} Desc_Section05 \ + "DVD i CD registracija reprodukcije" +${LangFileString} Desc_Section06 \ + "Postavlja VLC medijski izvođač kao zadanu aplikaciju za naznačene tipove datoteka" +${LangFileString} Desc_Section07 \ + "Dodaj stavke kontekstnog menija ('Produciraj Sa VLC-om' i 'Dodaj Na Listu izvođenja VLC-a')" +${LangFileString} Desc_Section08 \ + "Briše postavljanja VLC medijskog izvođača i preostale datoteke predmemoriranja od prethodnih instalacija" + +${LangFileString} Name_Section91 "Deinstaliraj" +${LangFileString} Name_Section92 "Izbriši postavljanja i predmemoriranje" + +${LangFileString} Desc_Section91 \ +"Deinstaliraj VLC medijski izvođač i sve njegove komponente" +${LangFileString} Desc_Section92 \ +"Briše postavljanja VLC medijskog izvođača i datoteke predmemoriranja" + +${LangFileString} ShellAssociation_Play "Produciraj" +${LangFileString} ContextMenuEntry_PlayWith "Produciraj sa VLC medijskim izvođačom" +${LangFileString} ContextMenuEntry_AddToPlaylist "Dodaj na listu izvođenja VLC medijskog izvođača" + +${LangFileString} Link_VisitWebsite "Posjetite Web Stranicu VideoLAN VLC medijskog izvođača" + +${LangFileString} Name_InstTypeRecommended "Preporučeno" +${LangFileString} Name_InstTypeMinimum "Minimalno" +${LangFileString} Name_InstTypeFull "Komplet" + +${LangFileString} Action_OnArrivalDVD "Produciraj DVD film" +${LangFileString} Action_OnArrivalAudioCD "Produciraj zvučni CD" +${LangFileString} Action_OnArrivalVCDMovie "Produciraj VCD film" +${LangFileString} Action_OnArrivalSVCDMovie "Produciraj SVCD film" +${LangFileString} Action_OnArrivalVideoFiles "Produciraj video datoteke" +${LangFileString} Action_OnArrivalMusicFiles "Produciraj zvučne datoteke" +${LangFileString} Action_OnArrivalDVDAudio "Produciraj zvučni DVD" +${LangFileString} License_NextText "Sada ste svjesni svojih prava. Kliknite Sljedeće za nastavak." + +${LangFileString} Detail_CheckProcesses "Provjeravam procese..." +${LangFileString} MessageBox_VLCRunning "VLC je izgleda pokrenut i sada će biti zatvoren." +${LangFileString} MessageBox_VLCUnableToClose "Instalater nije uspio zatvoriti VLC, molimo da to učinite ručno." +${LangFileString} MessageBox_InstallAborted "Instalacija prekinuta!" + +${LangFileString} Reinstall_Headline "Već Instalirano" +${LangFileString} Reinstall_HeadlineInstall "Izaberite kako želite instalirati VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Izaberite opciju održavanja za izvedbu." +${LangFileString} Reinstall_MessageOlder "Starija verzija VLC je instalirana na sistem. Odaberite opreaciju koju želite da se izvede i kliknite Sljedeće da bi nastavili." +${LangFileString} Reinstall_MessageNewer "Novija verzija VLC-a je već instalirana! Nije preporučeno da se unazađuje na stariju verziju. Odaberite operaciju koju želite da se izvede i kliknite Sljedeće da bi nastavili." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} je već instalirana. Odaberite operaciju koju želite da se izvede i klinite Sljedeće da bi nastavili." +${LangFileString} Reinstall_OptionUpgrade "Nadogradi VLC koristeći prethodne postavke (preporučeno)" +${LangFileString} Reinstall_OptionDowngrade "Unazadi VLC koristeći prethodne postavke (preporučeno)" +${LangFileString} Reinstall_OptionComponents "Dodaj/Izbriši/Ponovo instaliraj komponente" +${LangFileString} Reinstall_OptionAdvanced "Izmijeni postavke (napredno)" +${LangFileString} Reinstall_OptionUninstall "Deinstaliraj VLC" diff --git a/support/3rd_party/vlc/languages/BretonExtra.nsh b/support/3rd_party/vlc/languages/BretonExtra.nsh new file mode 100644 index 0000000..7475d61 --- /dev/null +++ b/support/3rd_party/vlc/languages/BretonExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Breton +${LangFileString} Name_Section01 "Lenner Media (rekiset)" +${LangFileString} Name_Section02a "Kregiñ gant Roll ar Berradennoù Klavier" +${LangFileString} Name_Section02b "Berradenn ar Burev" +${LangFileString} Name_Section34 "Lugantoù ar genrouedad" +${LangFileString} Name_Section03 "Lugant Mozilla" +${LangFileString} Name_Section04 "Lugant ActiveX" +${LangFileString} Name_Section05 "Lenn ar pladennoù" +${LangFileString} Name_Section06 "Kevreadigezhioù an doareoù restr" +${LangFileString} Name_SectionGroupAudio "Restroù Aodio" +${LangFileString} Name_SectionGroupVideo "Restroù Video" +${LangFileString} Name_SectionGroupOther "Traoù all" +${LangFileString} Name_Section07 "Lañserioù Kemperzhel" +${LangFileString} Name_Section08 "Lemel ar gwellvezioù hag ar grubuilh" + +${LangFileString} Desc_Section01 \ + "Al lenner media en e-unan" +${LangFileString} Desc_Section02a \ + "Ouzhpennañ arlunioù d'ho lañser loc’hañ evit ur moned aes" +${LangFileString} Desc_Section02b \ + "Ouzhpennañ un arlun d'ho purev evit ur moned aes" +${LangFileString} Desc_Section03 \ + "Lugant VLC Mozilla ha Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Lugant VLC ActiveX" +${LangFileString} Desc_Section05 \ + "Enrollañ al lenn ar pladennoù DVD ha CD" +${LangFileString} Desc_Section06 \ + "Termeniñ al lenner liesvedia VLC evel arload dre ziouer evit an doare restr spisaet" +${LangFileString} Desc_Section07 \ + "Ouzhpennañ elfennoù lañser kemperzhel ('Lenn gant VLC' ha 'Ouzhpennañ da roll-lenn VLC')" +${LangFileString} Desc_Section08 \ + "Dilemel gwellvezioù VLC media player ha restroù krubuilh ar staliadurioù kent" + +${LangFileString} Name_Section91 "Distaliañ" +${LangFileString} Name_Section92 "Lemel ar gwellvezioù hag ar grubuilh" + +${LangFileString} Desc_Section91 \ +"Distaliañ lenner media VLC hag e holl barzhioù" +${LangFileString} Desc_Section92 \ +"Lemel gwellvezioù al lenner media VLC ha restroù ar grubuilh" + +${LangFileString} ShellAssociation_Play "Lenn" +${LangFileString} ContextMenuEntry_PlayWith "Lenn gant VLC media player" +${LangFileString} ContextMenuEntry_AddToPlaylist "Ouzhpennañ da roll-lenn al lenner media VLC" + +${LangFileString} Link_VisitWebsite "Mont da welet lec’hienn al lenner media VideoLAN VLC" + +${LangFileString} Name_InstTypeRecommended "Aliet" +${LangFileString} Name_InstTypeMinimum "Minimum" +${LangFileString} Name_InstTypeFull "Klok" + +${LangFileString} Action_OnArrivalDVD "Lenn ur film DVD" +${LangFileString} Action_OnArrivalAudioCD "Lenn ur bladenn aodio CD" +${LangFileString} Action_OnArrivalVCDMovie "Lenn ur bladenn film VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Lenn ur bladenn film SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Lenn restroù video" +${LangFileString} Action_OnArrivalMusicFiles "Lenn restroù aodio" +${LangFileString} Action_OnArrivalDVDAudio "Lenn pladennoù aodio DVD" +${LangFileString} Action_OnArrivalBluray "Lenn Blu-ray" + +${LangFileString} License_NextText "Kelaouet oc’h bremañ diwar-benn ho kwirioù. Klikit war Da-Heul evit kenderc’hel." + +${LangFileString} Detail_CheckProcesses "O wiriañ an argerzhoù..." +${LangFileString} MessageBox_VLCRunning "VLC a seblant mont en-dro hag e vo serret bremañ." +${LangFileString} MessageBox_VLCUnableToClose "Ne oa ket gouest ar stalier da serriñ VLC, grit gant an dorn mar plij." +${LangFileString} MessageBox_InstallAborted "Staliadur dilezet!" + +${LangFileString} Reinstall_Headline "Staliet dija" +${LangFileString} Reinstall_HeadlineInstall "Dibabit penaos e fell deoc’h staliañ VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Dibabit an dibarzh trezalc’h da ober." +${LangFileString} Reinstall_MessageOlder "Ur stumm koshoc’h eus VLC a zo staliet war ho reizhiad. Dibabit an oberiadenn a fell deoc’h lañsañ anezhi ha klikit war Da Heul evit kenderc’hel." +${LangFileString} Reinstall_MessageNewer "Ur stumm nevesoc’h eus VLC a zo staliet dija! N'eo ket erbedet ec'h argilfec'h betek ur stumm koshoc’h. Dibabit an oberiadenn a fell deoc’h lañsañ ha klikit war Da Heul evit kenderc’hel." +${LangFileString} Reinstall_MessageSame "Staliet eo VLC ${VERSION} dija. Dibabit an oberiadenn a fell deoc’h lañsañ ha klikit war Da Heul evit kenderc’hel." +${LangFileString} Reinstall_OptionUpgrade "Hizivaat VLC en ur ober gant an arventennoù kent (erbedet)" +${LangFileString} Reinstall_OptionDowngrade "Argilañ VLC en ur ober gant an arventennoù kent (erbedet)" +${LangFileString} Reinstall_OptionComponents "Ouzhpennañ/Lemel/Adstaliañ parzhioù" +${LangFileString} Reinstall_OptionAdvanced "Kemm an arventennoù (araokaet)" +${LangFileString} Reinstall_OptionUninstall "Distaliañ VLC" diff --git a/support/3rd_party/vlc/languages/BulgarianExtra.nsh b/support/3rd_party/vlc/languages/BulgarianExtra.nsh new file mode 100644 index 0000000..643b904 --- /dev/null +++ b/support/3rd_party/vlc/languages/BulgarianExtra.nsh @@ -0,0 +1,77 @@ +!insertmacro LANGFILE_EXT Bulgarian +${LangFileString} Name_Section01 "Медиен Плеър (задължително)" +${LangFileString} Name_Section02a "Пряк път в менюто „Старт“" +${LangFileString} Name_Section02b "Пряк път на работния плот" +${LangFileString} Name_Section34 "Браузърни разширения" +${LangFileString} Name_Section03 "Разширение за Mozilla" +${LangFileString} Name_Section04 "Разширение от тип „ActiveX“" +${LangFileString} Name_Section05 "Възпроизвеждане на дискове" +${LangFileString} Name_Section06 "Асоцииране на файлове" +${LangFileString} Name_SectionGroupAudio "Аудио файлове" +${LangFileString} Name_SectionGroupVideo "Видео файлове" +${LangFileString} Name_SectionGroupOther "Други" +${LangFileString} Name_Section07 "Контекстни менюта" +${LangFileString} Name_Section08 "Изтриване на предпочитанията и кеша" + +${LangFileString} Desc_Section01 \ + "Медийният плеър" +${LangFileString} Desc_Section02a \ + "Добавя иконки за бърз достъп в менюто „Старт“" +${LangFileString} Desc_Section02b \ + "Добавя иконка за бърз достъп на работния Ви плот" +${LangFileString} Desc_Section03 \ + "Разширението на VLC за Mozilla и Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Разширението на VLC от тип „ActiveX“" +${LangFileString} Desc_Section05 \ + "Регистрация за изпълнение на CD и DVD дискове" +${LangFileString} Desc_Section06 \ + "Задава VLC като приложението по подразбиране за избрания тип файлове" +${LangFileString} Desc_Section07 \ + "Добавяне на елементи на контекстното меню ('Възпроизвеждане с VLC' и 'Добави към VLC лист за възпроизвеждане')" +${LangFileString} Desc_Section08 \ + "Изтриване на настройки и кеш файлове останали от предишна инсталация на VLC" + +${LangFileString} Name_Section91 "Деинсталиране" +${LangFileString} Name_Section92 "Изтриване на настройките и временните файлове" + +${LangFileString} Desc_Section91 \ +"Деинсталирайте VLC и всичките му компоненти" +${LangFileString} Desc_Section92 \ +"Изтрива VLC настройки и кеш файлове" + +${LangFileString} ShellAssociation_Play "Възпроизведи" +${LangFileString} ContextMenuEntry_PlayWith "Пусни с VLC media player" +${LangFileString} ContextMenuEntry_AddToPlaylist "Добави към плейлиста на VLC media player" + +${LangFileString} Link_VisitWebsite "Посещение на сайта на VideoLAN VLC Media Player" + +${LangFileString} Name_InstTypeRecommended "Препоръчително" +${LangFileString} Name_InstTypeMinimum "Минимално" +${LangFileString} Name_InstTypeFull "Пълно" + +${LangFileString} Action_OnArrivalDVD "Възпроизведи филма от DVD" +${LangFileString} Action_OnArrivalAudioCD "Възпроизведи аудио файловете от CD" +${LangFileString} Action_OnArrivalVCDMovie "Възпроизведи филма от VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Възпроизведи филма от SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Възпроизведи видео файлове" +${LangFileString} Action_OnArrivalMusicFiles "Възпроизведи аудио файлове" +${LangFileString} Action_OnArrivalDVDAudio "Възпроизведи аудио от DVD" +${LangFileString} License_NextText "Вече сте наясно с вашите права. Натиснете $\"Напред$\" за да продължите." + +${LangFileString} Detail_CheckProcesses "Проверяване на процеси..." +${LangFileString} MessageBox_VLCRunning "VLC работи и сега ще бъде затворен" +${LangFileString} MessageBox_VLCUnableToClose "Инсталаторът не може да затвори VLC, моля направете го ръчно" +${LangFileString} MessageBox_InstallAborted "Инсталацията е прекратена!" + +${LangFileString} Reinstall_Headline "Вече е инсталиран" +${LangFileString} Reinstall_HeadlineInstall "Изберете как да инсталирате VLC" +${LangFileString} Reinstall_HeadlineMaintenance "Изберете опции за изпълнение на профилактика." +${LangFileString} Reinstall_MessageOlder "По-стара версия на VLC е инсталирана във вашата система. Изберете операция. която искате да изпълните и натиснете $\"Напред$\" за да продължите." +${LangFileString} Reinstall_MessageNewer "По-нова версия на VLC вече е инсталирана! Не се препоръчва да сменята с по-стара. Изберете операция, която желаете да изпълните и натиснете $\"Напред$\" за да продължите." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} е вече инсталирана. Изберете операция, която желаете да изпълните и натиснете $\"Напред$\" за да продължите." +${LangFileString} Reinstall_OptionUpgrade "Обновете VLC използвайки предишните настройки (препоръчително)" +${LangFileString} Reinstall_OptionDowngrade "Върнете стара версия на VLC използвайки предишните настройки (препоръчително)" +${LangFileString} Reinstall_OptionComponents "Добавете,премахнете или преинсталирайте компоненти" +${LangFileString} Reinstall_OptionAdvanced "Промени настройки (разширени)" +${LangFileString} Reinstall_OptionUninstall "Деинсталиране на VLC" diff --git a/support/3rd_party/vlc/languages/CatalanExtra.nsh b/support/3rd_party/vlc/languages/CatalanExtra.nsh new file mode 100644 index 0000000..4b279a1 --- /dev/null +++ b/support/3rd_party/vlc/languages/CatalanExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Catalan +${LangFileString} Name_Section01 "Reproductor multimèdia (requerit)" +${LangFileString} Name_Section02a "Drecera de menú d'inici" +${LangFileString} Name_Section02b "Drecera d'escriptori" +${LangFileString} Name_Section34 "Connectors web" +${LangFileString} Name_Section03 "Connector Mozilla" +${LangFileString} Name_Section04 "Connector ActiveX" +${LangFileString} Name_Section05 "Reproducció de discos" +${LangFileString} Name_Section06 "Associació de tipus de fitxer" +${LangFileString} Name_SectionGroupAudio "Fitxers d'àudio" +${LangFileString} Name_SectionGroupVideo "Fitxers de vídeo" +${LangFileString} Name_SectionGroupOther "Altres" +${LangFileString} Name_Section07 "Menús contextuals" +${LangFileString} Name_Section08 "Esborra les preferències i la memòria cau" + +${LangFileString} Desc_Section01 \ + "El mateix reproductor multimèdia" +${LangFileString} Desc_Section02a \ + "Afegeix icones al menú d'inici per a un accés més fàcil" +${LangFileString} Desc_Section02b \ + "Afegeix una icona a l'escriptori per a un accés fàcil" +${LangFileString} Desc_Section03 \ + "El connector VLC Mozilla i Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "El connector VLC ActiveX" +${LangFileString} Desc_Section05 \ + "Registre de reproducció CD i DVD" +${LangFileString} Desc_Section06 \ + "Estableix el reproductor multimèdia VLC com a aplicació per defecte per al tipus de fitxer especificat" +${LangFileString} Desc_Section07 \ + "Afegeix elements al menú contextual («Reprodueix amb el VLC» i «Afegeix a la llista de reproducció del VLC»)" +${LangFileString} Desc_Section08 \ + "Esborra les preferències i la memòria cau d'instal·lacions anteriors del reproductor multimèdia VLC" + +${LangFileString} Name_Section91 "Desinstal·la" +${LangFileString} Name_Section92 "Esborra les preferències i la memòria cau" + +${LangFileString} Desc_Section91 \ +"Desinstal·la el reproductor multimèdia VLC i tots els seus components" +${LangFileString} Desc_Section92 \ +"Esborra totes les preferències i fitxers de memòria cau del reproductor multimèdia VLC" + +${LangFileString} ShellAssociation_Play "Reprodueix" +${LangFileString} ContextMenuEntry_PlayWith "Reprodueix amb el reproductor multimèdia VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Afegeix a la llista de reproducció del reproductor multimèdia VLC" + +${LangFileString} Link_VisitWebsite "Visita el lloc web del reproductor multimèdia VideoLAN VLC" + +${LangFileString} Name_InstTypeRecommended "Recomanat" +${LangFileString} Name_InstTypeMinimum "Mínim" +${LangFileString} Name_InstTypeFull "Complet" + +${LangFileString} Action_OnArrivalDVD "Reprodueix una pel·lícula en DVD" +${LangFileString} Action_OnArrivalAudioCD "Reprodueix un CD d'àudio" +${LangFileString} Action_OnArrivalVCDMovie "Reprodueix una pel·lícula en VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Reprodueix una pel·lícula en SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Reprodueix fitxers de vídeo" +${LangFileString} Action_OnArrivalMusicFiles "Reprodueix fitxers d'àudio" +${LangFileString} Action_OnArrivalDVDAudio "Reprodueix DVD d'àudio" +${LangFileString} Action_OnArrivalBluray "Reprodueix Blu-ray" + +${LangFileString} License_NextText "Ara esteu al corrent dels vostres drets. Feu clic a «Següent» per continuar." + +${LangFileString} Detail_CheckProcesses "S'estan comprovant els processos..." +${LangFileString} MessageBox_VLCRunning "El VLC s'està executant i es tancarà." +${LangFileString} MessageBox_VLCUnableToClose "L'instal·lador no ha pogut tancar el VLC, feu-ho manualment." +${LangFileString} MessageBox_InstallAborted "S'ha interromput la instal·lació" + +${LangFileString} Reinstall_Headline "Ja s'ha instal·lat" +${LangFileString} Reinstall_HeadlineInstall "Trieu com voleu instal·lar el VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Trieu l'opció de manteniment que s'ha de dur a terme." +${LangFileString} Reinstall_MessageOlder "Existeix una versió més antiga del VLC instal·lada al sistema. Seleccioneu l'operació amb la qual voleu procedir i feu clic a «Següent» per continuar." +${LangFileString} Reinstall_MessageNewer "Existeix una versió més nova del VLC instal·lada al sistema. No es recomana instal·lar una versió més antiga. Seleccioneu l'operació amb la qual voleu procedir i feu clic a «Següent» per continuar." +${LangFileString} Reinstall_MessageSame "La versió ${VERSION} del VLC ja es troba instal·lada. Seleccioneu l'operació que voleu dur a terme i feu clic a «Següent» per continuar." +${LangFileString} Reinstall_OptionUpgrade "Actualitza el VLC fent servir els paràmetres existents (recomanat)" +${LangFileString} Reinstall_OptionDowngrade "Instal·la la versió més antiga fent servir els paràmetres existents (recomanat)" +${LangFileString} Reinstall_OptionComponents "Afegeix/Elimina/Torna a instal·lar components" +${LangFileString} Reinstall_OptionAdvanced "Canvia els paràmetres (avançat)" +${LangFileString} Reinstall_OptionUninstall "Desinstal·la el VLC" diff --git a/support/3rd_party/vlc/languages/CorsicanExtra.nsh b/support/3rd_party/vlc/languages/CorsicanExtra.nsh new file mode 100644 index 0000000..5646492 --- /dev/null +++ b/support/3rd_party/vlc/languages/CorsicanExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Corsican +${LangFileString} Name_Section01 "Lettore di media (richiestu)" +${LangFileString} Name_Section02a "Accurtatoghjiu di u listinu « Démarrer »" +${LangFileString} Name_Section02b "Accurtatoghju di scagnu" +${LangFileString} Name_Section34 "Estensioni web" +${LangFileString} Name_Section03 "Estensione mozilla" +${LangFileString} Name_Section04 "Estensione ActiveX" +${LangFileString} Name_Section05 "Ripruduzzione di dischi" +${LangFileString} Name_Section06 "Associi da tipu di schedariu" +${LangFileString} Name_SectionGroupAudio "Schedarii Audio" +${LangFileString} Name_SectionGroupVideo "Schedarii Video" +${LangFileString} Name_SectionGroupOther "Altru" +${LangFileString} Name_Section07 "Listini cuntestuali" +${LangFileString} Name_Section08 "Squassà e preferenze è l’impiatta" + +${LangFileString} Desc_Section01 \ + "U lettore di media istessu" +${LangFileString} Desc_Section02a \ + "Aghjunghje l’icone à u vostru listinu d’avviu per un usu più faciule" +${LangFileString} Desc_Section02b \ + "Aghjunghje l'icona à u vostru scagnu per un usu più faciule" +${LangFileString} Desc_Section03 \ + "L'estensione VLC per Mozilla and Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "L'estensione VLC per ActiveX" +${LangFileString} Desc_Section05 \ + "Ripruduzzione diretta di DVD è CD" +${LangFileString} Desc_Section06 \ + "Definisce VLC media player cum'è appiecazione predefinita per u tipu di schedariu specificatu" +${LangFileString} Desc_Section07 \ + "Aghjunghje l'elementi di listinu di cuntestu ('Sunà cù VLC' è 'Aghjunghje à a lista di lettura VLC')" +${LangFileString} Desc_Section08 \ + "Squassà e preferenze è i schedarii d'impiatta di VLC media player lasciati da e vechje installazioni" + +${LangFileString} Name_Section91 "Disinstallà" +${LangFileString} Name_Section92 "Squassà e preferenze è l’impiatta" + +${LangFileString} Desc_Section91 \ +"Desinstallà VLC media player è tutti i so cumpunenti" +${LangFileString} Desc_Section92 \ +"Squassà e preferenze è i schedarii d'impiatta di VLC media player" + +${LangFileString} ShellAssociation_Play "Sunà" +${LangFileString} ContextMenuEntry_PlayWith "Sunà cù VLC media player" +${LangFileString} ContextMenuEntry_AddToPlaylist "Aghjunghje à a lista di lettura di VLC media player" + +${LangFileString} Link_VisitWebsite "Visità u situ Web VLC media player di VideoLAN" + +${LangFileString} Name_InstTypeRecommended "Ricumandatu" +${LangFileString} Name_InstTypeMinimum "Minimu" +${LangFileString} Name_InstTypeFull "Cumpletu" + +${LangFileString} Action_OnArrivalDVD "Sunà un filmu DVD" +${LangFileString} Action_OnArrivalAudioCD "Sunà un CD audio" +${LangFileString} Action_OnArrivalVCDMovie "Sunà un filmu VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Sunà un filmu SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Sunà schedarii video" +${LangFileString} Action_OnArrivalMusicFiles "Sunà schedarii audio" +${LangFileString} Action_OnArrivalDVDAudio "Sunà un DVD audio" +${LangFileString} Action_OnArrivalBluray "Sunà Blu-ray" + +${LangFileString} License_NextText "Avà site cognitu di i vostri diritti. Sceglie Seguente per cuntinuà." + +${LangFileString} Detail_CheckProcesses "Cuntrollu di i prucedimenti…" +${LangFileString} MessageBox_VLCRunning "VLC pare dighjà in funzione è hà da esse chjosu." +${LangFileString} MessageBox_VLCUnableToClose "Stu stalladore ùn hà micca pussutu chjode VLC, ci vole à fallu manualmente." +${LangFileString} MessageBox_InstallAborted "Installazione interrotta !" + +${LangFileString} Reinstall_Headline "Dighjà installatu" +${LangFileString} Reinstall_HeadlineInstall "Sceglie cumu vulete installà VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Sceglie l’ozzione di mantenenza ch’ellu ci vole à fà." +${LangFileString} Reinstall_MessageOlder "Una versione più vechja di VLC hè installata nant’à u vostru sistema. Selezziunà l’operazione chì ci vole à fà è cliccà Seguente per cuntinuà." +${LangFileString} Reinstall_MessageNewer "Una versione più ricente di VLC hè dighjà installata ! Ùn hè micca ricumandatu di cambià per una versione più vechja. Selezziunà l’operazione chì ci vole à fà è cliccà Seguente per cuntinuà." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} hè dighjà installata. Selezziunà l’operazione chì ci vole à fà è cliccà Seguente per cuntinuà." +${LangFileString} Reinstall_OptionUpgrade "Mudernizà VLC impieghendu e preferenze arregistrate (ricumandatu)" +${LangFileString} Reinstall_OptionDowngrade "Invechjà VLC impieghendu e preferenze arregistrate (ricumandatu)" +${LangFileString} Reinstall_OptionComponents "Aghjunghje/Caccià/Reinstallà i cumpunenti" +${LangFileString} Reinstall_OptionAdvanced "Cambià e preferenze (modu espertu)" +${LangFileString} Reinstall_OptionUninstall "Desinstallà VLC" diff --git a/support/3rd_party/vlc/languages/CroatianExtra.nsh b/support/3rd_party/vlc/languages/CroatianExtra.nsh new file mode 100644 index 0000000..e1503a9 --- /dev/null +++ b/support/3rd_party/vlc/languages/CroatianExtra.nsh @@ -0,0 +1,77 @@ +!insertmacro LANGFILE_EXT Croatian +${LangFileString} Name_Section01 "Medijski izvođač (potrebno)" +${LangFileString} Name_Section02a "Prečac Start izbornika" +${LangFileString} Name_Section02b "Prečac radne površine" +${LangFileString} Name_Section34 "Web priključak" +${LangFileString} Name_Section03 "Mozilla priključak" +${LangFileString} Name_Section04 "ActiveX priključak" +${LangFileString} Name_Section05 "Reprodukcija diskova" +${LangFileString} Name_Section06 "Pridruživanje vrsta datoteka" +${LangFileString} Name_SectionGroupAudio "Zvučne datoteke" +${LangFileString} Name_SectionGroupVideo "Video datoteke" +${LangFileString} Name_SectionGroupOther "Ostalo" +${LangFileString} Name_Section07 "Izbornici sadržaja" +${LangFileString} Name_Section08 "Obriši osobitosti i predmemoriju" + +${LangFileString} Desc_Section01 \ + "Sam medijski izvođač" +${LangFileString} Desc_Section02a \ + "Dodaje ikone u vaš Start izbornik za lakši pristup" +${LangFileString} Desc_Section02b \ + "Dodaje ikone na vašu radnu površinu za lakši pristup" +${LangFileString} Desc_Section03 \ + "VLC Mozilla i Mozilla Firefox priključak" +${LangFileString} Desc_Section04 \ + "VLC ActiveX priključak" +${LangFileString} Desc_Section05 \ + "Registracija DVD i CD reprodukcije" +${LangFileString} Desc_Section06 \ + "Postavlja VLC medijski izvođač kao zadanu aplikaciju za određenu vrstu datoteka" +${LangFileString} Desc_Section07 \ + "Dodaj stavke izbornika sadržaja ('Izvedi s VLC' i 'Dodaj na VLC popis izvođenja')" +${LangFileString} Desc_Section08 \ + "Briše osobitosti i datoteke predmemorije zaostale od prijašnje instalacije VLC medijskog izvođača" + +${LangFileString} Name_Section91 "Deinstaliraj" +${LangFileString} Name_Section92 "Obriši osobitosti i predmemoriju" + +${LangFileString} Desc_Section91 \ +"Deinstaliraj VLC medijski izvođač i sve njegove komponenete" +${LangFileString} Desc_Section92 \ +"Briše osobitosti i datoteke predmemorije VLC medijskog izvođača" + +${LangFileString} ShellAssociation_Play "Reproduciraj" +${LangFileString} ContextMenuEntry_PlayWith "Reproduciraj s VLC medijskim izvođačem" +${LangFileString} ContextMenuEntry_AddToPlaylist "Dodaj na popis izvođenja VLC medijskog izvođača" + +${LangFileString} Link_VisitWebsite "Posjetite web stranicu VideoLAN VLC medijskog izvođača" + +${LangFileString} Name_InstTypeRecommended "Preporučeno" +${LangFileString} Name_InstTypeMinimum "Minimalno" +${LangFileString} Name_InstTypeFull "Potpuno" + +${LangFileString} Action_OnArrivalDVD "Reproduciraj DVD film" +${LangFileString} Action_OnArrivalAudioCD "Reproduciraj glazbeni CD" +${LangFileString} Action_OnArrivalVCDMovie "Reproduciraj VCD film" +${LangFileString} Action_OnArrivalSVCDMovie "Reproduciraj SVCD film" +${LangFileString} Action_OnArrivalVideoFiles "Reproduciraj video datoteke" +${LangFileString} Action_OnArrivalMusicFiles "Reproduciraj zvučne datoteke" +${LangFileString} Action_OnArrivalDVDAudio "Reproduciraj glazbeni DVD" +${LangFileString} License_NextText "Sada ste svjesni Vaših prava. Kliknite Slijedeće za nastavak." + +${LangFileString} Detail_CheckProcesses "Provjeravanje obrade..." +${LangFileString} MessageBox_VLCRunning "Čini se da je VLC pokrenut i sada će bit zatvoren." +${LangFileString} MessageBox_VLCUnableToClose "Ovaj instalacijski program ne može zatvoriti VLC, zatvorite ga ručno." +${LangFileString} MessageBox_InstallAborted "Instalacija prekinuta!" + +${LangFileString} Reinstall_Headline "Već je instalirano" +${LangFileString} Reinstall_HeadlineInstall "Odaberite kako želite instalirati VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Odaberite mogućnost održavanja za izvođenje." +${LangFileString} Reinstall_MessageOlder "Starija inačica VLC-a je instalirana na vaš sustav. Odaberite radnju koju želite izvršiti i kliknite Slijedeće za nastavak." +${LangFileString} Reinstall_MessageNewer "Novija inačica VLC-a već je instalirana! Nije preporučljivo da instalirate stariju inačicu. Odaberite radnju koju želite izvršiti i kliknite Slijedeće za nastavak." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} je već instaliran. Odaberite radnju koju želite izvršiti i kliknite Slijedeće za nastavak." +${LangFileString} Reinstall_OptionUpgrade "Nadogradi VLC koristeći prijašnje postavke (preporučljivo)" +${LangFileString} Reinstall_OptionDowngrade "Vrati stariju inčicu VLC-a koristeći prijašnje postavke (preporučljivo)" +${LangFileString} Reinstall_OptionComponents "Dodaj/Ukloni/Ponovno instaliraj komponente" +${LangFileString} Reinstall_OptionAdvanced "Promijeni postavke (napredno)" +${LangFileString} Reinstall_OptionUninstall "Deinstaliraj VLC" diff --git a/support/3rd_party/vlc/languages/CzechExtra.nsh b/support/3rd_party/vlc/languages/CzechExtra.nsh new file mode 100644 index 0000000..06107a8 --- /dev/null +++ b/support/3rd_party/vlc/languages/CzechExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Czech +${LangFileString} Name_Section01 "Přehrávač médií (vyžadováno)" +${LangFileString} Name_Section02a "Položka v nabídce Start" +${LangFileString} Name_Section02b "Odkaz na ploše" +${LangFileString} Name_Section34 "Moduly webu" +${LangFileString} Name_Section03 "Zásuvný modul Mozilla" +${LangFileString} Name_Section04 "Zásuvný modul ActiveX" +${LangFileString} Name_Section05 "Přehrávání disků" +${LangFileString} Name_Section06 "Asociace s typem souborů" +${LangFileString} Name_SectionGroupAudio "Soubory zvuku" +${LangFileString} Name_SectionGroupVideo "Soubory videa" +${LangFileString} Name_SectionGroupOther "Jiné" +${LangFileString} Name_Section07 "Místní nabídky" +${LangFileString} Name_Section08 "Smazat nastavení a mezipaměť" + +${LangFileString} Desc_Section01 \ + "Samotný přehrávač médií" +${LangFileString} Desc_Section02a \ + "Přidá ikony do vaší nabídky start pro snadný přístup" +${LangFileString} Desc_Section02b \ + "Přidá ikonu na plochu pro snažší přístup" +${LangFileString} Desc_Section03 \ + "Modul VLC pro prohlížeče Mozilla a Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Modul VLC ActiveX" +${LangFileString} Desc_Section05 \ + "Registrace přehrávání CD a DVD" +${LangFileString} Desc_Section06 \ + "Nastaví přehrávač VLC jako výchozí aplikaci pro daný typ souborů" +${LangFileString} Desc_Section07 \ + "Přidá položky kontextové nabídky ($\"Přehrát s VLC$\" a $\"Přidat do seznamu skladeb VLC$\")" +${LangFileString} Desc_Section08 \ + "Smaže nastavení a mezipaměť přehrávače VLC, které jsou pozůstatkem z předchozích instalací" + +${LangFileString} Name_Section91 "Odinstalovat" +${LangFileString} Name_Section92 "Smazat nastavení a mezipaměť" + +${LangFileString} Desc_Section91 \ +"Odinstalovat přehrávač VLC a všechny jeho součásti" +${LangFileString} Desc_Section92 \ +"Smaže nastavení a mezipaměť přehrávače VLC" + +${LangFileString} ShellAssociation_Play "Přehrát" +${LangFileString} ContextMenuEntry_PlayWith "Přehrát s VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Přidat do seznamu skladeb VLC" + +${LangFileString} Link_VisitWebsite "Navštivte webové stránky přehrávače VideoLAN VLC" + +${LangFileString} Name_InstTypeRecommended "Doporučená" +${LangFileString} Name_InstTypeMinimum "Minimální" +${LangFileString} Name_InstTypeFull "Plná" + +${LangFileString} Action_OnArrivalDVD "Přehrát film DVD" +${LangFileString} Action_OnArrivalAudioCD "Přehrát zvukové CD" +${LangFileString} Action_OnArrivalVCDMovie "Přehrát film VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Přehrát film SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Přehrát soubory videa" +${LangFileString} Action_OnArrivalMusicFiles "Přehrát soubory zvuku" +${LangFileString} Action_OnArrivalDVDAudio "Přehrát zvukové DVD" +${LangFileString} Action_OnArrivalBluray "Přehrát Blu-ray" + +${LangFileString} License_NextText "Nyní znáte svá práva. Pro pokračování klikněte na Další." + +${LangFileString} Detail_CheckProcesses "Kontroluji procesy..." +${LangFileString} MessageBox_VLCRunning "Vypadá to že přehrávač VLC je spuštěn na pozadí. Bude tedy ukončen." +${LangFileString} MessageBox_VLCUnableToClose "Instalátoru se nezdařilo ukončení přehrávače VLC. Prosím ukončete jej ručně." +${LangFileString} MessageBox_InstallAborted "Instalace přerušena." + +${LangFileString} Reinstall_Headline "Již nainstalováno" +${LangFileString} Reinstall_HeadlineInstall "Vyberte jak si přejete VLC nainstalovat." +${LangFileString} Reinstall_HeadlineMaintenance "Vyberte volbu údržby pro vykonání." +${LangFileString} Reinstall_MessageOlder "Již máte nainstalovánu starší verzi VLC. Vyberte činnost k provedení a pro pokračování klikněte na Další." +${LangFileString} Reinstall_MessageNewer "Již je nainstalována novější verze VLC. Není doporučeno navracet se ke starší verzi. Vyberte činnost k provedení a pro pokračování klikněte na Další." +${LangFileString} Reinstall_MessageSame "Přehrávač VLC verze ${VERSION} je již nainstalován. Vyberte činnost k provedení a pro pokračování klikněte na Další." +${LangFileString} Reinstall_OptionUpgrade "Aktualizovat VLC pomocí předchozího nastavení (doporučeno)" +${LangFileString} Reinstall_OptionDowngrade "Snížit verzi VLC s použitím předchozího nastavení (doporučeno)" +${LangFileString} Reinstall_OptionComponents "Přidat/Odebrat/Přeinstalovat komponenty" +${LangFileString} Reinstall_OptionAdvanced "Změnit nastavení (pokročilé)" +${LangFileString} Reinstall_OptionUninstall "Odinstalovat VLC" diff --git a/support/3rd_party/vlc/languages/DanishExtra.nsh b/support/3rd_party/vlc/languages/DanishExtra.nsh new file mode 100644 index 0000000..a866b9f --- /dev/null +++ b/support/3rd_party/vlc/languages/DanishExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Danish +${LangFileString} Name_Section01 "Medieafspiller (påkrævet)" +${LangFileString} Name_Section02a "Genvej i menuen Start" +${LangFileString} Name_Section02b "Genvej på skrivebordet" +${LangFileString} Name_Section34 "Web plugins" +${LangFileString} Name_Section03 "Mozilla plugin" +${LangFileString} Name_Section04 "ActiveX plugin" +${LangFileString} Name_Section05 "Afspilning af diske" +${LangFileString} Name_Section06 "Filtypetilknytninger" +${LangFileString} Name_SectionGroupAudio "Lydfiler" +${LangFileString} Name_SectionGroupVideo "Videofiler" +${LangFileString} Name_SectionGroupOther "Andre" +${LangFileString} Name_Section07 "Genvejsmenuer" +${LangFileString} Name_Section08 "Slet indstillinger og mellemlager" + +${LangFileString} Desc_Section01 \ + "Selve medieafspilleren" +${LangFileString} Desc_Section02a \ + "Tilføjer ikoner til menuen Start for nem adgang" +${LangFileString} Desc_Section02b \ + "Tilføjer ikon på dit skrivebord for nem adgang" +${LangFileString} Desc_Section03 \ + "VLC Mozilla og Mozilla Firefox pluginet" +${LangFileString} Desc_Section04 \ + "VLC ActiveX pluginet" +${LangFileString} Desc_Section05 \ + "Registrering af DVD- og CD-afspilning" +${LangFileString} Desc_Section06 \ + "Indstil VLC media player som standardprogram til den angive filtype" +${LangFileString} Desc_Section07 \ + "Tilføj menupunkter i genvejsmenuen ($\"Afspil med VLC$\" og $\"Tilføj til spilleliste i VLC$\")" +${LangFileString} Desc_Section08 \ + "Sletter VLC media player-indstillinger og mellemlager-filer efterladt fra tidligere installationer" + +${LangFileString} Name_Section91 "Afinstallér" +${LangFileString} Name_Section92 "Slet indstillinger og mellemlager" + +${LangFileString} Desc_Section91 \ +"Afinstallér VLC media player og alle dens komponenter" +${LangFileString} Desc_Section92 \ +"Sletter VLC media player's indstillinger og mellemlager-filer" + +${LangFileString} ShellAssociation_Play "Afspil" +${LangFileString} ContextMenuEntry_PlayWith "Afspil med VLC media player" +${LangFileString} ContextMenuEntry_AddToPlaylist "Tilføj til spilleliste i VLC media player" + +${LangFileString} Link_VisitWebsite "Besøg hjemmesiden for VideoLAN VLC media player" + +${LangFileString} Name_InstTypeRecommended "Anbefalet" +${LangFileString} Name_InstTypeMinimum "Minimal" +${LangFileString} Name_InstTypeFull "Fuld" + +${LangFileString} Action_OnArrivalDVD "Afspil DVD-film" +${LangFileString} Action_OnArrivalAudioCD "Afspil lyd-CD" +${LangFileString} Action_OnArrivalVCDMovie "Afspil VCD-film" +${LangFileString} Action_OnArrivalSVCDMovie "Afspil SVCD-film" +${LangFileString} Action_OnArrivalVideoFiles "Afspil videofiler" +${LangFileString} Action_OnArrivalMusicFiles "Afspil lydfiler" +${LangFileString} Action_OnArrivalDVDAudio "Afspil lyd-DVD" +${LangFileString} Action_OnArrivalBluray "Afspil Blu-ray" + +${LangFileString} License_NextText "Nu kender du dine rettigheder. Klik på Næste for at fortsætte." + +${LangFileString} Detail_CheckProcesses "Tjekker processer ..." +${LangFileString} MessageBox_VLCRunning "VLC ser ud til at køre og vil nu blive lukket." +${LangFileString} MessageBox_VLCUnableToClose "Installationsprogrammet kunne ikke lukke VLC - gør det venligst manuelt." +${LangFileString} MessageBox_InstallAborted "Installationen blev afbrudt!" + +${LangFileString} Reinstall_Headline "Allerede installeret" +${LangFileString} Reinstall_HeadlineInstall "Vælg hvordan du vil installere VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Vælg den vedligeholdelsesfunktion, der skal udføres." +${LangFileString} Reinstall_MessageOlder "Dit system har en ældre version af VLC installeret. Vælg den handling, du ønsker at udføre, og klik på Næste for at fortsætte." +${LangFileString} Reinstall_MessageNewer "Der er allerede installeret en nyere version af VLC! Det frarådes at nedgradere til en ældre version. Vælg den handling, du ønsker at udføre, og klik på Næste for at fortsætte." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} er allerede installeret. Vælg den handling, du ønsker at udføre, og klik på Næste for at fortsætte." +${LangFileString} Reinstall_OptionUpgrade "Opgradér VLC med forrige indstillinger (anbefales)" +${LangFileString} Reinstall_OptionDowngrade "Nedgradér VLC med forrige indstillinger (anbefales)" +${LangFileString} Reinstall_OptionComponents "Tilføj/fjern/geninstallér komponenter" +${LangFileString} Reinstall_OptionAdvanced "Tilpas indstillinger (avanceret)" +${LangFileString} Reinstall_OptionUninstall "Afinstallér VLC" diff --git a/support/3rd_party/vlc/languages/DutchExtra.nsh b/support/3rd_party/vlc/languages/DutchExtra.nsh new file mode 100644 index 0000000..814d04b --- /dev/null +++ b/support/3rd_party/vlc/languages/DutchExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Dutch +${LangFileString} Name_Section01 "Media Player (vereist)" +${LangFileString} Name_Section02a "Startmenu-snelkoppeling" +${LangFileString} Name_Section02b "Bureaublad-snelkoppeling" +${LangFileString} Name_Section34 "Web-plugins" +${LangFileString} Name_Section03 "Mozilla-plugin" +${LangFileString} Name_Section04 "ActiveX-plugin" +${LangFileString} Name_Section05 "Schijven afspelen" +${LangFileString} Name_Section06 "Bestandstype-toewijzingen" +${LangFileString} Name_SectionGroupAudio "Audiobestanden" +${LangFileString} Name_SectionGroupVideo "Videobestanden" +${LangFileString} Name_SectionGroupOther "Andere" +${LangFileString} Name_Section07 "Contextmenu's" +${LangFileString} Name_Section08 "Voorkeuren en buffer wissen" + +${LangFileString} Desc_Section01 \ + "De mediaspeler zelf" +${LangFileString} Desc_Section02a \ + "Pictogrammen aan startmenu toevoegen voor eenvoudige toegang" +${LangFileString} Desc_Section02b \ + "Pictogram aan bureaublad toevoegen voor eenvoudige toegang" +${LangFileString} Desc_Section03 \ + "De VLC Mozilla- en Mozilla-Firefox-plugin" +${LangFileString} Desc_Section04 \ + "De VLC ActiveX-plugin" +${LangFileString} Desc_Section05 \ + "Dvd- en cd-afspeelregistratie" +${LangFileString} Desc_Section06 \ + "Stelt VLC Media Player in als standaardtoepassing voor het opgegeven bestandstype" +${LangFileString} Desc_Section07 \ + "Contextmenu-items toevoegen ('Afspelen met VLC Media Player',...)" +${LangFileString} Desc_Section08 \ + "Verwijdert voorkeuren en bufferbestanden die van vorige installaties van VLC Media Player zijn overgebleven" + +${LangFileString} Name_Section91 "Verwijderen" +${LangFileString} Name_Section92 "Voorkeuren en buffer wissen" + +${LangFileString} Desc_Section91 \ +"VLC Media Player en al zijn onderdelen verwijderen" +${LangFileString} Desc_Section92 \ +"Verwijdert de voorkeuren en bufferbestanden van VLC Media Player" + +${LangFileString} ShellAssociation_Play "Afspelen" +${LangFileString} ContextMenuEntry_PlayWith "VLC Media Player - Afspelen" +${LangFileString} ContextMenuEntry_AddToPlaylist "VLC Media Player - Aan afspeellijst toevoegen" + +${LangFileString} Link_VisitWebsite "Bezoek de website van Videolan VLC Media Player" + +${LangFileString} Name_InstTypeRecommended "Aanbevolen" +${LangFileString} Name_InstTypeMinimum "Minimaal" +${LangFileString} Name_InstTypeFull "Volledig" + +${LangFileString} Action_OnArrivalDVD "Dvd-film afspelen" +${LangFileString} Action_OnArrivalAudioCD "Audio-cd afspelen" +${LangFileString} Action_OnArrivalVCDMovie "VCD-film afspelen" +${LangFileString} Action_OnArrivalSVCDMovie "SVCD-film afspelen" +${LangFileString} Action_OnArrivalVideoFiles "Videobestanden afspelen" +${LangFileString} Action_OnArrivalMusicFiles "Audiobestanden afspelen" +${LangFileString} Action_OnArrivalDVDAudio "Audio-dvd afspelen" +${LangFileString} Action_OnArrivalBluray "Blu-ray afspelen" + +${LangFileString} License_NextText "U bent zich nu bewust van uw rechten. Klik op Volgende om door te gaan." + +${LangFileString} Detail_CheckProcesses "Processen controleren..." +${LangFileString} MessageBox_VLCRunning "VLC lijkt actief te zijn en zal nu worden afgesloten." +${LangFileString} MessageBox_VLCUnableToClose "Deze installer kon VLC niet afsluiten. Gelieve dit manueel te doen." +${LangFileString} MessageBox_InstallAborted "Installatie afgebroken!" + +${LangFileString} Reinstall_Headline "Reeds geïnstalleerd" +${LangFileString} Reinstall_HeadlineInstall "Kies hoe u VLC wilt installeren." +${LangFileString} Reinstall_HeadlineMaintenance "Kies de uit te voeren onderhoudsoptie." +${LangFileString} Reinstall_MessageOlder "Er is een oudere versie van VLC op uw systeem geïnstalleerd. Selecteer de bewerking die u wilt uitvoeren en klik op Volgende om verder te gaan." +${LangFileString} Reinstall_MessageNewer "Er is al een nieuwere versie van VLC geïnstalleerd! Het is niet aanbevolen om te downgraden naar een oudere versie. Selecteer de bewerking die u wilt uitvoeren en klik op Volgende om verder te gaan." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} is al geïnstalleerd. Selecteer de bewerking die u wilt uitvoeren en klik op Volgende om verder te gaan." +${LangFileString} Reinstall_OptionUpgrade "VLC bijwerken en vorige instellingen behouden (aanbevolen)" +${LangFileString} Reinstall_OptionDowngrade "VLC downgraden en vorige instellingen behouden (aanbevolen)" +${LangFileString} Reinstall_OptionComponents "Onderdelen toevoegen, verwijderen of opnieuw installeren" +${LangFileString} Reinstall_OptionAdvanced "Instellingen wijzigen (geavanceerd)" +${LangFileString} Reinstall_OptionUninstall "VLC verwijderen" diff --git a/support/3rd_party/vlc/languages/EnglishExtra.nsh b/support/3rd_party/vlc/languages/EnglishExtra.nsh new file mode 100644 index 0000000..5ccd15e --- /dev/null +++ b/support/3rd_party/vlc/languages/EnglishExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT English +${LangFileString} Name_Section01 "Media Player (required)" +${LangFileString} Name_Section02a "Start Menu Shortcut" +${LangFileString} Name_Section02b "Desktop Shortcut" +${LangFileString} Name_Section34 "Web plugins" +${LangFileString} Name_Section03 "Mozilla plugin" +${LangFileString} Name_Section04 "ActiveX plugin" +${LangFileString} Name_Section05 "Discs Playback" +${LangFileString} Name_Section06 "File type associations" +${LangFileString} Name_SectionGroupAudio "Audio Files" +${LangFileString} Name_SectionGroupVideo "Video Files" +${LangFileString} Name_SectionGroupOther "Other" +${LangFileString} Name_Section07 "Context Menus" +${LangFileString} Name_Section08 "Delete preferences and cache" + +${LangFileString} Desc_Section01 \ + "The media player itself" +${LangFileString} Desc_Section02a \ + "Adds icons to your start menu for easy access" +${LangFileString} Desc_Section02b \ + "Adds icon to your desktop for easy access" +${LangFileString} Desc_Section03 \ + "The VLC Mozilla and Mozilla Firefox plugin" +${LangFileString} Desc_Section04 \ + "The VLC ActiveX plugin" +${LangFileString} Desc_Section05 \ + "DVD and CD playback registration" +${LangFileString} Desc_Section06 \ + "Sets VLC media player as the default application for the specified file type" +${LangFileString} Desc_Section07 \ + "Add context menu items ('Play With VLC' and 'Add To VLC's Playlist')" +${LangFileString} Desc_Section08 \ + "Deletes VLC media player preferences and cache files leftover from previous installations" + +${LangFileString} Name_Section91 "Uninstall" +${LangFileString} Name_Section92 "Delete preferences and cache" + +${LangFileString} Desc_Section91 \ +"Uninstall VLC media player and all its components" +${LangFileString} Desc_Section92 \ +"Deletes VLC media player preferences and cache files" + +${LangFileString} ShellAssociation_Play "Play" +${LangFileString} ContextMenuEntry_PlayWith "Play with VLC media player" +${LangFileString} ContextMenuEntry_AddToPlaylist "Add to VLC media player's Playlist" + +${LangFileString} Link_VisitWebsite "Visit the VideoLAN VLC media player Website" + +${LangFileString} Name_InstTypeRecommended "Recommended" +${LangFileString} Name_InstTypeMinimum "Minimum" +${LangFileString} Name_InstTypeFull "Full" + +${LangFileString} Action_OnArrivalDVD "Play DVD movie" +${LangFileString} Action_OnArrivalAudioCD "Play audio CD" +${LangFileString} Action_OnArrivalVCDMovie "Play VCD movie" +${LangFileString} Action_OnArrivalSVCDMovie "Play SVCD movie" +${LangFileString} Action_OnArrivalVideoFiles "Play video files" +${LangFileString} Action_OnArrivalMusicFiles "Play audio files" +${LangFileString} Action_OnArrivalDVDAudio "Play audio DVD" +${LangFileString} Action_OnArrivalBluray "Play Blu-ray" + +${LangFileString} License_NextText "You are now aware of your rights. Click Next to continue." + +${LangFileString} Detail_CheckProcesses "Checking processes..." +${LangFileString} MessageBox_VLCRunning "VLC appears to be running and will now be closed." +${LangFileString} MessageBox_VLCUnableToClose "This installer was unable to close VLC, please do it manually." +${LangFileString} MessageBox_InstallAborted "Installation aborted!" + +${LangFileString} Reinstall_Headline "Already Installed" +${LangFileString} Reinstall_HeadlineInstall "Choose how you want to install VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Choose the maintenance option to perform." +${LangFileString} Reinstall_MessageOlder "An older version of VLC is installed on your system. Select the operation you want to perform and click Next to continue." +${LangFileString} Reinstall_MessageNewer "A newer version of VLC is already installed! It is not recommended that you downgrade to an older version. Select the operation you want to perform and click Next to continue." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} is already installed. Select the operation you want to perform and click Next to continue." +${LangFileString} Reinstall_OptionUpgrade "Upgrade VLC using previous settings (recommended)" +${LangFileString} Reinstall_OptionDowngrade "Downgrade VLC using previous settings (recommended)" +${LangFileString} Reinstall_OptionComponents "Add/Remove/Reinstall components" +${LangFileString} Reinstall_OptionAdvanced "Change settings (advanced)" +${LangFileString} Reinstall_OptionUninstall "Uninstall VLC" diff --git a/support/3rd_party/vlc/languages/EstonianExtra.nsh b/support/3rd_party/vlc/languages/EstonianExtra.nsh new file mode 100644 index 0000000..295d83a --- /dev/null +++ b/support/3rd_party/vlc/languages/EstonianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Estonian +${LangFileString} Name_Section01 "Meediaesitaja (vajalik)" +${LangFileString} Name_Section02a "Start menüü otsetee" +${LangFileString} Name_Section02b "Töölaua otsetee" +${LangFileString} Name_Section34 "Veebi pluginad" +${LangFileString} Name_Section03 "Mozilla plugin" +${LangFileString} Name_Section04 "ActiveX plugin" +${LangFileString} Name_Section05 "Ketaste taasesitus" +${LangFileString} Name_Section06 "Failitüübi seosed" +${LangFileString} Name_SectionGroupAudio "Audiofailid" +${LangFileString} Name_SectionGroupVideo "Videofailid" +${LangFileString} Name_SectionGroupOther "Muu" +${LangFileString} Name_Section07 "Konteksti menüü" +${LangFileString} Name_Section08 "Kustuta eelistused ja vahemälu" + +${LangFileString} Desc_Section01 \ + "Meediaesitaja ise" +${LangFileString} Desc_Section02a \ + "Lisab ikoonid su start menüüle kergeks ligipääsuks" +${LangFileString} Desc_Section02b \ + "Lisab ikoonid su töölauale kergeks ligipääsuks" +${LangFileString} Desc_Section03 \ + "VLC Mozilla ja Mozilla Firefox plugin" +${LangFileString} Desc_Section04 \ + "VLC ActiveX plugin" +${LangFileString} Desc_Section05 \ + "DVD ja CD taasesitus registratsioon" +${LangFileString} Desc_Section06 \ + "Määrab VLC meediaesitaja vaikimisi rakenduseks sellele faili tüübile" +${LangFileString} Desc_Section07 \ + "Lisa konteksti menüüle ('Mängi VLC'ga' ja 'Lisa VLC esitusloendisse')" +${LangFileString} Desc_Section08 \ + "Kustutab VLC meediaesitaja eelistused ja vahemälu failide ülejäägid eelmistest installerimistest" + +${LangFileString} Name_Section91 "Eemalda" +${LangFileString} Name_Section92 "Kustuta eelistused ja vahemälu" + +${LangFileString} Desc_Section91 \ +"Eemalda VLC meediaesitaja ja kõik selle lisad" +${LangFileString} Desc_Section92 \ +"Kustutab VLC meediaesitaja eelistused ja vahemälu failid" + +${LangFileString} ShellAssociation_Play "Esita" +${LangFileString} ContextMenuEntry_PlayWith "Esita VLC meediaesitajaga" +${LangFileString} ContextMenuEntry_AddToPlaylist "Lisa VLC meediaesitaja esitusloendisse" + +${LangFileString} Link_VisitWebsite "Külasta VideoLAN VLC meediaesitaja veebilehte" + +${LangFileString} Name_InstTypeRecommended "Soovitatud" +${LangFileString} Name_InstTypeMinimum "Minimaalne" +${LangFileString} Name_InstTypeFull "Täieli" + +${LangFileString} Action_OnArrivalDVD "Esita DVD film" +${LangFileString} Action_OnArrivalAudioCD "Esita audio-CD" +${LangFileString} Action_OnArrivalVCDMovie "Esita VCD film" +${LangFileString} Action_OnArrivalSVCDMovie "Esita SVCD film" +${LangFileString} Action_OnArrivalVideoFiles "Esita videofailid" +${LangFileString} Action_OnArrivalMusicFiles "Esita audiofailid" +${LangFileString} Action_OnArrivalDVDAudio "Esita audio DVD" +${LangFileString} Action_OnArrivalBluray "Mängi Blu-ray" + +${LangFileString} License_NextText "Sa oled nüüd teadlik oma õigustest. Vajuta Edasi, et jätkata" + +${LangFileString} Detail_CheckProcesses "Kontrollin protsessi..." +${LangFileString} MessageBox_VLCRunning "VLC tundub töötavat ning see suletakse nüüd." +${LangFileString} MessageBox_VLCUnableToClose "See installeerija ei suutnud sulgeda VLC'd, palun tehke seda manuaalselt." +${LangFileString} MessageBox_InstallAborted "Installeerimine katkestatud!" + +${LangFileString} Reinstall_Headline "Juba installeeritud" +${LangFileString} Reinstall_HeadlineInstall "Vali kuidas sa tahad installeerida VLC'd." +${LangFileString} Reinstall_HeadlineMaintenance "Valige hoolduse seade, et sooritada." +${LangFileString} Reinstall_MessageOlder "Vanem versioon VLC'st on juba installeeritud su süsteemis. Vali tehe mida soovite sooritada ning vajutage Edasi, et jätkata." +${LangFileString} Reinstall_MessageNewer "Uuem versioon VLC'st on juba installeeritud! Ei ole soovitatud minna tagasi vanemale versioonile. Vali tehe mida soovite sooritada ning vajutage Edasi, et jätkata." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} on juba installeeritud. Vali tehe mida soovite sooritada ning vajutage Edasi, et jätkata." +${LangFileString} Reinstall_OptionUpgrade "Uuenda VLC'd kasutades eelmisi seadeid (soovitatud)" +${LangFileString} Reinstall_OptionDowngrade "Madalda VLC'd kasutades eelmisi seadeid (soovitatud)" +${LangFileString} Reinstall_OptionComponents "Lisa/Eemalda/Installi uuesti komponendid" +${LangFileString} Reinstall_OptionAdvanced "Muuda seadeid (edasijõudnud)" +${LangFileString} Reinstall_OptionUninstall "Eemalda VLC" diff --git a/support/3rd_party/vlc/languages/FinnishExtra.nsh b/support/3rd_party/vlc/languages/FinnishExtra.nsh new file mode 100644 index 0000000..ffb36de --- /dev/null +++ b/support/3rd_party/vlc/languages/FinnishExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Finnish +${LangFileString} Name_Section01 "Mediatoistin (vaadittu)" +${LangFileString} Name_Section02a "Käynnistä-valikon pikakuvake" +${LangFileString} Name_Section02b "Työpöydän pikakuvake" +${LangFileString} Name_Section34 "Web-liitännäiset" +${LangFileString} Name_Section03 "Mozilla-liitännäinen" +${LangFileString} Name_Section04 "ActiveX-liitännäinen" +${LangFileString} Name_Section05 "Levyjen toisto" +${LangFileString} Name_Section06 "Liitokset tiedostotyyppien kanssa" +${LangFileString} Name_SectionGroupAudio "Äänitiedostot" +${LangFileString} Name_SectionGroupVideo "Videotiedostot" +${LangFileString} Name_SectionGroupOther "Muu" +${LangFileString} Name_Section07 "Asiayhteysvalikot" +${LangFileString} Name_Section08 "Tyhjää asetukset ja välimuisti" + +${LangFileString} Desc_Section01 \ + "Mediasoitin itsessään" +${LangFileString} Desc_Section02a \ + "Lisää kuvakkeita käynnistä-valikkoon jotta käyttö on helpompaa" +${LangFileString} Desc_Section02b \ + "Lisää kuvakkeita työpöydälle jotta käyttö on helpompaa" +${LangFileString} Desc_Section03 \ + "VLC-, Mozilla- ja Mozilla Firefox-liitännäinen" +${LangFileString} Desc_Section04 \ + "VLC ActiveX-liitännäinen" +${LangFileString} Desc_Section05 \ + "DVD- ja CD-toiston rekisteröinti" +${LangFileString} Desc_Section06 \ + "Asettaa VLC-mediatoistimen oletusohjelmaksi valitulle tiedostotyypille" +${LangFileString} Desc_Section07 \ + "Lisää asiayhteysvalikkoon kohteet ('Toista VLC:n kanssa' ja 'Lisää VLC:n soittolistaan')" +${LangFileString} Desc_Section08 \ + "Poistaa vanhat VLC-mediatoistimen asetukset ja välimuistitiedostot edellisistä asennuksista" + +${LangFileString} Name_Section91 "Poista asennus" +${LangFileString} Name_Section92 "Tyhjää asetukset ja välimuisti" + +${LangFileString} Desc_Section91 \ +"Poistaa VLC-mediatoistimen ja kaikki sen lisäosat" +${LangFileString} Desc_Section92 \ +"Poistaa VLC-mediatoistimen asetukset ja välimuistin" + +${LangFileString} ShellAssociation_Play "Toista" +${LangFileString} ContextMenuEntry_PlayWith "Toista VLC-mediatoistimella" +${LangFileString} ContextMenuEntry_AddToPlaylist "Lisää VLC-mediatoistimen soittolistaan" + +${LangFileString} Link_VisitWebsite "Vieraile VideoLAN VLC-mediatoistimen kotisivuilla" + +${LangFileString} Name_InstTypeRecommended "Suositeltava" +${LangFileString} Name_InstTypeMinimum "Vähintään" +${LangFileString} Name_InstTypeFull "Täysi" + +${LangFileString} Action_OnArrivalDVD "Toista DVD-elokuva" +${LangFileString} Action_OnArrivalAudioCD "Toista audio-CD" +${LangFileString} Action_OnArrivalVCDMovie "Toista VCD-elokuva" +${LangFileString} Action_OnArrivalSVCDMovie "Toista SVCD-elokuva" +${LangFileString} Action_OnArrivalVideoFiles "Toista videotiedostot" +${LangFileString} Action_OnArrivalMusicFiles "Toista äänitiedostot" +${LangFileString} Action_OnArrivalDVDAudio "Toista ääni-DVD" +${LangFileString} Action_OnArrivalBluray "Toista Blu-ray" + +${LangFileString} License_NextText "Nyt olet tietoinen oikeuksistasi. Paina Seuraava jatkaaksesi." + +${LangFileString} Detail_CheckProcesses "Tarkistetaan prosessit..." +${LangFileString} MessageBox_VLCRunning "VLC näyttäisi olevan käynnissä se suljetaan." +${LangFileString} MessageBox_VLCUnableToClose "Asennusohjelma ei kyennyt sulkemaan VLC-mediatoistinta, suljethan sen itse." +${LangFileString} MessageBox_InstallAborted "Asennus keskeytettiin!" + +${LangFileString} Reinstall_Headline "On jo asennettu" +${LangFileString} Reinstall_HeadlineInstall "Valitse kuinka haluat asentaa VLC:n." +${LangFileString} Reinstall_HeadlineMaintenance "Valitse suoritettava huoltotoimenpide." +${LangFileString} Reinstall_MessageOlder "Vanhempi versio VLC-mediatoistimesta on asennettu järjestelmääsi. Valitse toiminto jonka haluat suorittaa ja klikkaa Seuraava jatkaaksesi." +${LangFileString} Reinstall_MessageNewer "Uudempi versio VLC-mediatoistimesta on asennettu! Ei ole suositeltavaa, että vaihdat vanhempaan versioon. Valitse toiminto jonka haluat suorittaa ja paina Seuraava jatkaaksesi." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} on jo asennettu. Valitse toiminto jonka haluat suorittaa ja paina Seuraava jatkaaksesi." +${LangFileString} Reinstall_OptionUpgrade "Päivitä VLC käyttäen edellisiä asetuksia (suositeltavaa)" +${LangFileString} Reinstall_OptionDowngrade "Asenna vanhempi versio VLC:sta käyttäen edellisiä asetuksia (suositeltavaa)" +${LangFileString} Reinstall_OptionComponents "Lisää/Poista/Uudelleenasenna komponentteja" +${LangFileString} Reinstall_OptionAdvanced "Muuta asetuksia (edistyneille)" +${LangFileString} Reinstall_OptionUninstall "Poista VLC:n asennus" diff --git a/support/3rd_party/vlc/languages/FrenchExtra.nsh b/support/3rd_party/vlc/languages/FrenchExtra.nsh new file mode 100644 index 0000000..ec34a30 --- /dev/null +++ b/support/3rd_party/vlc/languages/FrenchExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT French +${LangFileString} Name_Section01 "Lecteur multimédia (requis)" +${LangFileString} Name_Section02a "Ajouter au menu Démarrer" +${LangFileString} Name_Section02b "Placer un raccourci sur le bureau" +${LangFileString} Name_Section34 "Greffons web" +${LangFileString} Name_Section03 "Greffon Mozilla" +${LangFileString} Name_Section04 "Greffon ActiveX" +${LangFileString} Name_Section05 "Lecture de disques" +${LangFileString} Name_Section06 "Types de fichiers" +${LangFileString} Name_SectionGroupAudio "Fichiers audio" +${LangFileString} Name_SectionGroupVideo "Fichiers vidéo" +${LangFileString} Name_SectionGroupOther "Autres" +${LangFileString} Name_Section07 "Menus contextuels" +${LangFileString} Name_Section08 "Effacer les préférences et le cache" + +${LangFileString} Desc_Section01 \ + "Le lecteur multimédia" +${LangFileString} Desc_Section02a \ + "Ajoute des icônes au menu Démarrer pour un accès facile" +${LangFileString} Desc_Section02b \ + "Ajoute une icône sur votre bureau pour un accès facile" +${LangFileString} Desc_Section03 \ + "Le greffon VLC pour Mozilla et Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Le greffon VLC ActiveX" +${LangFileString} Desc_Section05 \ + "Enregistrement de la lecture des DVD et CD" +${LangFileString} Desc_Section06 \ + "Définit le lecteur multimédia VLC comme application par défaut pour les fichiers du type spécifié" +${LangFileString} Desc_Section07 \ + "Ajoute des entrées de menu contextuel (« Lire avec VLC » et « Ajouter à la liste de lecture de VLC »)" +${LangFileString} Desc_Section08 \ + "Efface les préférences de VLC et les fichiers cache laissés par une précédente installation" + +${LangFileString} Name_Section91 "Désinstaller" +${LangFileString} Name_Section92 "Effacer les préférences et le cache" + +${LangFileString} Desc_Section91 \ +"Désinstalle VLC et tous ses composants" +${LangFileString} Desc_Section92 \ +"Efface les préférences de VLC et les fichiers cache" + +${LangFileString} ShellAssociation_Play "Lire" +${LangFileString} ContextMenuEntry_PlayWith "Lire avec VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Ajouter à la liste de lecture de VLC" + +${LangFileString} Link_VisitWebsite "Voir le site web du lecteur multimédia VLC de VideoLAN" + +${LangFileString} Name_InstTypeRecommended "Recommandée" +${LangFileString} Name_InstTypeMinimum "Minimale" +${LangFileString} Name_InstTypeFull "Complète" + +${LangFileString} Action_OnArrivalDVD "Lecture de DVD" +${LangFileString} Action_OnArrivalAudioCD "Lecture de CD audio" +${LangFileString} Action_OnArrivalVCDMovie "Lecture de film VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Lecture de film SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Lecture de fichiers vidéo" +${LangFileString} Action_OnArrivalMusicFiles "Lecture de fichiers audio" +${LangFileString} Action_OnArrivalDVDAudio "Lecture de DVD audio" +${LangFileString} Action_OnArrivalBluray "Lecture de Blu-ray" + +${LangFileString} License_NextText "Vous connnaissez maintenant vos droits. Cliquez sur [Suivant] pour continuer." + +${LangFileString} Detail_CheckProcesses "Vérification des processus…" +${LangFileString} MessageBox_VLCRunning "VLC est en cours d'exécution. Il va être fermé." +${LangFileString} MessageBox_VLCUnableToClose "L'installateur n'a pas pu fermer VLC. Veuillez le faire manuellement." +${LangFileString} MessageBox_InstallAborted "Arrêt de l'installation !" + +${LangFileString} Reinstall_Headline "Déjà installé" +${LangFileString} Reinstall_HeadlineInstall "Choisir comment vous voulez installer VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Choisir l'option de maintenance." +${LangFileString} Reinstall_MessageOlder "Une ancienne version de VLC est installée sur votre système. Choisissez l'operation à effectuer et cliquez sur [Suivant] pour continuer." +${LangFileString} Reinstall_MessageNewer "Une version plus récente de VLC est déjà installée ! Il n'est pas recommandé de revenir à une ancienne version. Sélectionnez l'opération que vous souhaitez réaliser et cliquez sur Suivant pour continuer." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} est déjà installé. Sélectionnez l'opération que vous souhaitez réaliser et cliquez sur [Suivant] pour continuer." +${LangFileString} Reinstall_OptionUpgrade "Mettre VLC à niveau en conservant les réglages (recommandé)" +${LangFileString} Reinstall_OptionDowngrade "Revenir à une ancienne version de VLC en utilisant les paramètres précédents (recommandé)" +${LangFileString} Reinstall_OptionComponents "Ajouter/supprimer/réinstaller des composants" +${LangFileString} Reinstall_OptionAdvanced "Changer les paramètres (avancé)" +${LangFileString} Reinstall_OptionUninstall "Désinstaller VLC" diff --git a/support/3rd_party/vlc/languages/GalicianExtra.nsh b/support/3rd_party/vlc/languages/GalicianExtra.nsh new file mode 100644 index 0000000..c2481aa --- /dev/null +++ b/support/3rd_party/vlc/languages/GalicianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Galician +${LangFileString} Name_Section01 "Reprodutor multimedia (requirido)" +${LangFileString} Name_Section02a "Atallo do menú de inicio" +${LangFileString} Name_Section02b "Atallo de escritorio" +${LangFileString} Name_Section34 "Plugins para a web" +${LangFileString} Name_Section03 "Plugin para Mozilla" +${LangFileString} Name_Section04 "Plugin para ActiveX" +${LangFileString} Name_Section05 "Reprodución de discos" +${LangFileString} Name_Section06 "Asociacións de tipo de ficheiro" +${LangFileString} Name_SectionGroupAudio "Ficheiros de audio" +${LangFileString} Name_SectionGroupVideo "Ficheiros de vídeo" +${LangFileString} Name_SectionGroupOther "Outros" +${LangFileString} Name_Section07 "Menús contextuais" +${LangFileString} Name_Section08 "Eliminar as preferencias e a caché" + +${LangFileString} Desc_Section01 \ + "O propio reprodutor multimedia" +${LangFileString} Desc_Section02a \ + "Engade iconas no seu menú de inicio para un acceso máis fácil" +${LangFileString} Desc_Section02b \ + "Engade unha icona no seu escritorio para un acceso máis fácil" +${LangFileString} Desc_Section03 \ + "O plugin de VLC para Mozilla e Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "O plugin de VLC para ActiveX" +${LangFileString} Desc_Section05 \ + "O rexistro de reprodución de CD e DVD" +${LangFileString} Desc_Section06 \ + "Define o reprodutor multimedia VLC como o aplicativo predeterminado para o tipo de ficheiro especificado" +${LangFileString} Desc_Section07 \ + "Engadir entradas de menú contextual («Reproducir co VLC» e «Engadir á lista de reprodución do VLC»)" +${LangFileString} Desc_Section08 \ + "Elimina as preferencias e a caché do reprodutor multimedia VLC que pertenzan a versións previas" + +${LangFileString} Name_Section91 "Desinstalar" +${LangFileString} Name_Section92 "Eliminar as preferencias e a caché" + +${LangFileString} Desc_Section91 \ +"Desinstalar o reprodutor multimedia VLC e todos os seus compoñentes" +${LangFileString} Desc_Section92 \ +"Elimina as preferencias do reprodutor multimedia VLC e os ficheiros da caché" + +${LangFileString} ShellAssociation_Play "Reproducir" +${LangFileString} ContextMenuEntry_PlayWith "Reproducir co VLC media player" +${LangFileString} ContextMenuEntry_AddToPlaylist "Engadir á lista de reprodución do VLC media player" + +${LangFileString} Link_VisitWebsite "Visitar a web do reprodutor multimedia VideoLAN VLC" + +${LangFileString} Name_InstTypeRecommended "Recomendada" +${LangFileString} Name_InstTypeMinimum "Mínima" +${LangFileString} Name_InstTypeFull "Completa" + +${LangFileString} Action_OnArrivalDVD "Reproducir filmes en DVD" +${LangFileString} Action_OnArrivalAudioCD "Reproducir os CD de audio" +${LangFileString} Action_OnArrivalVCDMovie "Reproducir filmes en VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Reproducir filmes en SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Reproducir os ficheiros de vídeo" +${LangFileString} Action_OnArrivalMusicFiles "Reproducir os ficheiros de audio" +${LangFileString} Action_OnArrivalDVDAudio "Reproducir os DVD de audio" +${LangFileString} Action_OnArrivalBluray "Reproducir Blu-ray" + +${LangFileString} License_NextText "Agora xa está informado dos seus dereitos. Prema en «Seguinte» para continuar." + +${LangFileString} Detail_CheckProcesses "Verificando os procesos..." +${LangFileString} MessageBox_VLCRunning "Semella que o VLC está a ser executado e será pechado agora." +${LangFileString} MessageBox_VLCUnableToClose "Este instalador non foi quen de pechar o VLC. Fágao manualmente." +${LangFileString} MessageBox_InstallAborted "A instalación foi cancelada!" + +${LangFileString} Reinstall_Headline "Xa está instalado" +${LangFileString} Reinstall_HeadlineInstall "Escolla como quere instalar o VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Seleccione a opción de mantemento que quere realizar." +${LangFileString} Reinstall_MessageOlder "No seu sistema xa está instalada unha versión máis vella do VLC. Seleccione a operación que quere realizar e prema en «Seguinte» para continuar." +${LangFileString} Reinstall_MessageNewer "Xa está instalada unha versión máis nova do VLC! Non se recomenda a desactualización a unha versión máis vella. Seleccione a operación que quere realizar e prema en «Seguinte» para continuar." +${LangFileString} Reinstall_MessageSame "A versión ${VERSION} do VLC xa está instalada. Seleccione a operación que quere realizar e prema en «Seguinte» para continuar." +${LangFileString} Reinstall_OptionUpgrade "Actualizar o VLC usando a configuración anterior (recomendado)" +${LangFileString} Reinstall_OptionDowngrade "Desactualizar o VLC usando a configuración anterior (recomendado)" +${LangFileString} Reinstall_OptionComponents "Engadir/Eliminar/Reinstalar componentes" +${LangFileString} Reinstall_OptionAdvanced "Cambiar a configuración (avanzado)" +${LangFileString} Reinstall_OptionUninstall "Desinstalar o VLC" diff --git a/support/3rd_party/vlc/languages/GermanExtra.nsh b/support/3rd_party/vlc/languages/GermanExtra.nsh new file mode 100644 index 0000000..c1eda63 --- /dev/null +++ b/support/3rd_party/vlc/languages/GermanExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT German +${LangFileString} Name_Section01 "Media-Player (benötigt)" +${LangFileString} Name_Section02a "Symbole im Startmenü" +${LangFileString} Name_Section02b "Desktopsymbol" +${LangFileString} Name_Section34 "Web-Plugins" +${LangFileString} Name_Section03 "Mozilla-Plugin" +${LangFileString} Name_Section04 "ActiveX-Plugin" +${LangFileString} Name_Section05 "DVD- und CD-Wiedergabe" +${LangFileString} Name_Section06 "Dateitypzuordnungen" +${LangFileString} Name_SectionGroupAudio "Audiodateien" +${LangFileString} Name_SectionGroupVideo "Videodateien" +${LangFileString} Name_SectionGroupOther "Andere" +${LangFileString} Name_Section07 "Kontextmenü" +${LangFileString} Name_Section08 "Lösche die Einstellungen und den Cache" + +${LangFileString} Desc_Section01 \ + "Der Media Player" +${LangFileString} Desc_Section02a \ + "Fügt Symbole im Startmenü für leichten Zugang hinzu" +${LangFileString} Desc_Section02b \ + "Fügt ein Desktopsymbol für leichten Zugang ein" +${LangFileString} Desc_Section03 \ + "Das VLC Mozilla und Mozilla-Firefox Plugin" +${LangFileString} Desc_Section04 \ + "Das VLC ActiveX-Plugin" +${LangFileString} Desc_Section05 \ + "DVD und CD Wiedergabe Registrierung" +${LangFileString} Desc_Section06 \ + "Setzt den VLC media player als Standard-Anwendung für die ausgewählten Dateitypen" +${LangFileString} Desc_Section07 \ + "Fügt Kontextmenü-Einträge hinzu ('Wiedergabe mit VLC' und 'Zur VLC-Wiedergabeliste hinzufügen')" +${LangFileString} Desc_Section08 \ + "Löscht die VLC media player Einstellungen und übergebliebenen Cache-Dateien der alten Installation" + +${LangFileString} Name_Section91 "Deinstallieren" +${LangFileString} Name_Section92 "Einstellungen und Cache löschen" + +${LangFileString} Desc_Section91 \ +"VLC media player und alle Komponenten deinstallieren" +${LangFileString} Desc_Section92 \ +"VLC media player Einstellungen und Cache-Dateien löschen" + +${LangFileString} ShellAssociation_Play "Wiedergabe" +${LangFileString} ContextMenuEntry_PlayWith "Mit VLC media player wiedergeben" +${LangFileString} ContextMenuEntry_AddToPlaylist "Zur VLC media player Wiedergabeliste hinzufügen" + +${LangFileString} Link_VisitWebsite "Besuchen Sie die VideoLAN VLC media player Webseite" + +${LangFileString} Name_InstTypeRecommended "Empfohlen" +${LangFileString} Name_InstTypeMinimum "Minimal" +${LangFileString} Name_InstTypeFull "Voll" + +${LangFileString} Action_OnArrivalDVD "DVD-Video wiedergeben" +${LangFileString} Action_OnArrivalAudioCD "Audio-CD wiedergeben" +${LangFileString} Action_OnArrivalVCDMovie "VCD-Video wiedergeben" +${LangFileString} Action_OnArrivalSVCDMovie "SVCD-Video wiedergeben" +${LangFileString} Action_OnArrivalVideoFiles "Videodateien wiedergeben" +${LangFileString} Action_OnArrivalMusicFiles "Audiodateien wiedergeben" +${LangFileString} Action_OnArrivalDVDAudio "Audio-DVD wiedergeben" +${LangFileString} Action_OnArrivalBluray "Blu-ray wiedergeben" + +${LangFileString} License_NextText "Jetzt sind Sie über Ihre Rechte informiert. Klicken Sie auf Weiter." + +${LangFileString} Detail_CheckProcesses "Überprüfen der Prozesse..." +${LangFileString} MessageBox_VLCRunning "VLC scheint ausgeführt zu werden und wird nun geschlossen." +${LangFileString} MessageBox_VLCUnableToClose "Dieses Installationsprogramm konnte VLC nicht schließen, tun Sie es bitte manuell." +${LangFileString} MessageBox_InstallAborted "Installation abgebrochen!" + +${LangFileString} Reinstall_Headline "Bereits installiert" +${LangFileString} Reinstall_HeadlineInstall "Wählen Sie, wie Sie den VLC media player installieren möchten." +${LangFileString} Reinstall_HeadlineMaintenance "Wählen Sie die durchgeführte Wartungsoption aus." +${LangFileString} Reinstall_MessageOlder "Eine ältere Version des VLC media players ist auf dem System installiert. Wählen Sie die durchgeführte Operation aus und klicken Sie auf Weiter, um fortzufahren." +${LangFileString} Reinstall_MessageNewer "Eine neuere Version des VLC media players ist bereits installiert! Es wird nicht empfohlen, auf eine ältere Version downzugraden. Wählen Sie die durchgeführte Operation aus und klicken Sie auf Weiter, um fortzufahren." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} ist bereits installiert. Wählen Sie die durchgeführte Operation aus und klicken Sie auf Weiter, um fortzufahren." +${LangFileString} Reinstall_OptionUpgrade "Aktualisieren Sie den VLC media player mit vorherigen Einstellungen (empfohlen)" +${LangFileString} Reinstall_OptionDowngrade "Ein Downgrade des VLC media players mit vorherigen Einstellungen (empfohlen)" +${LangFileString} Reinstall_OptionComponents "Hinzufügen/Entfernen/Installieren von Komponenten" +${LangFileString} Reinstall_OptionAdvanced "Einstellungen ändern (erweitert)" +${LangFileString} Reinstall_OptionUninstall "Deinstallieren des VLC media players" diff --git a/support/3rd_party/vlc/languages/GreekExtra.nsh b/support/3rd_party/vlc/languages/GreekExtra.nsh new file mode 100644 index 0000000..a41add9 --- /dev/null +++ b/support/3rd_party/vlc/languages/GreekExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Greek +${LangFileString} Name_Section01 "Αναπαραγωγός πολυμέσων (απαραίτητο)" +${LangFileString} Name_Section02a "Συντόμευση μενού έναρξης " +${LangFileString} Name_Section02b "Συντόμευση επιφάνειας εργασίας" +${LangFileString} Name_Section34 "Διαδικτυακά πρόσθετα" +${LangFileString} Name_Section03 "Πρόσθετο Mozilla" +${LangFileString} Name_Section04 "Πρόσθετο ActiveX" +${LangFileString} Name_Section05 "Αναπαραγωγή δίσκων" +${LangFileString} Name_Section06 "Συσχετίσεις τύπων αρχείων" +${LangFileString} Name_SectionGroupAudio "Αρχεία ήχου" +${LangFileString} Name_SectionGroupVideo "Αρχεία βίντεο" +${LangFileString} Name_SectionGroupOther "Άλλα" +${LangFileString} Name_Section07 "Μενού περιεχομένου" +${LangFileString} Name_Section08 "Διαγραφή προτιμήσεων και της προσωρινής μνήμης (cache)" + +${LangFileString} Desc_Section01 \ + "Ο αναπαραγωγός πολυμέσων" +${LangFileString} Desc_Section02a \ + "Προσθήκη εικονιδίων στο μενού έναρξης για εύκολη πρόσβαση" +${LangFileString} Desc_Section02b \ + "Προσθήκη εικονιδίων στην επιφάνεια εργασίας για εύκολη πρόσβαση" +${LangFileString} Desc_Section03 \ + "Πρόσθετα VLC Mozilla και Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Πρόσθετο VLC ActiveX" +${LangFileString} Desc_Section05 \ + "Καταχώρηση αναπαραγωγής DVD και CD" +${LangFileString} Desc_Section06 \ + "Ορίστε το VLC media player ως την προεπιλεγμένη εφαρμογή για το συγκεκριμένο τύπο αρχείου" +${LangFileString} Desc_Section07 \ + "Προσθήκη στοιχείων μενού ('Αναπαραγωγή με το VLC' και 'Προσθήκη στη λίστα αναπαραγωγής του VLC')" +${LangFileString} Desc_Section08 \ + "Διαγράφει τις προτιμήσεις και τα προσωρινά αρχεία μνήμης της εφαρμογής VLC που έχουν απομείνει από προηγούμενες εγκαταστάσεις" + +${LangFileString} Name_Section91 "Απεγκατάσταση" +${LangFileString} Name_Section92 "Διαγραφή προτιμήσεων και της μνήμης cache" + +${LangFileString} Desc_Section91 \ +"Απεγκατάσταση αναπαραγωγού πολυμέσων VLC και όλων των στοιχείων του" +${LangFileString} Desc_Section92 \ +"Διαγράφει τις προτιμήσεις και τα προσωρινά αρχεία μνήμης του VLC" + +${LangFileString} ShellAssociation_Play "Αναπαραγωγή" +${LangFileString} ContextMenuEntry_PlayWith "Αναπαραγωγή με το VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Προσθήκη στη λίστα αναπαραγωγής του VLC" + +${LangFileString} Link_VisitWebsite "Επισκεφτείτε την ιστοσελίδα του VideoLAN VLC" + +${LangFileString} Name_InstTypeRecommended "Προτεινομένη" +${LangFileString} Name_InstTypeMinimum "Ελάχιστη" +${LangFileString} Name_InstTypeFull "Πλήρης" + +${LangFileString} Action_OnArrivalDVD "Αναπαραγωγή ταινίας DVD" +${LangFileString} Action_OnArrivalAudioCD "Αναπαραγωγή CD ήχου" +${LangFileString} Action_OnArrivalVCDMovie "Αναπαραγωγή βίντεο VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Αναπαραγωγή βίντεο SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Αναπαραγωγή αρχείων βίντεο" +${LangFileString} Action_OnArrivalMusicFiles "Αναπαραγωγή αρχείων ήχου" +${LangFileString} Action_OnArrivalDVDAudio "Αναπαραγωγή DVD ήχου" +${LangFileString} Action_OnArrivalBluray "Αναπαραγωγή Blu-ray" + +${LangFileString} License_NextText "Τώρα γνωρίζετε τα δικαιώματά σας. Κάνετε κλικ στο $\"Επόμενο$\" για να συνεχίσετε." + +${LangFileString} Detail_CheckProcesses "Έλεγχος διεργασιών…" +${LangFileString} MessageBox_VLCRunning "Το VLC φαίνεται να εκτελείται και τώρα θα τερματιστεί." +${LangFileString} MessageBox_VLCUnableToClose "Το πρόγραμμα εγκατάστασης ήταν αδύνατο να τερματίσει το VLC, παρακαλούμε κλείστε το χειροκίνητα." +${LangFileString} MessageBox_InstallAborted "Η εγκατάσταση ακυρώθηκε!" + +${LangFileString} Reinstall_Headline "Ήδη εγκατεστημένο" +${LangFileString} Reinstall_HeadlineInstall "Επιλέξτε πώς θέλετε να εγκαταστήσετε το VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Επιλέξτε ποια επιλογή συντήρησης θα πραγματοποιηθεί." +${LangFileString} Reinstall_MessageOlder "Μια παλαιότερη έκδοση του VLC έχει εγκατασταθεί στο σύστημά σας. Επιλέξτε τη λειτουργία που θέλετε να εκτελέσετε και κάντε κλικ στο $\"Επόμενο$\" για να συνεχίσετε." +${LangFileString} Reinstall_MessageNewer "Μια νεότερη έκδοση του VLC έχει ήδη εγκατασταθεί! Δεν προτείνεται να το υποβαθμίσετε σε μια παλαιότερη έκδοση. Επιλέξτε τη λειτουργία που θέλετε να εκτελέσετε και κάντε κλικ στο $\"Επόμενο$\" για να συνεχίσετε." +${LangFileString} Reinstall_MessageSame "Το VLC ${VERSION} έχει ήδη εγκατασταθεί. Επιλέξτε τη λειτουργία που θέλετε να εκτελέσετε και κάντε κλικ στο $\"Επόμενο$\" για να συνεχίσετε." +${LangFileString} Reinstall_OptionUpgrade "Αναβαθμίστε το VLC χρησιμοποιώντας προηγούμενες ρυθμίσεις (προτείνεται)" +${LangFileString} Reinstall_OptionDowngrade "Υποβαθμίστε το VLC χρησιμοποιώντας προηγούμενες ρυθμίσεις (προτείνεται)" +${LangFileString} Reinstall_OptionComponents "Προσθήκη/Αφαίρεση/Επανεγκατάσταση στοιχείων" +${LangFileString} Reinstall_OptionAdvanced "Αλλαγή ρυθμίσεων (για προχωρημένους)" +${LangFileString} Reinstall_OptionUninstall "Απεγκατάσταση του VLC" diff --git a/support/3rd_party/vlc/languages/HebrewExtra.nsh b/support/3rd_party/vlc/languages/HebrewExtra.nsh new file mode 100644 index 0000000..99440bb --- /dev/null +++ b/support/3rd_party/vlc/languages/HebrewExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Hebrew +${LangFileString} Name_Section01 "נגן המדיה (הכרחי)" +${LangFileString} Name_Section02a "קיצורי דרך בתפריט ההתחלה" +${LangFileString} Name_Section02b "קיצורי דרך על שולחן העבודה" +${LangFileString} Name_Section34 "תוספי דפדפנים" +${LangFileString} Name_Section03 "תוסף Mozilla" +${LangFileString} Name_Section04 "תוסף ActiveX" +${LangFileString} Name_Section05 "השמעה של דיסקים" +${LangFileString} Name_Section06 "שיוך קבצים" +${LangFileString} Name_SectionGroupAudio "קובצי שמע" +${LangFileString} Name_SectionGroupVideo "קובצי וידאו" +${LangFileString} Name_SectionGroupOther "אחר" +${LangFileString} Name_Section07 "תפריטי הקשר" +${LangFileString} Name_Section08 "מחיקת העדפות ומטמון" + +${LangFileString} Desc_Section01 \ + "נגן המדיה בכבודו ובעצמו" +${LangFileString} Desc_Section02a \ + "הוספת סמלים לתפריט ההתחלה שלך לגישה נוחה" +${LangFileString} Desc_Section02b \ + "הוספת סמל לשולחן העבודה שלך לגישה נוחה" +${LangFileString} Desc_Section03 \ + "תוסף VLC עבור Mozilla ו־Firefox מבית Mozilla" +${LangFileString} Desc_Section04 \ + "תוסף ה־ActiveX של VLC" +${LangFileString} Desc_Section05 \ + "רישום בתור נגן לתקליטורי מסוג CD ו־DVD" +${LangFileString} Desc_Section06 \ + "הגדרת נגן המדיה כיישום בררת המחדל לטיפול בסוג הקובץ האמור" +${LangFileString} Desc_Section07 \ + "הוספת פריטים לתפריט ההקשר ('נגינה עם VLC' ו־'הוספה לרשימת ההשמעה של VLC')" +${LangFileString} Desc_Section08 \ + "מחיקת ההעדפות וקובצי המטמון של נגן המדיה VLC שנשארו מהתקנות קודמות" + +${LangFileString} Name_Section91 "הסרה" +${LangFileString} Name_Section92 "מחיקת ההעדפות והמטמון" + +${LangFileString} Desc_Section91 \ +"הסרת נגן המדיה VLC על כל רכיביו" +${LangFileString} Desc_Section92 \ +"מחיקת ההעדפות וקובצי המטמון של נגן המדיה VLC" + +${LangFileString} ShellAssociation_Play "נגינה" +${LangFileString} ContextMenuEntry_PlayWith "נגינה עם נגן המדיה VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "הוספה לרשימת ההשמעה של נגן המדיה VLC" + +${LangFileString} Link_VisitWebsite "ביקור באתר של נגן המדיה VLC מבית VideoLAN" + +${LangFileString} Name_InstTypeRecommended "מומלצת" +${LangFileString} Name_InstTypeMinimum "מזערית" +${LangFileString} Name_InstTypeFull "מלאה" + +${LangFileString} Action_OnArrivalDVD "ניגון סרט מ־DVD" +${LangFileString} Action_OnArrivalAudioCD "נגינת תקליטור שמע" +${LangFileString} Action_OnArrivalVCDMovie "נגינת סרט מ־VCD" +${LangFileString} Action_OnArrivalSVCDMovie "נגינת סרט מ־SVCD" +${LangFileString} Action_OnArrivalVideoFiles "נגינת קובצי וידאו" +${LangFileString} Action_OnArrivalMusicFiles "נגינת קובצי שמע" +${LangFileString} Action_OnArrivalDVDAudio "נגינת DVD שמע" +${LangFileString} Action_OnArrivalBluray "נגינת Blu-ray" + +${LangFileString} License_NextText "זכויותיך ידועות לך החל מעכשיו. ניתן ללחוץ על הבא כדי להמשיך." + +${LangFileString} Detail_CheckProcesses "התהליכים נבדקים…" +${LangFileString} MessageBox_VLCRunning "נראה כי VLC פעיל וכעת הוא ייסגר." +${LangFileString} MessageBox_VLCUnableToClose "תכנית התקנה זו לא הצליחה לסגור את VLC, נא לעשות זאת ידנית." +${LangFileString} MessageBox_InstallAborted "ההתקנה בוטלה!" + +${LangFileString} Reinstall_Headline "התכנית כבר מותקנת" +${LangFileString} Reinstall_HeadlineInstall "נא לבחור כיצד להתקין את VLC." +${LangFileString} Reinstall_HeadlineMaintenance "נא לבחור את אפשרות התחזוקה לביצוע." +${LangFileString} Reinstall_MessageOlder "גרסה קודמת של VLC מותקנת במחשבך. נא לבחור את הפעולה הרצויה וללחוץ על הבא כדי להמשיך." +${LangFileString} Reinstall_MessageNewer "גרסה חדשה יותר של VLC כבר מותקנת! לא מומלץ לעבור לגרסה ישנה יותר. נא לבחור את הפעולה הרצויה וללחוץ על הבא כדי להמשיך." +${LangFileString} Reinstall_MessageSame "גרסה ${VERSION} של VLC כבר מותקנת. נא לבחור את הפעולה הרצויה וללחוץ על הבא להמשך." +${LangFileString} Reinstall_OptionUpgrade "שדרוג VLC באמצעות הגדרות קודמות (מומלץ)" +${LangFileString} Reinstall_OptionDowngrade "מעבר לגרסה קודמת של VLC על ידי שימוש בהגדרות קודמות (מומלץ)" +${LangFileString} Reinstall_OptionComponents "הוספה/הסרה/התקנה מחדש של רכיבים" +${LangFileString} Reinstall_OptionAdvanced "שינוי ההגדרות (מתקדם)" +${LangFileString} Reinstall_OptionUninstall "הסרת VLC" diff --git a/support/3rd_party/vlc/languages/HindiExtra.nsh b/support/3rd_party/vlc/languages/HindiExtra.nsh new file mode 100644 index 0000000..45096be --- /dev/null +++ b/support/3rd_party/vlc/languages/HindiExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Hindi +${LangFileString} Name_Section01 "मीडिया प्लेयर (आवश्यक)" +${LangFileString} Name_Section02a "स्टार्ट मेनू शॉर्टकट" +${LangFileString} Name_Section02b "डेस्कटॉप शॉर्टकट" +${LangFileString} Name_Section34 "वेब प्लगइन्स" +${LangFileString} Name_Section03 "मोज़िला प्लगइन" +${LangFileString} Name_Section04 "ActiveX प्लगइन" +${LangFileString} Name_Section05 "डिस्क प्लेबैक" +${LangFileString} Name_Section06 "फ़ाइल प्रकार संघ" +${LangFileString} Name_SectionGroupAudio "ऑडियो फ़ाइलें" +${LangFileString} Name_SectionGroupVideo "वीडियो फ़ाइलें" +${LangFileString} Name_SectionGroupOther "अन्य" +${LangFileString} Name_Section07 "प्रसंग मेनू" +${LangFileString} Name_Section08 "प्राथमिकताएं एवं कैश हटाएं" + +${LangFileString} Desc_Section01 \ + "स्वयं ये मीडिया प्लेयर" +${LangFileString} Desc_Section02a \ + "सरल पहुँच के लिए अपने प्रारंभ मेनू में आइकन जोड़ता है" +${LangFileString} Desc_Section02b \ + "सरल पहुँच के लिए अपने डेस्कटॉप पर आइकन जोड़ता है" +${LangFileString} Desc_Section03 \ + "VLC मोज़िला तथा मोज़िला फ़ायरफ़ॉक्स प्लगइन" +${LangFileString} Desc_Section04 \ + "VLC ActiveX प्लगइन" +${LangFileString} Desc_Section05 \ + "डीवीडी और सीडी प्लेबैक पंजीकरण" +${LangFileString} Desc_Section06 \ + "निर्दिष्ट फ़ाइल प्रकार के लिए डिफ़ॉल्ट ऐप्लिकेशन के रूप में VLC मीडिया प्लेयर सेट करता है" +${LangFileString} Desc_Section07 \ + "संदर्भ मेनू पंक्तियाँ जोड़ें ('VLC के साथ बजाएं' और 'VLC की प्लेलिस्ट में जोड़ें')" +${LangFileString} Desc_Section08 \ + "पिछले स्थापना में बची VLC मीडिया प्लेयर की प्राथमिकताएँ और कैश फ़ाइलें हटाएं" + +${LangFileString} Name_Section91 "स्थापना रद्द करें" +${LangFileString} Name_Section92 "प्राथमिकताएं एवं कैश हटाएं" + +${LangFileString} Desc_Section91 \ +"VLC मीडिया प्लेयर और उसके सभी घटकों को अनइंस्टॉल करें" +${LangFileString} Desc_Section92 \ +"वीएलसी मीडिया प्लेयर वरीयताओं और कैश फ़ाइलों को हटाता है" + +${LangFileString} ShellAssociation_Play "चलायें" +${LangFileString} ContextMenuEntry_PlayWith "वीएलसी मीडिया प्लेयर में बजाएं" +${LangFileString} ContextMenuEntry_AddToPlaylist "वीएलसी मीडिया प्लेयर के प्लेलिस्ट में जोड़ें" + +${LangFileString} Link_VisitWebsite "VideoLAN VLC मीडिया प्लेयर वेबसाइट पर जाएं" + +${LangFileString} Name_InstTypeRecommended "अनुशंसित" +${LangFileString} Name_InstTypeMinimum "न्यूनतम" +${LangFileString} Name_InstTypeFull "पूरा" + +${LangFileString} Action_OnArrivalDVD "डीवीडी फिल्म चलाएं" +${LangFileString} Action_OnArrivalAudioCD "ऑडियो सीडी चलाएं" +${LangFileString} Action_OnArrivalVCDMovie "वीसीडी फिल्म चलाएं" +${LangFileString} Action_OnArrivalSVCDMovie "एसवीसीडी फिल्म चलाएं" +${LangFileString} Action_OnArrivalVideoFiles "वीडियो फ़ाइलों को चलाएं" +${LangFileString} Action_OnArrivalMusicFiles "ऑडियो फ़ाइलें चलाएं" +${LangFileString} Action_OnArrivalDVDAudio "ऑडियो डीवीडी चलाएं" +${LangFileString} Action_OnArrivalBluray "ब्लू-रे चलाएं" + +${LangFileString} License_NextText "अब आप अपने अधिकारों से परिचित हैं. जारी रखने के लिए 'आगे' क्लिक करें." + +${LangFileString} Detail_CheckProcesses "जाँच प्रक्रियाएँ..." +${LangFileString} MessageBox_VLCRunning "वीएलसी अभी चल रहा है और अब बंद किया जाएगा." +${LangFileString} MessageBox_VLCUnableToClose "यह इंस्टॉलर VLC को बंद करने में असमर्थ था, कृपया इसे आप बंद करें." +${LangFileString} MessageBox_InstallAborted "स्थापना निरस्त किया गया!" + +${LangFileString} Reinstall_Headline "पहले से स्थापित है" +${LangFileString} Reinstall_HeadlineInstall "चुनें कि आप VLC को कैसे स्थापित करना चाहते हैं." +${LangFileString} Reinstall_HeadlineMaintenance "प्रदर्शन करने के लिए रख-रखाव विकल्प चुनें." +${LangFileString} Reinstall_MessageOlder "आपके सिस्टम पर VLC का पुराना संस्करण स्थापित है. वह प्रक्रिया चुनें जिसे आप निष्पादित करना चाहते हैं और जारी रखने के लिए 'अगला' क्लिक करें." +${LangFileString} Reinstall_MessageNewer "VLC का एक नया संस्करण पहले से स्थापित है! आपको पुराने संस्करण में डाउनग्रेड करने की अनुशंसा नहीं की जाती है. वह प्रक्रिया चुनें जिसे आप निष्पादित करना चाहते हैं और जारी रखने के लिए 'अगला' क्लिक करें. " +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} पहले से स्थापित है. वह प्रक्रिया चुनें जिसे आप निष्पादित करना चाहते हैं और जारी रखने के लिए 'अगला' क्लिक करें." +${LangFileString} Reinstall_OptionUpgrade "पिछली सेटिंग्स का उपयोग करके VLC अपग्रेड करें (अनुशंसित) " +${LangFileString} Reinstall_OptionDowngrade "पिछली सेटिंग्स का उपयोग करके VLC को डाउनग्रेड करें (अनुशंसित) " +${LangFileString} Reinstall_OptionComponents "घटकों को जोड़ें/निकालें/पुनर्स्थापित करें" +${LangFileString} Reinstall_OptionAdvanced "सेटिंग्स बदलें (उन्नत)" +${LangFileString} Reinstall_OptionUninstall "VLC की स्थापना रद्द करें" diff --git a/support/3rd_party/vlc/languages/HungarianExtra.nsh b/support/3rd_party/vlc/languages/HungarianExtra.nsh new file mode 100644 index 0000000..dfa911d --- /dev/null +++ b/support/3rd_party/vlc/languages/HungarianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Hungarian +${LangFileString} Name_Section01 "Médialejátszó (szükséges)" +${LangFileString} Name_Section02a "Start menü ikon" +${LangFileString} Name_Section02b "Asztali ikon" +${LangFileString} Name_Section34 "Webes bővítmények" +${LangFileString} Name_Section03 "Mozilla bővítmény" +${LangFileString} Name_Section04 "ActiveX bővítmény" +${LangFileString} Name_Section05 "Lemezek lejátszása" +${LangFileString} Name_Section06 "Fájltípus-társítások" +${LangFileString} Name_SectionGroupAudio "Hangfájlok" +${LangFileString} Name_SectionGroupVideo "Videofájlok" +${LangFileString} Name_SectionGroupOther "Egyéb" +${LangFileString} Name_Section07 "Helyi menük" +${LangFileString} Name_Section08 "Beállítások és gyorsítótár törlése" + +${LangFileString} Desc_Section01 \ + "Maga a médialejátszó" +${LangFileString} Desc_Section02a \ + "Ikonokat tesz a Start menübe az egyszerű eléréshez" +${LangFileString} Desc_Section02b \ + "Ikonokat tesz az Asztalra az egyszerű eléréshez" +${LangFileString} Desc_Section03 \ + "A VLC Mozilla és Mozilla Firefox bővítmény" +${LangFileString} Desc_Section04 \ + "A VLC ActiveX bővítmény" +${LangFileString} Desc_Section05 \ + "DVD és CD lejátszásának bejegyzése" +${LangFileString} Desc_Section06 \ + "Beállítja a VLC médialejátszót a megadott fájltípus alapértelmezett alkalmazásaként" +${LangFileString} Desc_Section07 \ + "Bejegyzések a helyi menübe (Lejátszás a VLC médialejátszóval és Hozzáadás a VLC lejátszólistájához)" +${LangFileString} Desc_Section08 \ + "Törli a VLC médialejátszó előző telepítésből maradt beállításait és gyorsítótár-fájljait" + +${LangFileString} Name_Section91 "Eltávolítás" +${LangFileString} Name_Section92 "Beállítások és gyorsítótár törlése" + +${LangFileString} Desc_Section91 \ +"A VLC médialejátszó és minden összetevőjének eltávolítása" +${LangFileString} Desc_Section92 \ +"Törli a VLC médialejátszó beállításait és gyorsítótár-fájljait" + +${LangFileString} ShellAssociation_Play "Lejátszás" +${LangFileString} ContextMenuEntry_PlayWith "Lejátszás a VLC médialejátszóval" +${LangFileString} ContextMenuEntry_AddToPlaylist "Hozzáadás a VLC lejátszólistájához" + +${LangFileString} Link_VisitWebsite "A VideoLAN VLC médialejátszó weboldalának felkeresése" + +${LangFileString} Name_InstTypeRecommended "Javasolt" +${LangFileString} Name_InstTypeMinimum "Minimális" +${LangFileString} Name_InstTypeFull "Teljes" + +${LangFileString} Action_OnArrivalDVD "DVD film lejátszása" +${LangFileString} Action_OnArrivalAudioCD "Hang CD lejátszása" +${LangFileString} Action_OnArrivalVCDMovie "VCD film lejátszása" +${LangFileString} Action_OnArrivalSVCDMovie "SVCD film lejátszása" +${LangFileString} Action_OnArrivalVideoFiles "Videofájlok lejátszása" +${LangFileString} Action_OnArrivalMusicFiles "Hangfájlok lejátszása" +${LangFileString} Action_OnArrivalDVDAudio "Hang DVD lejátszása" +${LangFileString} Action_OnArrivalBluray "Blu-ray lejátszása" + +${LangFileString} License_NextText "Most már tisztában van jogaival. A folytatáshoz nyomja meg a Tovább gombot." + +${LangFileString} Detail_CheckProcesses "Folyamatok ellenőrzése..." +${LangFileString} MessageBox_VLCRunning "Úgy tűnik, a VLC fut, most bezárásra kerül." +${LangFileString} MessageBox_VLCUnableToClose "A telepítő nem tudta bezárni a VLC-t, tegye meg saját kezűleg." +${LangFileString} MessageBox_InstallAborted "Telepítés megszakítva" + +${LangFileString} Reinstall_Headline "Már telepítve van" +${LangFileString} Reinstall_HeadlineInstall "Válassza ki, hogyan szeretné telepíteni a VLC-t." +${LangFileString} Reinstall_HeadlineMaintenance "Válassza ki a végrehajtandó karbantartási lehetőséget." +${LangFileString} Reinstall_MessageOlder "A rendszerre már telepítve van a VLC egy régebbi verziója. Válassza ki a végrehajtandó műveletet, és nyomja meg a Tovább gombot." +${LangFileString} Reinstall_MessageNewer "A VLC egy újabb verziója már telepítve van. Nem javasolt régebbi verzió telepítése. Válassza ki a végrehajtandó műveletet, és nyomja meg a Tovább gombot." +${LangFileString} Reinstall_MessageSame "Már telepítve van a VLC ${VERSION} verziója. Válassza ki a végrehajtandó műveletet, és nyomja meg a Tovább gombot." +${LangFileString} Reinstall_OptionUpgrade "A VLC frissítése korábbi beállítások használatával (javasolt)" +${LangFileString} Reinstall_OptionDowngrade "A VLC visszafejlesztése korábbi beállítások használatával (javasolt)" +${LangFileString} Reinstall_OptionComponents "Összetevők hozzáadása/eltávolítása/újratelepítése" +${LangFileString} Reinstall_OptionAdvanced "Beállítások módosítása (speciális)" +${LangFileString} Reinstall_OptionUninstall "VLC eltávolítása" diff --git a/support/3rd_party/vlc/languages/IcelandicExtra.nsh b/support/3rd_party/vlc/languages/IcelandicExtra.nsh new file mode 100644 index 0000000..86ffbe3 --- /dev/null +++ b/support/3rd_party/vlc/languages/IcelandicExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Icelandic +${LangFileString} Name_Section01 "Margmiðlunarspilari (krafist)" +${LangFileString} Name_Section02a "Tengill í aðalvalmynd" +${LangFileString} Name_Section02b "Tengill á skjáborð" +${LangFileString} Name_Section34 "Vefíforrit" +${LangFileString} Name_Section03 "Mozilla íforrit" +${LangFileString} Name_Section04 "ActiveX íforrit" +${LangFileString} Name_Section05 "Afspilun diska" +${LangFileString} Name_Section06 "Skráavensl" +${LangFileString} Name_SectionGroupAudio "Hljóðskrár" +${LangFileString} Name_SectionGroupVideo "Myndskeiðasskrár" +${LangFileString} Name_SectionGroupOther "Annað" +${LangFileString} Name_Section07 "Samhengisvalmyndir" +${LangFileString} Name_Section08 "Eyða kjörstillingum og skyndiminni" + +${LangFileString} Desc_Section01 \ + "Sjálfur margmiðlunarspilarinn" +${LangFileString} Desc_Section02a \ + "Bætir táknmyndum á aðalvalmyndina til að auðvelda aðgengi" +${LangFileString} Desc_Section02b \ + "Bætir táknmyndum á skjáborðið til að auðvelda aðgengi" +${LangFileString} Desc_Section03 \ + "VLC Mozilla og Mozilla Firefox íforrit" +${LangFileString} Desc_Section04 \ + "VLC ActiveX íforrit" +${LangFileString} Desc_Section05 \ + "Skráning á afspilun DVD og CD" +${LangFileString} Desc_Section06 \ + "Stillir VLC-margmiðlunarspilarann sem sjálfgefið forrit fyrir tilgreindar skráategundir" +${LangFileString} Desc_Section07 \ + "Bæta við línum í samhengisvalmynd ('Spila með VLC' og 'Setja á spilunarlista VLC')" +${LangFileString} Desc_Section08 \ + "Eyðir kjörstillingum VLC og skrám í skyndiminni sem gætu verið afgangs eftir fyrri uppsetningar" + +${LangFileString} Name_Section91 "Henda út" +${LangFileString} Name_Section92 "Eyða kjörstillingum og skyndiminni" + +${LangFileString} Desc_Section91 \ +"Henda út VLC-margmiðlunarspilaranum og öllum tengdum einingum" +${LangFileString} Desc_Section92 \ +"Eyðir kjörstillingum VLC og skrám í skyndiminni" + +${LangFileString} ShellAssociation_Play "Spila" +${LangFileString} ContextMenuEntry_PlayWith "Spila með VLC spilaranum" +${LangFileString} ContextMenuEntry_AddToPlaylist "Bæta á spilunarlista VLC" + +${LangFileString} Link_VisitWebsite "Heimsækja vef VideoLAN VLC margmiðlunarspilarans" + +${LangFileString} Name_InstTypeRecommended "Mælt með" +${LangFileString} Name_InstTypeMinimum "Lágmarks" +${LangFileString} Name_InstTypeFull "Allt" + +${LangFileString} Action_OnArrivalDVD "Spila DVD-mynd" +${LangFileString} Action_OnArrivalAudioCD "Spila CD-hljóðdisk" +${LangFileString} Action_OnArrivalVCDMovie "Spila VCD-mynd" +${LangFileString} Action_OnArrivalSVCDMovie "Spila SVCD-mynd" +${LangFileString} Action_OnArrivalVideoFiles "Spila myndskeiðaskrár" +${LangFileString} Action_OnArrivalMusicFiles "Spila hljóðskrár" +${LangFileString} Action_OnArrivalDVDAudio "Spila DVD-hljóðdisk" +${LangFileString} Action_OnArrivalBluray "Spila Blu-ray" + +${LangFileString} License_NextText "Núna veistu hvar þú stendur. Smelltu á Næsta til að halda áfram." + +${LangFileString} Detail_CheckProcesses "Athuga ferli..." +${LangFileString} MessageBox_VLCRunning "VLC virðist vera í gangi og verður núna lokað." +${LangFileString} MessageBox_VLCUnableToClose "Uppsetningarforritið gat ekki lokað VLC, þú verður að gera það handvirkt." +${LangFileString} MessageBox_InstallAborted "Hætt við uppsetningu!" + +${LangFileString} Reinstall_Headline "Þegar uppsett" +${LangFileString} Reinstall_HeadlineInstall "Veldu hvernig þú vilt setja upp VLC ." +${LangFileString} Reinstall_HeadlineMaintenance "Veldu þá viðhaldsaðgerð sem þú vilt framkvæma." +${LangFileString} Reinstall_MessageOlder "Eldri útgáfa VLC er uppsett á kerfinu þínu. Veldu þá aðgerð sem þú vilt framkvæma og smelltu á Næsta til að halda áfram." +${LangFileString} Reinstall_MessageNewer "Nýrri útgáfa VLC er þegar uppsett! Ekki er mælt með því að niðurfæra í eldri útgáfu. Veldu þá aðgerð sem þú vilt framkvæma og smelltu á Næsta til að halda áfram." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} er þegar uppsett. Veldu þá aðgerð sem þú vilt framkvæma og smelltu á Næsta til að halda áfram." +${LangFileString} Reinstall_OptionUpgrade "Uppfæra VLC með fyrri stillingum (mælt með þessu)" +${LangFileString} Reinstall_OptionDowngrade "Niðurfæra VLC með fyrri stillingum (mælt með þessu)" +${LangFileString} Reinstall_OptionComponents "Bæta við/Fjarlægja/Enduruppsetja forritseiningar" +${LangFileString} Reinstall_OptionAdvanced "Breyta stillingum (ítarlegt)" +${LangFileString} Reinstall_OptionUninstall "Henda VLC út" diff --git a/support/3rd_party/vlc/languages/IndonesianExtra.nsh b/support/3rd_party/vlc/languages/IndonesianExtra.nsh new file mode 100644 index 0000000..7f18042 --- /dev/null +++ b/support/3rd_party/vlc/languages/IndonesianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Indonesian +${LangFileString} Name_Section01 "Pemutar Media (dibutuhkan)" +${LangFileString} Name_Section02a "Pintasan Menu Mulai" +${LangFileString} Name_Section02b "Pintasan Desktop" +${LangFileString} Name_Section34 "Pengaya Web" +${LangFileString} Name_Section03 "Pengaya Mozilla" +${LangFileString} Name_Section04 "Pengaya ActiveX" +${LangFileString} Name_Section05 "Pemutaran Diska" +${LangFileString} Name_Section06 "Asosiasi jenis berkas" +${LangFileString} Name_SectionGroupAudio "Berkas Audio" +${LangFileString} Name_SectionGroupVideo "Berkas Video" +${LangFileString} Name_SectionGroupOther "Berkas Lainnya" +${LangFileString} Name_Section07 "Menu Konteks" +${LangFileString} Name_Section08 "Hapus preferensi dan tembolok" + +${LangFileString} Desc_Section01 \ + "Pemutar media itu sendiri" +${LangFileString} Desc_Section02a \ + "Tambahkan ikon pada menu mulai anda untuk kemudahan akses" +${LangFileString} Desc_Section02b \ + "Tambahkan ikon ke destop anda untuk kemudahan akses" +${LangFileString} Desc_Section03 \ + "Pengaya VLC Mozilla dan Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Pengaya ActiveX VLC" +${LangFileString} Desc_Section05 \ + "Registrasi pemutaran CD dan DVD" +${LangFileString} Desc_Section06 \ + "Setel pemutar media VLC sebagai aplikasi baku untuk jenis berkas tertentu" +${LangFileString} Desc_Section07 \ + "Tambahkan butir menu konteks ('Putar dengan VLC' dan 'Tambahkan Ke Daftar Putar VLC')" +${LangFileString} Desc_Section08 \ + "Hapus preferensi pemutar media dan tembolok VLC yang tertinggal dari pemasangan sebelumya" + +${LangFileString} Name_Section91 "Copot" +${LangFileString} Name_Section92 "Hapus preferensi dan tembolok" + +${LangFileString} Desc_Section91 \ +"Copot pemasangan pemutar media VLC dan semua komponennya" +${LangFileString} Desc_Section92 \ +"Hapus berkas preferensi dan tembolok pemutar media VLC" + +${LangFileString} ShellAssociation_Play "Putar" +${LangFileString} ContextMenuEntry_PlayWith "Putar dengan pemutar media VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Tambahkan ke daftar putar pemutar media VLC" + +${LangFileString} Link_VisitWebsite "Kunjungi situs web VideoLAN pemutar media VLC" + +${LangFileString} Name_InstTypeRecommended "Direkomendasikan" +${LangFileString} Name_InstTypeMinimum "Minimum" +${LangFileString} Name_InstTypeFull "Penuh" + +${LangFileString} Action_OnArrivalDVD "Putar film DVD" +${LangFileString} Action_OnArrivalAudioCD "Putar CD audio" +${LangFileString} Action_OnArrivalVCDMovie "Putar film VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Putar film SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Putar berkas video" +${LangFileString} Action_OnArrivalMusicFiles "Putar berkas audio" +${LangFileString} Action_OnArrivalDVDAudio "Putar DVD audio" +${LangFileString} Action_OnArrivalBluray "Putar Blu-ray" + +${LangFileString} License_NextText "Anda sekarang sadar atas hak anda. Klik Lanjut untuk melanjutkan." + +${LangFileString} Detail_CheckProcesses "Memeriksa proses..." +${LangFileString} MessageBox_VLCRunning "Sepertinya VLC masih berjalan dan saat ini akan ditutup." +${LangFileString} MessageBox_VLCUnableToClose "Pemasang ini tidak dapat menutup VLC, silahkan lakukan secara manual." +${LangFileString} MessageBox_InstallAborted "Pemasangan dibatalkan!" + +${LangFileString} Reinstall_Headline "Sudah Dipasang" +${LangFileString} Reinstall_HeadlineInstall "Pilih bagaimana Anda memasang VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Pilih opsi pemeliharaan untuk dijalankan." +${LangFileString} Reinstall_MessageOlder "Versi VLC yang lebih lama terpasang di sistem Anda. Pilih operasi yang ingin Anda laksanakan dan klik Lanjut untuk melanjutkan." +${LangFileString} Reinstall_MessageNewer "Versi VLC yang terbaru sudah terpasang! Tidak direkomendasikan menurunkan ke versi yang lebih lama. Pilih operasi yang ingin Anda lakukan dan klik Lanjut untuk melanjutkan." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} sudah terpasang. Pilih operasi yang ingin Anda lakukan dan klik Lanjut untuk melanjutkan." +${LangFileString} Reinstall_OptionUpgrade "Mutakhirkan VLC menggunakan pengaturan sebelumnya (direkomendasikan)" +${LangFileString} Reinstall_OptionDowngrade "Turunkan versi VLC menggunakan pengaturan sebelumnya (direkomendasikan)" +${LangFileString} Reinstall_OptionComponents "Tambah/Buang/Pasang Ulang komponen" +${LangFileString} Reinstall_OptionAdvanced "Ubah pengaturan (lanjutan)" +${LangFileString} Reinstall_OptionUninstall "Copot VLC" diff --git a/support/3rd_party/vlc/languages/ItalianExtra.nsh b/support/3rd_party/vlc/languages/ItalianExtra.nsh new file mode 100644 index 0000000..ab0e952 --- /dev/null +++ b/support/3rd_party/vlc/languages/ItalianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Italian +${LangFileString} Name_Section01 "Lettore multimediale (richiesto)" +${LangFileString} Name_Section02a "Collegamento nel menu Start" +${LangFileString} Name_Section02b "Collegamento del desktop" +${LangFileString} Name_Section34 "Estensioni web" +${LangFileString} Name_Section03 "Estensione Mozilla" +${LangFileString} Name_Section04 "Estensione ActiveX" +${LangFileString} Name_Section05 "Riproduzione dischi" +${LangFileString} Name_Section06 "Associazioni dei tipi di file" +${LangFileString} Name_SectionGroupAudio "File audio" +${LangFileString} Name_SectionGroupVideo "File video" +${LangFileString} Name_SectionGroupOther "Altro" +${LangFileString} Name_Section07 "Menu contestuali" +${LangFileString} Name_Section08 "Elimina le preferenze e la cache" + +${LangFileString} Desc_Section01 \ + "Il lettore multimediale" +${LangFileString} Desc_Section02a \ + "Aggiunge le icona al menu di avvio per un accesso rapido" +${LangFileString} Desc_Section02b \ + "Aggiunge l'icona al tuo desktop per un accesso rapido" +${LangFileString} Desc_Section03 \ + "L'estensione per Mozilla e Mozilla Firefox di VLC " +${LangFileString} Desc_Section04 \ + "L'estensione ActiveX di VLC" +${LangFileString} Desc_Section05 \ + "Riproduzione diretta di DVD e CD" +${LangFileString} Desc_Section06 \ + "Imposta il lettore multimediale VLC come applicazione predefinita per il tipo di file specificato" +${LangFileString} Desc_Section07 \ + "Aggiunge elementi al menu contestuale ('Riproduci con VLC' e 'Aggiungi alla scaletta di VLC')" +${LangFileString} Desc_Section08 \ + "Elimina i file delle preferenze e della cache del lettore VLC delle precedenti installazioni" + +${LangFileString} Name_Section91 "Disinstalla" +${LangFileString} Name_Section92 "Elimina le preferenze e la cache" + +${LangFileString} Desc_Section91 \ +"Disinstalla il lettore multimediale VLC e tutti i suoi componenti" +${LangFileString} Desc_Section92 \ +"Elimina i file delle preferenze e della cache del lettore multimediale VLC" + +${LangFileString} ShellAssociation_Play "Riproduci" +${LangFileString} ContextMenuEntry_PlayWith "Riproduci con il lettore multimediale VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Aggiungi alla scaletta del lettore multimediale VLC" + +${LangFileString} Link_VisitWebsite "Visita il sito web del lettore multimediale VLC di VideoLAN" + +${LangFileString} Name_InstTypeRecommended "Consigliata" +${LangFileString} Name_InstTypeMinimum "Minimale" +${LangFileString} Name_InstTypeFull "Completa" + +${LangFileString} Action_OnArrivalDVD "Riproduci DVD video" +${LangFileString} Action_OnArrivalAudioCD "Riproduci CD audio" +${LangFileString} Action_OnArrivalVCDMovie "Riproduci VCD video" +${LangFileString} Action_OnArrivalSVCDMovie "Riproduci SVCD video" +${LangFileString} Action_OnArrivalVideoFiles "Riproduci file video" +${LangFileString} Action_OnArrivalMusicFiles "Riproduci file audio" +${LangFileString} Action_OnArrivalDVDAudio "Riproduci DVD audio" +${LangFileString} Action_OnArrivalBluray "Riproduci Blu-ray" + +${LangFileString} License_NextText "Ora conosci i tuoi diritti. Fai clic su Avanti per continuare." + +${LangFileString} Detail_CheckProcesses "Verifica processi in corso..." +${LangFileString} MessageBox_VLCRunning "VLC sembra essere in esecuzione e sarà chiuso subito." +${LangFileString} MessageBox_VLCUnableToClose "L'installatore non è riuscito a chiudere VLC, chiudilo manualmente." +${LangFileString} MessageBox_InstallAborted "Installazione interrotta!" + +${LangFileString} Reinstall_Headline "Già installato" +${LangFileString} Reinstall_HeadlineInstall "Scegli come installare VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Scegli l'opzione di manutenzione da eseguire." +${LangFileString} Reinstall_MessageOlder "Una versione più datata di VLC è installata sul tuo sistema. Seleziona l'operazione che desideri eseguire e fai clic su Avanti per continuare." +${LangFileString} Reinstall_MessageNewer "Una versione più recente di VLC è già installata! Non è consigliato tornare a una versione più datata. Seleziona l'operazione che desideri eseguire e fai clic su Avanti per continuare." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} è già installato. Seleziona l'operazione che desideri eseguire e fai clic su Avanti per continuare." +${LangFileString} Reinstall_OptionUpgrade "Aggiorna VLC utilizzando le impostazioni precedenti (consigliata)" +${LangFileString} Reinstall_OptionDowngrade "Torna alla versione più datata di VLC utilizzando le impostazioni precedenti (consigliato)" +${LangFileString} Reinstall_OptionComponents "Aggiungi/Rimuovi/Reinstalla componenti" +${LangFileString} Reinstall_OptionAdvanced "Modifica le impostazioni (avanzato)" +${LangFileString} Reinstall_OptionUninstall "Disinstalla VLC" diff --git a/support/3rd_party/vlc/languages/JapaneseExtra.nsh b/support/3rd_party/vlc/languages/JapaneseExtra.nsh new file mode 100644 index 0000000..49e5777 --- /dev/null +++ b/support/3rd_party/vlc/languages/JapaneseExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Japanese +${LangFileString} Name_Section01 "メディアプレイヤー (必須)" +${LangFileString} Name_Section02a "スタートメニューショートカット" +${LangFileString} Name_Section02b "デスクトップショートカット" +${LangFileString} Name_Section34 "ウェブプラグイン" +${LangFileString} Name_Section03 "Mozillaプラグイン" +${LangFileString} Name_Section04 "ActiveXプラグイン" +${LangFileString} Name_Section05 "ディスク再生" +${LangFileString} Name_Section06 "ファイル形式の関連付け" +${LangFileString} Name_SectionGroupAudio "オーディオファイル" +${LangFileString} Name_SectionGroupVideo "ビデオファイル" +${LangFileString} Name_SectionGroupOther "その他" +${LangFileString} Name_Section07 "コンテキストメニュー" +${LangFileString} Name_Section08 "設定とキャッシュを削除" + +${LangFileString} Desc_Section01 \ + "メディアプレイヤー自身" +${LangFileString} Desc_Section02a \ + "簡単にアクセスできるようにスタートメニューにアイコンを追加" +${LangFileString} Desc_Section02b \ + "簡単にアクセスできるようにデスクトップにアイコンを追加" +${LangFileString} Desc_Section03 \ + "VLC MozillaとFirefoxプラグイン" +${LangFileString} Desc_Section04 \ + "VLC ActiveXプラグイン" +${LangFileString} Desc_Section05 \ + "DVDとCD再生の登録" +${LangFileString} Desc_Section06 \ + "指定されたファイル形式のデフォルトアプリケーションとしてVLCメディアプレイヤーを設定" +${LangFileString} Desc_Section07 \ + "コンテキストメニューを追加 ('VLCで再生'と'VLCのプレイリストに追加')" +${LangFileString} Desc_Section08 \ + "前回のインストール時から残っているVLCメディアプレイヤーの設定とキャッシュを削除" + +${LangFileString} Name_Section91 "アンインストール" +${LangFileString} Name_Section92 "設定とキャッシュを削除" + +${LangFileString} Desc_Section91 \ +"VLCメディアプレイヤーとすべてのコンポーネントをアンインストール" +${LangFileString} Desc_Section92 \ +"VLCメディアプレイヤーの設定とキャッシュファイルを削除" + +${LangFileString} ShellAssociation_Play "再生" +${LangFileString} ContextMenuEntry_PlayWith "VLCメディアプレイヤーで再生" +${LangFileString} ContextMenuEntry_AddToPlaylist "VLCメディアプレイヤーのプレイリストに追加" + +${LangFileString} Link_VisitWebsite "VideoLAN VLCメディアプレイヤーのウェブサイトに移動" + +${LangFileString} Name_InstTypeRecommended "推奨" +${LangFileString} Name_InstTypeMinimum "最小" +${LangFileString} Name_InstTypeFull "すべて" + +${LangFileString} Action_OnArrivalDVD "DVDムービー再生" +${LangFileString} Action_OnArrivalAudioCD "オーディオCD再生" +${LangFileString} Action_OnArrivalVCDMovie "VCDムービー再生" +${LangFileString} Action_OnArrivalSVCDMovie "SVCDムービー再生" +${LangFileString} Action_OnArrivalVideoFiles "ビデオファイル再生" +${LangFileString} Action_OnArrivalMusicFiles "オーディオファイル再生" +${LangFileString} Action_OnArrivalDVDAudio "オーディオDVD再生" +${LangFileString} Action_OnArrivalBluray "ブルーレイを再生" + +${LangFileString} License_NextText "あなたの権利について確認したら、次へをクリックしてください。" + +${LangFileString} Detail_CheckProcesses "チェック中..." +${LangFileString} MessageBox_VLCRunning "VLCが実行中なので、閉じられます。" +${LangFileString} MessageBox_VLCUnableToClose "インストーラーはVLCを閉じることができません、手動で行ってください。" +${LangFileString} MessageBox_InstallAborted "インストールが異常終了しました!" + +${LangFileString} Reinstall_Headline "すでにインストールされています" +${LangFileString} Reinstall_HeadlineInstall "VLCをインストールする方法を選択してください。" +${LangFileString} Reinstall_HeadlineMaintenance "処理したいメンテナンスオプションを選択してください。" +${LangFileString} Reinstall_MessageOlder "古いバージョンのVLCがシステムにインストールされています。処理したいオペレーションを選択して次へをクリックしてください。" +${LangFileString} Reinstall_MessageNewer "新しいバージョンのVLCが既にインストールされています。古いバージョンへのダウングレードは推奨されていません。処理したいオペレーションを選択して次へをクリックしてください。" +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} は既にインストールされています。処理したいオペレーションを選択して次へをクリックしてください。" +${LangFileString} Reinstall_OptionUpgrade "以前の設定を使ってVLCをアップグレード (推奨)" +${LangFileString} Reinstall_OptionDowngrade "以前の設定を使ってVLCをダウングレード (推奨)" +${LangFileString} Reinstall_OptionComponents "コンポーネントの追加/削除/再インストール" +${LangFileString} Reinstall_OptionAdvanced "設定の変更 (詳細)" +${LangFileString} Reinstall_OptionUninstall "VLCのアンインストール" diff --git a/support/3rd_party/vlc/languages/KhmerExtra.nsh b/support/3rd_party/vlc/languages/KhmerExtra.nsh new file mode 100644 index 0000000..e226ee8 --- /dev/null +++ b/support/3rd_party/vlc/languages/KhmerExtra.nsh @@ -0,0 +1,77 @@ +!insertmacro LANGFILE_EXT Khmer +${LangFileString} Name_Section01 "កម្មវិធី​ចាក់​មេឌៀ (បាន​ទាមទារ)" +${LangFileString} Name_Section02a "ចាប់ផ្ដើម​ផ្លូវកាត់​ម៉ឺនុយ" +${LangFileString} Name_Section02b "ផ្លូវកាត់​ផ្ទៃតុ" +${LangFileString} Name_Section34 "កម្មវិធី​ជំនួយ​បណ្ដាញ" +${LangFileString} Name_Section03 "កម្មវិធី​ជំនួយ Mozilla" +${LangFileString} Name_Section04 "កម្មវិធី​ជំនួយ ActiveX" +${LangFileString} Name_Section05 "ចាក់​ឌីស​ឡើង​វិញ" +${LangFileString} Name_Section06 "ពាក់ព័ន្ធ​​ប្រភេទ​ឯកសារ" +${LangFileString} Name_SectionGroupAudio "ឯកសារ​អូឌីយ៉ូ" +${LangFileString} Name_SectionGroupVideo "ឯកសារ​វីដេអូ" +${LangFileString} Name_SectionGroupOther "ផ្សេង" +${LangFileString} Name_Section07 "ម៉ឺនុយ​បរិបទ" +${LangFileString} Name_Section08 "លុប​ចំណូលចិត្ត និង​ឃ្លាំង" + +${LangFileString} Desc_Section01 \ + "កម្មវិធី​ចាក់​មេឌៀ" +${LangFileString} Desc_Section02a \ + "បន្ថែម​រូបតំណាង​ទៅ​ម៉ឺនុយ​ចាប់ផ្ដើម​របស់​អ្នក​សម្រាប់​ការ​ចូល​ដំណើរការ​ងាយ​ស្រួល" +${LangFileString} Desc_Section02b \ + "បន្ថែម​រូបតំណាង​ទៅ​ផ្ទៃ​តុ​របស់​អ្នក​សម្រាប់​ការ​ចូល​ដំណើរការ​ងាយស្រួល" +${LangFileString} Desc_Section03 \ + "VLC Mozilla និង​កម្មវិធី​ជំនួយ Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "កម្មវិធី​ជំនួយ VLC ActiveX" +${LangFileString} Desc_Section05 \ + "ការ​ចុះ​ឈ្មោះ​ការ​ចាក់​ឡើង​វិញ​ឌីវីឌី និង​ស៊ីឌី" +${LangFileString} Desc_Section06 \ + "កំណត់​កម្មវិធី​ចាក់​មេឌៀ VLC ជា​កម្មវិធី​លំនាំដើម​សម្រាប់​ប្រភេទ​ឯកសារ​ដែល​បាន​បញ្ជាក់" +${LangFileString} Desc_Section07 \ + "បន្ថែម​ធាតុ​ម៉ឺនុយ​​បរិបទ ('ចាក់​ជាមួយ VLC' និង 'បន្ថែម​ទៅ​បញ្ជី​ចាក់​របស់ VLC')" +${LangFileString} Desc_Section08 \ + "លុប​ចំណូលចិត្ត​កម្មវិធី​ចាក់​មេឌៀ VLC និង​ឯកសារ​ឃ្លាំង​​ពី​ការ​ដំឡើង​មុន" + +${LangFileString} Name_Section91 "លុប" +${LangFileString} Name_Section92 "លុប​ចំណូល​ចិត្ត និង​ឃ្លាំង" + +${LangFileString} Desc_Section91 \ +"លុប​កម្មវិធី​ចាក់​មេឌៀ VLC និង​សមាសភាគ​របស់​វា​ទាំងអស់" +${LangFileString} Desc_Section92 \ +"លុប​ចំណូល​ចិត្ត​កម្មវិធី​ចាក់​មេឌៀ VLC និង​ឯកសារ​ឃ្លាំង" + +${LangFileString} ShellAssociation_Play "ចាក់" +${LangFileString} ContextMenuEntry_PlayWith "ចាក់​ជាមួយ​កម្មវិធី​ចាក់​មេឌៀ VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "បន្ថែម​ទៅ​បញ្ជី​ចាក់​កម្មវិធី​ចាក់​មេឌៀ​ VLC" + +${LangFileString} Link_VisitWebsite "ទស្សនា​តំបន់​បណ្ដាញ​កម្មវិធី​ចាក់​មេឌៀ VideoLAN VLC" + +${LangFileString} Name_InstTypeRecommended "បាន​ផ្ដល់​អនុសាសន៍" +${LangFileString} Name_InstTypeMinimum "អប្បបរមា" +${LangFileString} Name_InstTypeFull "ពេញ" + +${LangFileString} Action_OnArrivalDVD "ចាក់​ភាព​យន្ត DVD" +${LangFileString} Action_OnArrivalAudioCD "ចាក់​ស៊ីឌី​អូឌីយ៉ូ" +${LangFileString} Action_OnArrivalVCDMovie "ចាក់​ភាព​យន្ត​ VCD" +${LangFileString} Action_OnArrivalSVCDMovie "ចាក់​ភាព​យន្ត SVCD" +${LangFileString} Action_OnArrivalVideoFiles "ចាក់​ឯកសារ​វីដេអូ" +${LangFileString} Action_OnArrivalMusicFiles "ចាក់​ឯកសារ​ស្វ័យប្រវត្តិ" +${LangFileString} Action_OnArrivalDVDAudio "ចាក់​ឌីវីឌី​ស្វ័យប្រវត្តិ" +${LangFileString} License_NextText "ឥឡូវ​អ្នក​ស្គាល់​សិទ្ធិ​របស់​អ្នក​។ ចុច​បន្ទាប់​ដើម្បី​បន្ត។" + +${LangFileString} Detail_CheckProcesses "កំពុង​ពិនិត្យមើល​ការ​ចូល​ដំណើរការ..." +${LangFileString} MessageBox_VLCRunning "ការ​លេច​ឡើង VLC កំពុង​ដំណើរការ ហើយ​នឹង​ត្រូវ​បាន​បិទ​ឥឡូវ​នេះ។" +${LangFileString} MessageBox_VLCUnableToClose "កម្មវិធី​​ដំឡើង​នេះ​មិន​អាច​បិទ VLC បាន​ទេ, សូម​ធ្វើ​វា​ដោយ​ដៃ។" +${LangFileString} MessageBox_InstallAborted "បោះបង់​ការ​ដំឡើង!" + +${LangFileString} Reinstall_Headline "បាន​ដំឡើង​រួច​ហើយ" +${LangFileString} Reinstall_HeadlineInstall "ជ្រើស​របៀប​ដែល​អ្នក​ចង់​ដំឡើង​ VLC ។" +${LangFileString} Reinstall_HeadlineMaintenance "ជ្រើស​ជម្រើស​ថែទាំ​ដើម្បី​ប្រតិបត្តិ។" +${LangFileString} Reinstall_MessageOlder "កំណែ VLC ចាស់​ត្រូវ​បាន​ដំឡើង​នៅ​លើ​ប្រព័ន្ធ​របស់​អ្នក។ ជ្រើស​ប្រតិបត្តិ​ការ​ដែល​អ្នក​ចង់​ប្រតិបត្តិ ហើយ​ចុច​បន្ទាប់​ដើម្បី​បន្ត។" +${LangFileString} Reinstall_MessageNewer "កំណែ VLC ថ្មី​ជាង​ត្រូវ​បាន​ដំឡើង​រួច​ហើយ! វា​មិន​ត្រូវ​បាន​ផ្ដល់​អនុសាសន៍​ដែល​អ្នក​​បន្ទាប​មក​កំណែ​ចាស់​ជាង។ ជ្រើស​ប្រតិបត្តិការ​ដែល​អ្នក​ចង់​ប្រតិបត្តិ ហើយ​ចុច​បន្ទាប់​ដើម្បី​បន្ត។" +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} ត្រូវ​បាន​ដំឡើង​រួច​ហើយ។ ជ្រើស​ប្រតិបត្តិការ​ដែល​អ្នក​ចង់​ប្រតិបត្តិ ហើយ​ចុច​បន្ទាប់​ដើម្បី​បន្ត។" +${LangFileString} Reinstall_OptionUpgrade "ធ្វើ​ឲ្យ VLC របស់​អ្នក​ប្រសើរ​ដោយ​ប្រើ​ការ​កំណត់​មុនៗ (បាន​ផ្ដល់​អនុសាសន៍)" +${LangFileString} Reinstall_OptionDowngrade "បន្ទាប​កំណែ VLC ដោយ​ប្រើ​ការ​កំណត់​មុនៗ (បាន​ផ្ដល់​អនុសាសន៍)" +${LangFileString} Reinstall_OptionComponents "បន្ថែម/លុប​ចេញ/ដំឡើង​​សមាសធាតុ​ម្ដង​ទៀត" +${LangFileString} Reinstall_OptionAdvanced "ប្ដូរ​ការ​កំណត់​ (កម្រិត​ខ្ពស់)" +${LangFileString} Reinstall_OptionUninstall "លុប VLC" diff --git a/support/3rd_party/vlc/languages/KoreanExtra.nsh b/support/3rd_party/vlc/languages/KoreanExtra.nsh new file mode 100644 index 0000000..80dc680 --- /dev/null +++ b/support/3rd_party/vlc/languages/KoreanExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Korean +${LangFileString} Name_Section01 "재생기 (필요함)" +${LangFileString} Name_Section02a "시작 메뉴 바로가기" +${LangFileString} Name_Section02b "바탕화면 바로가기" +${LangFileString} Name_Section34 "웹 플러그인" +${LangFileString} Name_Section03 "모질라 플러그인" +${LangFileString} Name_Section04 "액티브엑스 플러그인" +${LangFileString} Name_Section05 "디스크 재생" +${LangFileString} Name_Section06 "파일 형식 연결" +${LangFileString} Name_SectionGroupAudio "오디오 파일" +${LangFileString} Name_SectionGroupVideo "비디오 파일" +${LangFileString} Name_SectionGroupOther "기타" +${LangFileString} Name_Section07 "컨텍스트 메뉴" +${LangFileString} Name_Section08 "환경설정과 캐쉬 지우기" + +${LangFileString} Desc_Section01 \ + "미디어 플레이어 그 자체" +${LangFileString} Desc_Section02a \ + "시작 메뉴에 아이콘을 추가합니다" +${LangFileString} Desc_Section02b \ + "바탕화면에 아이콘을 추가합니다" +${LangFileString} Desc_Section03 \ + "VLC 모질라, 모질라 파이어폭스 플러그인" +${LangFileString} Desc_Section04 \ + "VLC 액티브엑스 플러그인" +${LangFileString} Desc_Section05 \ + "DVD / CD 재생 등록" +${LangFileString} Desc_Section06 \ + "지정한 파일 형식에 대해 VLC 미디어 재생기를 기본 프로그램으로 설정합니다" +${LangFileString} Desc_Section07 \ + "컨텍스트 메뉴 항목 추가하기 ('VLC로 재생하기', 'VLC 재생목록에 추가하기')" +${LangFileString} Desc_Section08 \ + "이전에 설치된 VLC 미디어 플레이어의 환경설정과 남은 캐쉬 파일을 완전히 삭제합니다" + +${LangFileString} Name_Section91 "제거하기" +${LangFileString} Name_Section92 "환경설정과 캐쉬 제거하기" + +${LangFileString} Desc_Section91 \ +"VLC 미디어 플레이어와 종속된 모든 컴포넌트를 제거합니다" +${LangFileString} Desc_Section92 \ +"VLC 미디어 플레이어 환경설정과 캐쉬 파일을 삭제합니다" + +${LangFileString} ShellAssociation_Play "재생" +${LangFileString} ContextMenuEntry_PlayWith "VLC 로 재생하기" +${LangFileString} ContextMenuEntry_AddToPlaylist "VLC의 재생목록에 추가하기" + +${LangFileString} Link_VisitWebsite "VideoLAN VLC 웹사이트에 방문하기" + +${LangFileString} Name_InstTypeRecommended "추천" +${LangFileString} Name_InstTypeMinimum "최소" +${LangFileString} Name_InstTypeFull "전체" + +${LangFileString} Action_OnArrivalDVD "DVD 재생하기" +${LangFileString} Action_OnArrivalAudioCD "오디오 CD 재생하기" +${LangFileString} Action_OnArrivalVCDMovie "VCD 재생하기" +${LangFileString} Action_OnArrivalSVCDMovie "SVCD 재생하기" +${LangFileString} Action_OnArrivalVideoFiles "비디오 파일 재생하기" +${LangFileString} Action_OnArrivalMusicFiles "오디오 파일 재생하기" +${LangFileString} Action_OnArrivalDVDAudio "오디오 DVD 재생하기" +${LangFileString} Action_OnArrivalBluray "Blu-ray 재생" + +${LangFileString} License_NextText "당신의 권리를 확인했습니다. 계속하려면 클릭하세요." + +${LangFileString} Detail_CheckProcesses "처리사항 확인 중..." +${LangFileString} MessageBox_VLCRunning "VLC가 실행중인데, 곧 종료될 것입니다. " +${LangFileString} MessageBox_VLCUnableToClose "VLC를 종료할 수 없습니다. 직접 종료해 주세요." +${LangFileString} MessageBox_InstallAborted "설치를 중단했습니다!" + +${LangFileString} Reinstall_Headline "이미 설치했습니다" +${LangFileString} Reinstall_HeadlineInstall "VLC 설치 방법을 선택하세요." +${LangFileString} Reinstall_HeadlineMaintenance "수행할 관리 옵션을 선택하세요." +${LangFileString} Reinstall_MessageOlder "이전 버전의 VLC가 이미 설치되어 있습니다. 수행할 동작을 선택하고 다음을 눌러 계속하세요." +${LangFileString} Reinstall_MessageNewer "새 버전의 VLC가 이미 설치되어 있습니다! 이전 버전으로 다운그레이드는 권장하지 않습니다. 수행할 동작을 선택하고 다음을 눌러 계속하세요." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} 가 이미 설치되어 있습니다. 수행할 동작을 선택하고 다음을 눌러 계속하세요." +${LangFileString} Reinstall_OptionUpgrade "이전 설정값을 사용하여 VLC 업그레이드 (권장)" +${LangFileString} Reinstall_OptionDowngrade "이전 설정을 사용하여 다운그레이드하기 (권장)" +${LangFileString} Reinstall_OptionComponents "컴포넌트 추가/제거/재설치하기" +${LangFileString} Reinstall_OptionAdvanced "설정을 변경하기 (고급)" +${LangFileString} Reinstall_OptionUninstall "VLC 제거하기" diff --git a/support/3rd_party/vlc/languages/LatvianExtra.nsh b/support/3rd_party/vlc/languages/LatvianExtra.nsh new file mode 100644 index 0000000..05326cf --- /dev/null +++ b/support/3rd_party/vlc/languages/LatvianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Latvian +${LangFileString} Name_Section01 "Mediju atskaņotājs (nepieciešams)" +${LangFileString} Name_Section02a "Sākuma izvēlnes saīsne" +${LangFileString} Name_Section02b "Darbvirsmas saīsne" +${LangFileString} Name_Section34 "Tīmekļa spraudņi" +${LangFileString} Name_Section03 "Mozilla spraudnis" +${LangFileString} Name_Section04 "ActiveX spraudnis" +${LangFileString} Name_Section05 "Disku atskaņošana" +${LangFileString} Name_Section06 "Datņu tipu asociācijas" +${LangFileString} Name_SectionGroupAudio "Audio datnes" +${LangFileString} Name_SectionGroupVideo "Video datnes" +${LangFileString} Name_SectionGroupOther "Citi" +${LangFileString} Name_Section07 "Konteksta izvēlnes" +${LangFileString} Name_Section08 "Dzēst iestatījumus un kešatmiņu" + +${LangFileString} Desc_Section01 \ + "Pats mediju atskaņotājs" +${LangFileString} Desc_Section02a \ + "Vieglākai piekļuvei pievieno ikonas jūsu sākuma izvēlnei" +${LangFileString} Desc_Section02b \ + "Vieglākai piekļuvei pievieno ikonu jūsu darbvirsmai" +${LangFileString} Desc_Section03 \ + "VLC Mozilla un Mozilla Firefox spraudnis" +${LangFileString} Desc_Section04 \ + "VLC ActiveX spraudnis" +${LangFileString} Desc_Section05 \ + "DVD un CD atskaņošanas reģistrācija" +${LangFileString} Desc_Section06 \ + "Iestata VLC mediju atskaņotāju kā noklusējuma lietotni norādītajam datnes tipam" +${LangFileString} Desc_Section07 \ + "Pievienot konteksta izvēlnes vienumus ('Atskaņot ar VLC' un 'Pievienot VLC atskaņošanas sarakstam')" +${LangFileString} Desc_Section08 \ + "Dzēš VLC mediju atskaņotāja iestatījumus un kešatmiņas datņu atlikumus no iepriekšējām instalācijām" + +${LangFileString} Name_Section91 "Atinstalēt" +${LangFileString} Name_Section92 "Dzēst iestatījumus un kešatmiņu" + +${LangFileString} Desc_Section91 \ +"Atinstalēt VLC mediju atskaņotāju un visas tā komponentes" +${LangFileString} Desc_Section92 \ +"Dzēš VLC mediju atskaņotāja iestatījumus un kešatmiņas datnes" + +${LangFileString} ShellAssociation_Play "Atskaņot" +${LangFileString} ContextMenuEntry_PlayWith "Atskaņot ar VLC mediju atskaņotāju" +${LangFileString} ContextMenuEntry_AddToPlaylist "Pievienot VLC mediju atskaņotāja atskaņošanas sarakstam" + +${LangFileString} Link_VisitWebsite "Apmeklēt VideoLAN VLC mediju atskaņotāja tīmekļa vietni" + +${LangFileString} Name_InstTypeRecommended "Ieteicamais" +${LangFileString} Name_InstTypeMinimum "Minimālais" +${LangFileString} Name_InstTypeFull "Pilnais" + +${LangFileString} Action_OnArrivalDVD "Atskaņot DVD filmu" +${LangFileString} Action_OnArrivalAudioCD "Atskaņot audio CD" +${LangFileString} Action_OnArrivalVCDMovie "Atskaņot VCD filmu" +${LangFileString} Action_OnArrivalSVCDMovie "Atskaņot SVCD filmu" +${LangFileString} Action_OnArrivalVideoFiles "Atskaņot video datnes" +${LangFileString} Action_OnArrivalMusicFiles "Atskaņot audio datnes" +${LangFileString} Action_OnArrivalDVDAudio "Atskaņot audio DVD" +${LangFileString} Action_OnArrivalBluray "Atskaņot Blu-ray" + +${LangFileString} License_NextText "Tagad jūs esat apzinājies savas tiesības. Noklikšķiniet uz Tālāk, lai turpinātu." + +${LangFileString} Detail_CheckProcesses "Pārbauda processus..." +${LangFileString} MessageBox_VLCRunning "Izskatās, ka VLC darbojas, un nu tiks aizvērts." +${LangFileString} MessageBox_VLCUnableToClose "Instalētājs nespēja aizvērt VLC. Lūdzu, izdariet to pašrocīgi." +${LangFileString} MessageBox_InstallAborted "Instalācija pārtraukta!" + +${LangFileString} Reinstall_Headline "Jau instalēts" +${LangFileString} Reinstall_HeadlineInstall "Izvēlieties, kā jūs vēlaties instalēt VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Izvēlieties izpildāmo uzturēšanas opciju." +${LangFileString} Reinstall_MessageOlder "Jūsu sistēmā ir instalēta vecāka VLC versija. Atlasiet darbību, ko jūs vēlaties izpildīt, un klikšķiniet Tālāk, lai turpinātu." +${LangFileString} Reinstall_MessageNewer "Jaunāka VLC versija jau ir instalēta! Nav ieteicams, ka jūs pazemināt uz vecāku VLC versiju. Atlasiet darbību, ko jūs vēlaties izpildīt, un klikšķiniet Tālāk, lai turpinātu." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} ir jau instalēts. Atlasiet darbību, ko jūs vēlaties izpildīt, un klikšķiniet Tālāk, lai turpinātu." +${LangFileString} Reinstall_OptionUpgrade "Jaunināt VLC, izmantojot iepriekšējos iestatījumus (ieteicams)" +${LangFileString} Reinstall_OptionDowngrade "Pazemināt VLC versiju, izmantojot iepriekšējos iestatījumus (ieteicams)" +${LangFileString} Reinstall_OptionComponents "Pievienot/noņemt/atkārtoti instalēt komponentus" +${LangFileString} Reinstall_OptionAdvanced "Mainīt iestatījumus (pieredzējušiem)" +${LangFileString} Reinstall_OptionUninstall "Noņemt VLC" diff --git a/support/3rd_party/vlc/languages/LithuanianExtra.nsh b/support/3rd_party/vlc/languages/LithuanianExtra.nsh new file mode 100644 index 0000000..eebcf7d --- /dev/null +++ b/support/3rd_party/vlc/languages/LithuanianExtra.nsh @@ -0,0 +1,77 @@ +!insertmacro LANGFILE_EXT Lithuanian +${LangFileString} Name_Section01 "Įvairialypės terpės kūrinių grotuvas (būtinas)" +${LangFileString} Name_Section02a "„Pradžios“ meniu nuoroda" +${LangFileString} Name_Section02b "Darbalaukio nuoroda" +${LangFileString} Name_Section34 "Naršyklės papildinys" +${LangFileString} Name_Section03 "Mozilla (Firefox) papildinys" +${LangFileString} Name_Section04 "ActiveX papildinys" +${LangFileString} Name_Section05 "Disko grojimas" +${LangFileString} Name_Section06 "Failų tipų susiejimai" +${LangFileString} Name_SectionGroupAudio "Garso failai" +${LangFileString} Name_SectionGroupVideo "Video failai" +${LangFileString} Name_SectionGroupOther "Kita" +${LangFileString} Name_Section07 "Kontekstinis meniu" +${LangFileString} Name_Section08 "Ištrinti ankstesnes VLC nuostatas bei podėlį" + +${LangFileString} Desc_Section01 \ + "Pats kūrinių grotuvas" +${LangFileString} Desc_Section02a \ + "Prideda ženkliukus prie jūsų „Pradžios“ meniu – kad būtų lengviau pasiekti" +${LangFileString} Desc_Section02b \ + "Prideda ženkliukus jūsų darbalaukyje – kad būtų lengviau pasiekti" +${LangFileString} Desc_Section03 \ + "VLC Mozilla ir Mozilla Firefox papildinys" +${LangFileString} Desc_Section04 \ + "VLC ActiveX papildinys" +${LangFileString} Desc_Section05 \ + "DVD ir CD atkūrimo registracija" +${LangFileString} Desc_Section06 \ + "Priskiria VLC grotuvą numatytąją programa nurodytam failų tipui" +${LangFileString} Desc_Section07 \ + "Pridėti kontekstini meniu punktą („Paleisti per VLC“ ir „Įtraukti į VLC grojaraštį“)" +${LangFileString} Desc_Section08 \ + "Ištrinti VLC media grotuvo nustatymus bei podėlį likusius po ankstesnių instaliacijų" + +${LangFileString} Name_Section91 "Pašalinti" +${LangFileString} Name_Section92 "Ištrinti ankstesnius VLC nustatymus bei podėlį" + +${LangFileString} Desc_Section91 \ +"Pašalinti VLC media grotuvą ir visus jo komponentus" +${LangFileString} Desc_Section92 \ +"Ištrinti VLC media grotuvo nustatymus bei podėlį" + +${LangFileString} ShellAssociation_Play "Groti" +${LangFileString} ContextMenuEntry_PlayWith "Leisti per VLC grotuvą" +${LangFileString} ContextMenuEntry_AddToPlaylist "Įtraukti į VLC grojaraštį" + +${LangFileString} Link_VisitWebsite "Aplankyti VideoLAN VLC grotuvo tinklalapį" + +${LangFileString} Name_InstTypeRecommended "Rekomenduojamas" +${LangFileString} Name_InstTypeMinimum "Mažiausias" +${LangFileString} Name_InstTypeFull "Pilnas" + +${LangFileString} Action_OnArrivalDVD "Žiūrėti DVD filmą" +${LangFileString} Action_OnArrivalAudioCD "Klausytis garso CD" +${LangFileString} Action_OnArrivalVCDMovie "Žiūrėti VCD filmą" +${LangFileString} Action_OnArrivalSVCDMovie "Žiūrėti SVCD filmą" +${LangFileString} Action_OnArrivalVideoFiles "Žiūrėti video failus" +${LangFileString} Action_OnArrivalMusicFiles "Klausytis garso failų" +${LangFileString} Action_OnArrivalDVDAudio "Klausytis garso DVD" +${LangFileString} License_NextText "Dabar jau žinote savo teises. Jei norite tęsti, spustelėkite mygtuką Toliau" + +${LangFileString} Detail_CheckProcesses "Tikrinami procesai..." +${LangFileString} MessageBox_VLCRunning "VLC atrodo veikia ir dabar bus uždarytas." +${LangFileString} MessageBox_VLCUnableToClose "Diegimo programai nepavyko uždaryti VLC, padarykite tai rankiniu būdu." +${LangFileString} MessageBox_InstallAborted "Diegimas nutrauktas" + +${LangFileString} Reinstall_Headline "Jau įdiegtas" +${LangFileString} Reinstall_HeadlineInstall "Pasirinkite kaip norite įdiegti VLC" +${LangFileString} Reinstall_HeadlineMaintenance "Pasirinkite techninės priežiūros funkciją atlikti." +${LangFileString} Reinstall_MessageOlder "Ankstesnė VLC versija jau įdiegta. Pasirinkite veiksmą, kurį norite atlikti ir spustelėkite Toliau." +${LangFileString} Reinstall_MessageNewer "Naujesnė VLC versija jau įdiegta! Nerekomenduojama grįžti prie ankstesnės versijos. Pasirinkite veiksmą, kurį norite atlikti ir spustelėkite Toliau." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} jau įdiegtas. Pasirinkite veiksmą, kurį norite atlikti ir spustelėkite Toliau." +${LangFileString} Reinstall_OptionUpgrade "Atnaujinti VLC naudojant anksesnius nustatymus (rekomenduojama)" +${LangFileString} Reinstall_OptionDowngrade "Grąžinti ankstesnę VLC versiją naudojant ankstesnius nustatymus (rekomenduojama)" +${LangFileString} Reinstall_OptionComponents "Pridėti / pašalinti / iš naujo diegti komponentus" +${LangFileString} Reinstall_OptionAdvanced "Keisti nustatymus (patyrusiems)" +${LangFileString} Reinstall_OptionUninstall "Pašalinti VLC" diff --git a/support/3rd_party/vlc/languages/MalayExtra.nsh b/support/3rd_party/vlc/languages/MalayExtra.nsh new file mode 100644 index 0000000..10b5768 --- /dev/null +++ b/support/3rd_party/vlc/languages/MalayExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Malay +${LangFileString} Name_Section01 "Pemain Media (diperlukan)" +${LangFileString} Name_Section02a "Pintasan Menu Start" +${LangFileString} Name_Section02b "Pintasan Atas Meja" +${LangFileString} Name_Section34 "Pemalam Sesawang" +${LangFileString} Name_Section03 "Pemalam Mozilla" +${LangFileString} Name_Section04 "Pemalam ActiveX" +${LangFileString} Name_Section05 "Mainbalik Cakera" +${LangFileString} Name_Section06 "Kesatuan jenis fail" +${LangFileString} Name_SectionGroupAudio "Fail Audio" +${LangFileString} Name_SectionGroupVideo "Fail Video" +${LangFileString} Name_SectionGroupOther "Lain-lain" +${LangFileString} Name_Section07 "Menu Konteks" +${LangFileString} Name_Section08 "Hapus keutamaan dan cache" + +${LangFileString} Desc_Section01 \ + "Pemain media itu sendiri" +${LangFileString} Desc_Section02a \ + "Tambah ikon pada menu mula untuk capaian mudah" +${LangFileString} Desc_Section02b \ + "Tambah ikon pada atas meja untuk capaian mudah" +${LangFileString} Desc_Section03 \ + "Pemalam VLC Mozilla dan Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Pemalam ActiveX VLC" +${LangFileString} Desc_Section05 \ + "Pendaftaran mainbalik DVD dan CD" +${LangFileString} Desc_Section06 \ + "Tetapkan pemain media sebagai aplikasi lalai untuk jenis fail yang ditentukan" +${LangFileString} Desc_Section07 \ + "Tambah item menu konteks ('Main Dengan VLC' dan 'Tambah Ke Senarai Main VLC')" +${LangFileString} Desc_Section08 \ + "Hapus keutamaan dan fail cache pemain media VLC yang berbaki daripada pemasangan terdahulu" + +${LangFileString} Name_Section91 "Nyahpasang" +${LangFileString} Name_Section92 "Padam keutamaan dan cache" + +${LangFileString} Desc_Section91 \ +"Nyahpasang pemain media VLC dan semua komponennya " +${LangFileString} Desc_Section92 \ +"Padam keutamaan dan fail cache pemain media VLC" + +${LangFileString} ShellAssociation_Play "Main" +${LangFileString} ContextMenuEntry_PlayWith "Main dengan pemain media VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Tambah kepada Senarai Main pemain media VLC" + +${LangFileString} Link_VisitWebsite "Lawati Laman Sesawang pemain media VLC" + +${LangFileString} Name_InstTypeRecommended "Disarankan" +${LangFileString} Name_InstTypeMinimum "Minimum" +${LangFileString} Name_InstTypeFull "Penuh" + +${LangFileString} Action_OnArrivalDVD "Main filem DVD" +${LangFileString} Action_OnArrivalAudioCD "Main CD audio" +${LangFileString} Action_OnArrivalVCDMovie "Main filem VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Main filem SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Main fail video" +${LangFileString} Action_OnArrivalMusicFiles "Main fail audio" +${LangFileString} Action_OnArrivalDVDAudio "Main DVD audio" +${LangFileString} Action_OnArrivalBluray "Main Blu-ray" + +${LangFileString} License_NextText "Anda kini sedar akan hak anda. Klik Berikut untuk teruskan." + +${LangFileString} Detail_CheckProcesses "Memeriksa proses..." +${LangFileString} MessageBox_VLCRunning "VLC kelihatan dijalankan dan kini akan ditutup." +${LangFileString} MessageBox_VLCUnableToClose "Pemasang tidak dapat menutup VLC, sila lakukannya secara manual." +${LangFileString} MessageBox_InstallAborted "Pemasangan dihenti paksa!" + +${LangFileString} Reinstall_Headline "Telah sedia terpasang" +${LangFileString} Reinstall_HeadlineInstall "Pilih bagaimana anda ingin memasang VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Pilih pilihan penyelenggaraan untuk dilakukan." +${LangFileString} Reinstall_MessageOlder "Versi VLC lama sudah dipasang pada sistem anda. Pilih operasi yang anda ingin lakukan dan klik Berikut untuk teruskan." +${LangFileString} Reinstall_MessageNewer "Versi terbaru sudah dipasang! Adalah disarankan yang anda menyahtatar ke versi terdahulu. Pilih operasi yang anda ingin lakukan dan klik Berikut untuk teruskan." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} sedia terpasang. Pilih operasi yang anda ingin lakukan dan klik Berikut untuk teruskan." +${LangFileString} Reinstall_OptionUpgrade "Tatar VLC menggunakan tetapan terdahulu (disarankan)" +${LangFileString} Reinstall_OptionDowngrade "Nyahtatar VLC menggunakan tetapan terdahulu (disarankan)" +${LangFileString} Reinstall_OptionComponents "Tambah/Buang/Pasang Semula komponen" +${LangFileString} Reinstall_OptionAdvanced "Tukar tetapan (lanjutan)" +${LangFileString} Reinstall_OptionUninstall "Nyahpasang VLC" diff --git a/support/3rd_party/vlc/languages/MongolianExtra.nsh b/support/3rd_party/vlc/languages/MongolianExtra.nsh new file mode 100644 index 0000000..001901f --- /dev/null +++ b/support/3rd_party/vlc/languages/MongolianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Mongolian +${LangFileString} Name_Section01 "Дамжуулга тоглуулагч (шаардлагатай)" +${LangFileString} Name_Section02a "Start цэсний shortcut" +${LangFileString} Name_Section02b "Ажлын тавцан shortcut" +${LangFileString} Name_Section34 "Вэб нэмэлтүүд" +${LangFileString} Name_Section03 "Mozilla нэмэлтүүд" +${LangFileString} Name_Section04 "ActiveX нэмэлт" +${LangFileString} Name_Section05 "Диск тоглуулалт" +${LangFileString} Name_Section06 "Файлын төрлийн холбоо" +${LangFileString} Name_SectionGroupAudio "Дууны файлууд" +${LangFileString} Name_SectionGroupVideo "Видеоны файлууд" +${LangFileString} Name_SectionGroupOther "Бусад" +${LangFileString} Name_Section07 "Хамааралтай цэс" +${LangFileString} Name_Section08 "Тохируулгууд, нөөцүүдийг устгах" + +${LangFileString} Desc_Section01 \ + "Дамжуулга тоглуулагч өөрөө" +${LangFileString} Desc_Section02a \ + "Амар хандахад зориулж start цэсэнд шошго нэмэх" +${LangFileString} Desc_Section02b \ + "Амар хандахад зориулж ажлын тавцанд шошго нэмэх" +${LangFileString} Desc_Section03 \ + "VLC Mozilla ба Mozilla Firefox нэмэлт" +${LangFileString} Desc_Section04 \ + "VLC ActiveX нэмэлт" +${LangFileString} Desc_Section05 \ + "DVD, CD тоглуулалт бүртгэл" +${LangFileString} Desc_Section06 \ + "VLC дамжуулга тоглуулагчийг тодорхойлсон файлын төрлүүдийн анхдагч програм болгох" +${LangFileString} Desc_Section07 \ + "Хамааралтай цэсийн зүйлс нэмэх ('VLC-ээр тоглох' ба 'VLC-ийн тоглох жагсаалтад нэмэх')" +${LangFileString} Desc_Section08 \ + "Өмнөх суулгацаас үлдсэн VLC дамжуулга тоглуулагчийн тохируулгууд, нөөцийг устгана" + +${LangFileString} Name_Section91 "Устгах" +${LangFileString} Name_Section92 "Тохируулгууд, нөөцүүдийг устгах" + +${LangFileString} Desc_Section91 \ +"VLC дамжуулга тоглуулагчийг иж бүрнээр нь устгах" +${LangFileString} Desc_Section92 \ +"VLC дамжуулга тоглуулагчийн тохируулгууд, нөөц файлуудыг устгах" + +${LangFileString} ShellAssociation_Play "Тоглох" +${LangFileString} ContextMenuEntry_PlayWith "VLC дамжуулга тоглуулагчаар тоглох" +${LangFileString} ContextMenuEntry_AddToPlaylist "VLC-ийн тоглох жагсаалтад нэмэх" + +${LangFileString} Link_VisitWebsite "VideoLAN VLC дамжуулга тоглуулагчийн Вэбсайтад зочлох" + +${LangFileString} Name_InstTypeRecommended "Санал болгосон" +${LangFileString} Name_InstTypeMinimum "Хамгийн бага" +${LangFileString} Name_InstTypeFull "Бүтэн" + +${LangFileString} Action_OnArrivalDVD "DVD кино тоглуулах" +${LangFileString} Action_OnArrivalAudioCD "Дууны CD тоглуулах" +${LangFileString} Action_OnArrivalVCDMovie "VCD кино тоглуулах" +${LangFileString} Action_OnArrivalSVCDMovie "SVCD кино тоглуулах" +${LangFileString} Action_OnArrivalVideoFiles "Дүрст файлуудыг тоглуулах" +${LangFileString} Action_OnArrivalMusicFiles "Дууны файлуудыг тоглуулах" +${LangFileString} Action_OnArrivalDVDAudio "Дууны DVD тоглуулах" +${LangFileString} Action_OnArrivalBluray "Blu-Ray тоглуулах" + +${LangFileString} License_NextText "Та одоо өөрийнхөө эрх ашгийг мэдэж байна. Дараах гэдгийг дарж үргэлжлүүлнэ үү." + +${LangFileString} Detail_CheckProcesses "Үйл явцыг шалгаж байна..." +${LangFileString} MessageBox_VLCRunning "VLC нь ажиллаж байна, одоо хаах болно." +${LangFileString} MessageBox_VLCUnableToClose "Суулгагч нь VLC-г хааж чадсангүй, гараар хаана уу." +${LangFileString} MessageBox_InstallAborted "Суулгалт таслагдсан!" + +${LangFileString} Reinstall_Headline "Суугдсан байна" +${LangFileString} Reinstall_HeadlineInstall "VLC-г хэрхэн суулгамаар байгаагаа сонго." +${LangFileString} Reinstall_HeadlineMaintenance "Гүйцэтгэхийн тулд засвар үйлчилгээг сонго." +${LangFileString} Reinstall_MessageOlder "Таны системд VLC-ийн хуучин хувилбар суугдсан байна. Гүйцэтгэх үйлдлээ сонгоод, Цааш товчийг дарж үргэлжлүүлнэ үү." +${LangFileString} Reinstall_MessageNewer "VLC-ийн шинэ хувилбар суугдсан байна! Хуучин хувилбар луу доошлуулах нь сайн биш. Гүйцэтгэх үйлдлээ сонгоод, Цааш товчийг дарж үргэлжлүүлнэ үү." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} суугдсан байна. Гүйцэтгэх үйлдлээ сонгоод, Цааш товчийг дарж үргэлжлүүлнэ үү." +${LangFileString} Reinstall_OptionUpgrade "Өмнөх тохиргоогоор VLC-г ахиулах (сайшаагдсан)" +${LangFileString} Reinstall_OptionDowngrade "Өмнөх тохиргоог ашиглаж VLC-г доошлуулах (сайшаагдсан)" +${LangFileString} Reinstall_OptionComponents "Нэмэх/Хасах/Дахин суулгах бүрдлүүд" +${LangFileString} Reinstall_OptionAdvanced "Тохиргоо солих (дэлгэрэнгүй)" +${LangFileString} Reinstall_OptionUninstall "VLC-г устгах" diff --git a/support/3rd_party/vlc/languages/NorwegianExtra.nsh b/support/3rd_party/vlc/languages/NorwegianExtra.nsh new file mode 100644 index 0000000..757dcf7 --- /dev/null +++ b/support/3rd_party/vlc/languages/NorwegianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Norwegian +${LangFileString} Name_Section01 "Mediaspiller (nødvendig)" +${LangFileString} Name_Section02a "Snarvei fra startmenyen" +${LangFileString} Name_Section02b "Skrivebordssnarvei" +${LangFileString} Name_Section34 "Nettillegg" +${LangFileString} Name_Section03 "Mozilla-tillegg" +${LangFileString} Name_Section04 "ActiveX-tillegg" +${LangFileString} Name_Section05 "Avspilling av disker" +${LangFileString} Name_Section06 "Assosiasjoner for filtyper" +${LangFileString} Name_SectionGroupAudio "Lydfiler" +${LangFileString} Name_SectionGroupVideo "Videofiler" +${LangFileString} Name_SectionGroupOther "Annet" +${LangFileString} Name_Section07 "Sammenhengsmenyer" +${LangFileString} Name_Section08 "Slett innstillinger og hurtiglager" + +${LangFileString} Desc_Section01 \ + "Selve mediespilleren" +${LangFileString} Desc_Section02a \ + "Legger til ikoner i startmenyen for lett tilgang" +${LangFileString} Desc_Section02b \ + "Legger til ikon på skrivebordet for lett tilgang" +${LangFileString} Desc_Section03 \ + "Tilleggene VLC Mozilla og Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "ActiveX-tillegget for VLC" +${LangFileString} Desc_Section05 \ + "Registrering av avspilling for CD- og DVD-er" +${LangFileString} Desc_Section06 \ + "Gjør VLC-mediespilleren til standardprogram for den angitte filtypen" +${LangFileString} Desc_Section07 \ + "Legger til menyinlegg («Spill i VLC» og Legg til i spilleliste i VLC»)" +${LangFileString} Desc_Section08 \ + "Sletter innstillingene og og mellomlageret som er til overs fra tidligere VLC-installasjoner" + +${LangFileString} Name_Section91 "Avinstaller" +${LangFileString} Name_Section92 "Slett innstillinger og mellomlager" + +${LangFileString} Desc_Section91 \ +"Slett VLC-mediespilleren og alle relaterte komponenter" +${LangFileString} Desc_Section92 \ +"Sletter innstillinger og mellomlager for VLC" + +${LangFileString} ShellAssociation_Play "Spill av" +${LangFileString} ContextMenuEntry_PlayWith "Spill i VLC mediespiller" +${LangFileString} ContextMenuEntry_AddToPlaylist "Legg til i VLCs spilleliste" + +${LangFileString} Link_VisitWebsite "Se nettstedet til VideoLAN VLC mediespiller" + +${LangFileString} Name_InstTypeRecommended "Anbefalt" +${LangFileString} Name_InstTypeMinimum "Minimum" +${LangFileString} Name_InstTypeFull "Fullstendig" + +${LangFileString} Action_OnArrivalDVD "Spill DVD-film" +${LangFileString} Action_OnArrivalAudioCD "Spill lyd-CD" +${LangFileString} Action_OnArrivalVCDMovie "Spill VCD-film" +${LangFileString} Action_OnArrivalSVCDMovie "Spill SVCD-film" +${LangFileString} Action_OnArrivalVideoFiles "Spill videofiler" +${LangFileString} Action_OnArrivalMusicFiles "Spill lydfiler" +${LangFileString} Action_OnArrivalDVDAudio "Spill lyd-DVDer" +${LangFileString} Action_OnArrivalBluray "Spill av Blu-ray" + +${LangFileString} License_NextText "Du er nå klar over rettighetene dine. Trykk «Neste» for å fortsette." + +${LangFileString} Detail_CheckProcesses "Sjekker prosesser…" +${LangFileString} MessageBox_VLCRunning "VLC ser ut til å kjøre og vil nå lukkes." +${LangFileString} MessageBox_VLCUnableToClose "Denne veiviseren kunne ikke lukke VLC, gjør det manuelt." +${LangFileString} MessageBox_InstallAborted "Installasjonen ble avbrutt!" + +${LangFileString} Reinstall_Headline "Allerede installert" +${LangFileString} Reinstall_HeadlineInstall "Velg hvordan du vil installere VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Velg hva som skal vedlikeholdes" +${LangFileString} Reinstall_MessageOlder "En eldre versjon av VLC er installert på systemet. Velg hva som skal gjøres og trykk «Neste» for å fortsette." +${LangFileString} Reinstall_MessageNewer "En nyere versjon av VLC er allerede installert! Det anbefales at du ikke nedgraderer til en tidligere versjon. Velg hva som skal gjøres og trykk «Neste» for å fortsette." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} er allerede installert. Velg hva du vil gjøre og trykk «Neste» for å fortsette." +${LangFileString} Reinstall_OptionUpgrade "Oppgrader VLC med de forrige innstillingene (anbefalt)" +${LangFileString} Reinstall_OptionDowngrade "Nedgrader VLC med de tidligere innstillingene (anbefalt)" +${LangFileString} Reinstall_OptionComponents "Legg til/Fjern/Ominstaller komponenter" +${LangFileString} Reinstall_OptionAdvanced "Endre innstillinger (avansert)" +${LangFileString} Reinstall_OptionUninstall "Avinstaller VLC" diff --git a/support/3rd_party/vlc/languages/NorwegianNynorskExtra.nsh b/support/3rd_party/vlc/languages/NorwegianNynorskExtra.nsh new file mode 100644 index 0000000..4d3b7bd --- /dev/null +++ b/support/3rd_party/vlc/languages/NorwegianNynorskExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT NorwegianNynorsk +${LangFileString} Name_Section01 "Media Player (påkravd)" +${LangFileString} Name_Section02a "Startmeny-snarveg" +${LangFileString} Name_Section02b "Skrivebord-snarveg" +${LangFileString} Name_Section34 "Web-programtillegg" +${LangFileString} Name_Section03 "Mozilla-programtillegg" +${LangFileString} Name_Section04 "ActiveX-programtillegg" +${LangFileString} Name_Section05 "Plate-avspeling" +${LangFileString} Name_Section06 "Filetype-tilknytingar" +${LangFileString} Name_SectionGroupAudio "Lydfiler" +${LangFileString} Name_SectionGroupVideo "Videofiler" +${LangFileString} Name_SectionGroupOther "Anna" +${LangFileString} Name_Section07 "Kontekstmenyar" +${LangFileString} Name_Section08 "Slett innstillingar og snøgglager" + +${LangFileString} Desc_Section01 \ + "Mediaspelaren i seg sjølv" +${LangFileString} Desc_Section02a \ + "Legg til ikon i startmenyen for enklare tilgang" +${LangFileString} Desc_Section02b \ + "Legg til ikon på skrivebordet for enkel tilgang" +${LangFileString} Desc_Section03 \ + "VLC Mozilla og Mozilla Firefox programtillegg" +${LangFileString} Desc_Section04 \ + "VLC ActiveX-programtillegg" +${LangFileString} Desc_Section05 \ + "DVD- og CD-avspelingsregistrering" +${LangFileString} Desc_Section06 \ + "Vel VLC mediaspelar som standardprogram for denne filtypen." +${LangFileString} Desc_Section07 \ + "Legg til kontekstmenyelement ('Spel av med VLC' og 'Legg til i VLCs speleliste')" +${LangFileString} Desc_Section08 \ + "Slettar innstillingar og mellomlagringsfiler i VLC mediaspelar som vart til overs frå førre installering." + +${LangFileString} Name_Section91 "Avinstaller" +${LangFileString} Name_Section92 "Slett innstillingar og snøgglager" + +${LangFileString} Desc_Section91 \ +"Avinstaller VLC mediaspelar og alle komponentar" +${LangFileString} Desc_Section92 \ +"Slettar innstillingar og mellomlagringsfiler i VLC mediaspelar" + +${LangFileString} ShellAssociation_Play "Spel" +${LangFileString} ContextMenuEntry_PlayWith "Spel med VLC mediaspelar" +${LangFileString} ContextMenuEntry_AddToPlaylist "Legg til i VLC mediaspelar si speleliste" + +${LangFileString} Link_VisitWebsite "Besøk VideoLANs nettside for VLC mediaspelar" + +${LangFileString} Name_InstTypeRecommended "Tilrådd" +${LangFileString} Name_InstTypeMinimum "Minimum" +${LangFileString} Name_InstTypeFull "Full" + +${LangFileString} Action_OnArrivalDVD "Spel DVD-film" +${LangFileString} Action_OnArrivalAudioCD "Spel lyd-CD" +${LangFileString} Action_OnArrivalVCDMovie "Spel VCD-film" +${LangFileString} Action_OnArrivalSVCDMovie "Spel SVCD-film" +${LangFileString} Action_OnArrivalVideoFiles "Spel videofiler" +${LangFileString} Action_OnArrivalMusicFiles "Spel lydfiler" +${LangFileString} Action_OnArrivalDVDAudio "Spel lyd-DVD" +${LangFileString} Action_OnArrivalBluray "Spel Blu-ray" + +${LangFileString} License_NextText "Du er no klar over rettane dine. Trykk neste for å fortsetja." + +${LangFileString} Detail_CheckProcesses "Kontrollerer prosessar…" +${LangFileString} MessageBox_VLCRunning "Det ser ut til at VLC køyrer, og vil no latast att." +${LangFileString} MessageBox_VLCUnableToClose "Denne installeraren klarte ikkje å lata att VLC, ver snill og lat att manuelt." +${LangFileString} MessageBox_InstallAborted "Installering avbroten!" + +${LangFileString} Reinstall_Headline "Allereie installert" +${LangFileString} Reinstall_HeadlineInstall "Vel korleis du vil installera VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Vel vedlikehaldsinnstillinga som skal utførast." +${LangFileString} Reinstall_MessageOlder "Ein eldre versjon av VLC er installert på systemet ditt. Vel handlinga du vil utføra og trykk Neste for å fortsetja." +${LangFileString} Reinstall_MessageNewer "Ein nyare versjon av VLC er allereie installert! Det er ikkje tilrådd at du nedgraderer til ein eldre versjon. Vel handlinga du vil utføra og trykk Neste for å fortsetja." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} er allereie installert. Vel handlinga du vil utføra og trykk Neste for å fortsetja." +${LangFileString} Reinstall_OptionUpgrade "Oppgrader VLC med tidlegare innstillingar (tilrådd)" +${LangFileString} Reinstall_OptionDowngrade "Nedgrader VLC med tidlegare innstillingar (tilrådd)" +${LangFileString} Reinstall_OptionComponents "Legg til/Fjern/Installer komponetar på nytt" +${LangFileString} Reinstall_OptionAdvanced "Endra innstillingar (avansert)" +${LangFileString} Reinstall_OptionUninstall "Avinstaller VLC" diff --git a/support/3rd_party/vlc/languages/PolishExtra.nsh b/support/3rd_party/vlc/languages/PolishExtra.nsh new file mode 100644 index 0000000..71641e6 --- /dev/null +++ b/support/3rd_party/vlc/languages/PolishExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Polish +${LangFileString} Name_Section01 "Media Player (wymagany)" +${LangFileString} Name_Section02a "Skrót w Menu Start" +${LangFileString} Name_Section02b "Ikona na pulpicie" +${LangFileString} Name_Section34 "Wtyczki internetowe" +${LangFileString} Name_Section03 "Wtyczka Mozilla" +${LangFileString} Name_Section04 "Wtyczka ActiveX" +${LangFileString} Name_Section05 "Odtwarzanie płyt" +${LangFileString} Name_Section06 "Skojarzenia typu pliku" +${LangFileString} Name_SectionGroupAudio "Pliki audio" +${LangFileString} Name_SectionGroupVideo "Pliki wideo" +${LangFileString} Name_SectionGroupOther "Inne" +${LangFileString} Name_Section07 "Menu kontekstowe" +${LangFileString} Name_Section08 "Wyczyścić pamięć podręczną i usunąć ustawienia" + +${LangFileString} Desc_Section01 \ + "Pliki samego odtwarzacza" +${LangFileString} Desc_Section02a \ + "Dodaje skrót łatwego dostępu w Twoim Menu Start" +${LangFileString} Desc_Section02b \ + "Dodaje ikonę łatwego dostępu na Twoim pulpicie" +${LangFileString} Desc_Section03 \ + "Wtyczka VLC Mozilla i Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Wtyczka VLC ActiveX" +${LangFileString} Desc_Section05 \ + "Rejestracja VLC do odtwarzania płyt DVD i CD" +${LangFileString} Desc_Section06 \ + "Ustawia VLC media player jako domyślną aplikację dla poszczególnego typu pliku" +${LangFileString} Desc_Section07 \ + "Dodaje nowe pozycje do menu kontekstowego ('Odtwórz w VLC' i 'Dodaj do listy odtwarzania VLC')" +${LangFileString} Desc_Section08 \ + "Usuwa ustawienia odtwarzacza multimedialnego VLC i pamięci podręcznej poprzednich instalacji" + +${LangFileString} Name_Section91 "Odinstaluj" +${LangFileString} Name_Section92 "Wyczyścić pamięć podręczną i usunąć ustawienia" + +${LangFileString} Desc_Section91 \ +"Odinstaluj VLC media player i wszystkie jego składniki" +${LangFileString} Desc_Section92 \ +"Usuwa ustawienia odtwarzacza VLC media player i pamięci podręcznej" + +${LangFileString} ShellAssociation_Play "Odtwórz" +${LangFileString} ContextMenuEntry_PlayWith "Odtwórz w VLC media player" +${LangFileString} ContextMenuEntry_AddToPlaylist "Dodaj do listy odtwarzania VLC media player" + +${LangFileString} Link_VisitWebsite "Odwiedź witrynę VideoLAN VLC media player" + +${LangFileString} Name_InstTypeRecommended "Zalecana" +${LangFileString} Name_InstTypeMinimum "Minimalna" +${LangFileString} Name_InstTypeFull "Pełna" + +${LangFileString} Action_OnArrivalDVD "Odtwarzaj film na DVD" +${LangFileString} Action_OnArrivalAudioCD "Odtwarzaj CD-Audio" +${LangFileString} Action_OnArrivalVCDMovie "Odtwarzaj film na VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Odtwarzaj film na SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Odtwarzaj pliki wideo" +${LangFileString} Action_OnArrivalMusicFiles "Odtwarzaj pliki audio" +${LangFileString} Action_OnArrivalDVDAudio "Odtwarzaj DVD-Audio" +${LangFileString} Action_OnArrivalBluray "Odtwarzaj Blu-ray" + +${LangFileString} License_NextText "Jesteś teraz świadomy swoich praw. Kliknij przycisk Dalej, aby kontynuować." + +${LangFileString} Detail_CheckProcesses "Procesy sprawdzania..." +${LangFileString} MessageBox_VLCRunning "VLC jest uruchomiony i zostanie teraz zamknięty." +${LangFileString} MessageBox_VLCUnableToClose "Instalator nie może zamknąć VLC, musisz zrobić to ręcznie." +${LangFileString} MessageBox_InstallAborted "Instalacja przerwana!" + +${LangFileString} Reinstall_Headline "Już zainstalowany" +${LangFileString} Reinstall_HeadlineInstall "Wybierz, w jaki sposób chcesz zainstalować VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Wybierz opcję konserwacji do wykonania." +${LangFileString} Reinstall_MessageOlder "Starsza wersja VLC jest zainstalowana na Twoim systemie. Wybierz operację do wykonania, a następnie kliknij przycisk Dalej, aby kontynuować." +${LangFileString} Reinstall_MessageNewer "Nowsza wersja VLC jest już zainstalowana! Nie zaleca się, instalować i korzystać ze starszej wersji. Wybierz operację do wykonania, a następnie kliknij przycisk Dalej, aby kontynuować." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} jest już zainstalowany. Wybierz operację do wykonania, a następnie kliknij przycisk Dalej, aby kontynuować." +${LangFileString} Reinstall_OptionUpgrade "Uaktualnij VLC, używając poprzednich ustawień (zalecane)" +${LangFileString} Reinstall_OptionDowngrade "Zainstaluj starszą wersję VLC, używając poprzednich ustawień (zalecane)" +${LangFileString} Reinstall_OptionComponents "Dodaj/Usuń/Zainstaluj komponenty" +${LangFileString} Reinstall_OptionAdvanced "Zmień ustawienia (zaawansowane)" +${LangFileString} Reinstall_OptionUninstall "Odinstaluj VLC" diff --git a/support/3rd_party/vlc/languages/PortugueseBRExtra.nsh b/support/3rd_party/vlc/languages/PortugueseBRExtra.nsh new file mode 100644 index 0000000..95f6a08 --- /dev/null +++ b/support/3rd_party/vlc/languages/PortugueseBRExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT PortugueseBR +${LangFileString} Name_Section01 "Reprodutor de Mídias (obrigatório)" +${LangFileString} Name_Section02a "Atalho do Menu Iniciar" +${LangFileString} Name_Section02b "Atalho da Área de Trabalho" +${LangFileString} Name_Section34 "Complementos da Web" +${LangFileString} Name_Section03 "Complemento Mozilla" +${LangFileString} Name_Section04 "Complemento ActiveX" +${LangFileString} Name_Section05 "Reprodução de Discos" +${LangFileString} Name_Section06 "Associações de Extensões de Arquivos" +${LangFileString} Name_SectionGroupAudio "Arquivos de Áudio" +${LangFileString} Name_SectionGroupVideo "Arquivos de Vídeo" +${LangFileString} Name_SectionGroupOther "Outro" +${LangFileString} Name_Section07 "Menus de Contexto" +${LangFileString} Name_Section08 "Excluir as preferências e o cache" + +${LangFileString} Desc_Section01 \ + "O própro reprodutor de mídias" +${LangFileString} Desc_Section02a \ + "Adiciona ícones ao menu iniciar para acesso fácil" +${LangFileString} Desc_Section02b \ + "Adiciona ícone à sua área de trabalho para acesso fácil" +${LangFileString} Desc_Section03 \ + "O VLC Mozilla e o complemento Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "O complemento VLC ActiveX" +${LangFileString} Desc_Section05 \ + "Registro da reprodução de DVD e CD" +${LangFileString} Desc_Section06 \ + "Define o reprodutor de mídias VLC como o aplicativo padrão para uma extensão de arquivo específica" +${LangFileString} Desc_Section07 \ + "Adicionar itens ao menu de contexto ('Reproduzir com o VLC' e 'Adicionar à Lista de Reprodução do VLC')" +${LangFileString} Desc_Section08 \ + "Exclui as preferências e arquivos de cache de instalações anteriores do reprodutor de mídias VLC" + +${LangFileString} Name_Section91 "Desinstalar" +${LangFileString} Name_Section92 "Excluir as preferências e o cache" + +${LangFileString} Desc_Section91 \ +"Desinstalar o reprodutor de mídias VLC e todos os seus componentes" +${LangFileString} Desc_Section92 \ +"Exclui os arquivos de preferências e de cache do reprodutor de mídias VLC" + +${LangFileString} ShellAssociation_Play "Reproduzir" +${LangFileString} ContextMenuEntry_PlayWith "Reproduzir com o reprodutor de mídias VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Adicionar à Lista de Reprodução do reprodutor de mídias VLC" + +${LangFileString} Link_VisitWebsite "Visite o sítio do reprodutor de mídias VLC na Internet" + +${LangFileString} Name_InstTypeRecommended "Recomendado" +${LangFileString} Name_InstTypeMinimum "Mínimo" +${LangFileString} Name_InstTypeFull "Completa" + +${LangFileString} Action_OnArrivalDVD "Reproduzir filme em DVD" +${LangFileString} Action_OnArrivalAudioCD "Reproduzir áudio em CD" +${LangFileString} Action_OnArrivalVCDMovie "Reproduzir filme em VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Reproduzir filme em SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Reproduzir arquivos de vídeo" +${LangFileString} Action_OnArrivalMusicFiles "Reproduzir arquivos de áudio" +${LangFileString} Action_OnArrivalDVDAudio "Reproduzir áudio em DVD" +${LangFileString} Action_OnArrivalBluray "Reproduzir Blu-Ray" + +${LangFileString} License_NextText "Agora você está ciente dos seus direitos. Clique em Próximo para continuar." + +${LangFileString} Detail_CheckProcesses "Verificando processos..." +${LangFileString} MessageBox_VLCRunning "Parece que o VLC está sendo executado e não será fechado." +${LangFileString} MessageBox_VLCUnableToClose "Este instalador não foi capaz de fechar o VLC. Por favor, faça isso manualmente." +${LangFileString} MessageBox_InstallAborted "Instalação interrompida!" + +${LangFileString} Reinstall_Headline "Já instalado" +${LangFileString} Reinstall_HeadlineInstall "Escolha como deseja instalar o VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Escolha a opção de manutenção que deseja executar." +${LangFileString} Reinstall_MessageOlder "Uma versão anterior do VLC está instalada em seu sistema. Selecione a operação que deseja executar e clique em Próximo para continuar." +${LangFileString} Reinstall_MessageNewer "Uma versão mais recente do VLC já está instalada em seu sistema e não é recomendado que você regrida para uma versão anterior. Selecione a operação que deseja e clique em Próximo para continuar." +${LangFileString} Reinstall_MessageSame "O VLC ${VERSION} já está instalado. Selecione a operação que deseja executar e clique em Próximo para continuar." +${LangFileString} Reinstall_OptionUpgrade "Atualizar o VLC usando configurações definidas (recomendado)" +${LangFileString} Reinstall_OptionDowngrade "Regredir a versão do VLC usando as configurações definidas (recomendado)" +${LangFileString} Reinstall_OptionComponents "Adicionar/Remover/Reinstalar componentes" +${LangFileString} Reinstall_OptionAdvanced "Alterar as configurações (avançado)" +${LangFileString} Reinstall_OptionUninstall "Desinstalar o VLC" diff --git a/support/3rd_party/vlc/languages/PortugueseExtra.nsh b/support/3rd_party/vlc/languages/PortugueseExtra.nsh new file mode 100644 index 0000000..bc57992 --- /dev/null +++ b/support/3rd_party/vlc/languages/PortugueseExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Portuguese +${LangFileString} Name_Section01 "Reprodutor de Multimédia (necessário)" +${LangFileString} Name_Section02a "Atalho do Menu Iniciar" +${LangFileString} Name_Section02b "Atalho do ambiente de trabalho" +${LangFileString} Name_Section34 "Plug-ins da Web" +${LangFileString} Name_Section03 "Plug-in da Mozilla" +${LangFileString} Name_Section04 "Plug-in ActiveX" +${LangFileString} Name_Section05 "Reprodução de discos" +${LangFileString} Name_Section06 "Associações do tipo de ficheiro" +${LangFileString} Name_SectionGroupAudio "Ficheiros de áudio" +${LangFileString} Name_SectionGroupVideo "Ficheiros de vídeo" +${LangFileString} Name_SectionGroupOther "Outros" +${LangFileString} Name_Section07 "Menus de contexto" +${LangFileString} Name_Section08 "Apague as preferências e a cache" + +${LangFileString} Desc_Section01 \ + "O próprio reprodutor de multimédia" +${LangFileString} Desc_Section02a \ + "Adiciona um ícone ao seu menu iniciar para um acesso fácil" +${LangFileString} Desc_Section02b \ + "Adiciona um ícone ao seu ambiente de trabalho para um acesso fácil" +${LangFileString} Desc_Section03 \ + "O plug-in do Mozilla e do Mozilla Firefox VLC" +${LangFileString} Desc_Section04 \ + "O plug-in ActiveX do VLC" +${LangFileString} Desc_Section05 \ + "Registo da reprodução de DVD e CD" +${LangFileString} Desc_Section06 \ + "Define o VLC media player como a aplicação predefinida para o tipo de ficheiro especificado" +${LangFileString} Desc_Section07 \ + "Adicione os itens do menu de contexto ('Reproduzir Com o VLC' e 'Adicionar À Lista de Reprodução do VLC')" +${LangFileString} Desc_Section08 \ + "Elimina as preferências e os vestígios dos ficheiros da cache de instalações anteriores do VLC media player" + +${LangFileString} Name_Section91 "Desinstalar" +${LangFileString} Name_Section92 "Apague as preferências e a cache" + +${LangFileString} Desc_Section91 \ +"Desinstalar o VLC media player e todos os seus componentes" +${LangFileString} Desc_Section92 \ +"Elimina as preferências e os ficheiros da cache do reprodutor de multimédia VLC" + +${LangFileString} ShellAssociation_Play "Reproduzir" +${LangFileString} ContextMenuEntry_PlayWith "Reproduzir com VLC media player" +${LangFileString} ContextMenuEntry_AddToPlaylist "Adicione à 'Lista de Reprodução' VLC media player" + +${LangFileString} Link_VisitWebsite "Visite o site da Web VideoLAN do VLC media player" + +${LangFileString} Name_InstTypeRecommended "Recomendado" +${LangFileString} Name_InstTypeMinimum "Mínima" +${LangFileString} Name_InstTypeFull "Completa" + +${LangFileString} Action_OnArrivalDVD "Reproduzir filme DVD" +${LangFileString} Action_OnArrivalAudioCD "Reproduzir áudio CD" +${LangFileString} Action_OnArrivalVCDMovie "Reproduzir filme VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Reproduzir filme SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Reproduzir ficheiros de vídeo" +${LangFileString} Action_OnArrivalMusicFiles "Reproduzir ficheiros de áudio" +${LangFileString} Action_OnArrivalDVDAudio "Reproduzir áudio DVD" +${LangFileString} Action_OnArrivalBluray "Reproduzir Blu-ray" + +${LangFileString} License_NextText "Agora está ciente dos seus direitos. Clique em 'Seguinte' para continuar." + +${LangFileString} Detail_CheckProcesses "A verificar os processos ..." +${LangFileString} MessageBox_VLCRunning "Parece que o VLC está em execução e será fechado agora." +${LangFileString} MessageBox_VLCUnableToClose "O instalador não conseguiu fechar o VLC, por favor, feche-o manualmente." +${LangFileString} MessageBox_InstallAborted "Instalação cancelada!" + +${LangFileString} Reinstall_Headline "Já está instalado" +${LangFileString} Reinstall_HeadlineInstall "Escolha como quer instalar o VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Escolha a opção de manutenção a executar." +${LangFileString} Reinstall_MessageOlder "Está instalada uma versão antiga do VLC no seu sistema. Selecione a operação que pretende realizar e clique em $\"Seguinte$\" para continuar." +${LangFileString} Reinstall_MessageNewer "Já está instalada uma versão mais recente do VLC! Não é recomendado a instalação de uma versão anterior. Selecione a operação que deseja realizar e clique em $\"Seguinte$\" para continuar." +${LangFileString} Reinstall_MessageSame "Está instalada a versão ${VERSION} do VLC. Selecione a operação que pretende realizar e clique em $\"Seguinte$\" para continuar." +${LangFileString} Reinstall_OptionUpgrade "Atualizar o VLC com as definições anteriores (recomendado)" +${LangFileString} Reinstall_OptionDowngrade "Instalar versão anterior do VLC com as definições anteriores (recomendado)" +${LangFileString} Reinstall_OptionComponents "Adicionar/Remover/Reinstalar componentes" +${LangFileString} Reinstall_OptionAdvanced "Alterar definições (avançado)" +${LangFileString} Reinstall_OptionUninstall "Desinstalar VLC" diff --git a/support/3rd_party/vlc/languages/RomanianExtra.nsh b/support/3rd_party/vlc/languages/RomanianExtra.nsh new file mode 100644 index 0000000..eba5ce7 --- /dev/null +++ b/support/3rd_party/vlc/languages/RomanianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Romanian +${LangFileString} Name_Section01 "Media Player (necesar)" +${LangFileString} Name_Section02a "Scurtătură meniu de start" +${LangFileString} Name_Section02b "Scurtătură desktop" +${LangFileString} Name_Section34 "Pluginuri web" +${LangFileString} Name_Section03 "Mozilla plugin" +${LangFileString} Name_Section04 "Plugin ActiveX" +${LangFileString} Name_Section05 "Redare discuri" +${LangFileString} Name_Section06 "Asocieri cu tipuri de fișiere" +${LangFileString} Name_SectionGroupAudio "Fișiere Audio" +${LangFileString} Name_SectionGroupVideo "Fișiere Video" +${LangFileString} Name_SectionGroupOther "Altele" +${LangFileString} Name_Section07 "Contextul meniuri" +${LangFileString} Name_Section08 "Ștergeți preferințele și cache-urile" + +${LangFileString} Desc_Section01 \ + "Media player în sine" +${LangFileString} Desc_Section02a \ + "Adaugă pictograme în meniul Start pentru acces rapid" +${LangFileString} Desc_Section02b \ + "Adaugă pictogramă pe desktop pentru un acces rapid" +${LangFileString} Desc_Section03 \ + "VLC Mozilla și plugin-ul Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Plugin-ul ActiveX VLC" +${LangFileString} Desc_Section05 \ + "Înregistrare DVD-uri și CD-uri de redare" +${LangFileString} Desc_Section06 \ + "Setați VLC media player ca aplicația implicită pentru tipul de fișier specificat" +${LangFileString} Desc_Section07 \ + "Adăuga elemente de meniu ($\"Redare cu VLC$\" și $\"Adăugare la Playlist-ul VLC$\")" +${LangFileString} Desc_Section08 \ + "Ștergeți VLC Media Player și preferințele fisierelor cache rămase de la instalațiile anterioare" + +${LangFileString} Name_Section91 "Dezinstalare" +${LangFileString} Name_Section92 "Ștergeți preferințele și cache-urile" + +${LangFileString} Desc_Section91 \ +"Dezinstalează VLC media player și toate componentele sale" +${LangFileString} Desc_Section92 \ +"Ștergeți preferințele VLC Media Player și fișiere cache" + +${LangFileString} ShellAssociation_Play "Redă" +${LangFileString} ContextMenuEntry_PlayWith "Redare cu VLC media player" +${LangFileString} ContextMenuEntry_AddToPlaylist "Adaugați la lista de redare VLC media player" + +${LangFileString} Link_VisitWebsite "Vizitați website-ul VideoLAN VLC media player" + +${LangFileString} Name_InstTypeRecommended "Recomandat" +${LangFileString} Name_InstTypeMinimum "Minim" +${LangFileString} Name_InstTypeFull "Întreg" + +${LangFileString} Action_OnArrivalDVD "Redă film DVD" +${LangFileString} Action_OnArrivalAudioCD "Redă CD audio" +${LangFileString} Action_OnArrivalVCDMovie "Redă film VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Redă film SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Redă fișiere video" +${LangFileString} Action_OnArrivalMusicFiles "Redă fișiere audio" +${LangFileString} Action_OnArrivalDVDAudio "Redă DVD audio" +${LangFileString} Action_OnArrivalBluray "Redare Blu-ray" + +${LangFileString} License_NextText "Acum sunteți conștienți de drepturile dumneavoastră. Faceți clic pe Următorul pentru a continua." + +${LangFileString} Detail_CheckProcesses "Se verifică procesele..." +${LangFileString} MessageBox_VLCRunning "VLC pare a fi în difuzate și va fi închis." +${LangFileString} MessageBox_VLCUnableToClose "Acest program de instalare nu a putut să închidă VLC-ul, vă rugăm să o faceți manual." +${LangFileString} MessageBox_InstallAborted "Instalare abandonată!" + +${LangFileString} Reinstall_Headline "Deja instalat" +${LangFileString} Reinstall_HeadlineInstall "Alegeți modul în care doriți să instalați VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Alegeți efectuarea opțiunii de întreținere" +${LangFileString} Reinstall_MessageOlder "O versiune mai veche a VLC este instalat pe sistem. Selectați operația pe care doriți să o efectuați și faceți clic pe Următorul pentru a continua." +${LangFileString} Reinstall_MessageNewer "O versiune mai nouă a VLC este deja instalată! Nu este recomandat să reveniți la o versiune mai veche. Selectați operația pe care doriți să o efectuați și faceți clic pe Următorul pentru a continua." +${LangFileString} Reinstall_MessageSame "VLC $ {VERSION} este deja instalat. Selectați operația pe care doriți să o efectuați și faceți clic pe Următorul pentru a continua." +${LangFileString} Reinstall_OptionUpgrade "Actualizare VLC folosind setările anterioare (recomandat)" +${LangFileString} Reinstall_OptionDowngrade "Revenire la versiune anterioare VLC folosind setările anterioare (recomandat)" +${LangFileString} Reinstall_OptionComponents "Adaugă/Elimină/Reinstalează componente" +${LangFileString} Reinstall_OptionAdvanced "Modificare setări (avansat)" +${LangFileString} Reinstall_OptionUninstall "Dezinstalează VLC" diff --git a/support/3rd_party/vlc/languages/RussianExtra.nsh b/support/3rd_party/vlc/languages/RussianExtra.nsh new file mode 100644 index 0000000..50916cd --- /dev/null +++ b/support/3rd_party/vlc/languages/RussianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Russian +${LangFileString} Name_Section01 "Медиаплеер (обязательно)" +${LangFileString} Name_Section02a "Ярлык в меню Пуск" +${LangFileString} Name_Section02b "Ярлык на рабочем столе" +${LangFileString} Name_Section34 "Веб-модули" +${LangFileString} Name_Section03 "Модуль Mozilla" +${LangFileString} Name_Section04 "Модуль ActiveX" +${LangFileString} Name_Section05 "Воспроизведение дисков" +${LangFileString} Name_Section06 "Привязки к типам файлов" +${LangFileString} Name_SectionGroupAudio "Аудиофайлы" +${LangFileString} Name_SectionGroupVideo "Видеофайлы" +${LangFileString} Name_SectionGroupOther "Другое" +${LangFileString} Name_Section07 "Контекстное меню" +${LangFileString} Name_Section08 "Сбросить настройки и кэш" + +${LangFileString} Desc_Section01 \ + "Медиаплеер как таковой" +${LangFileString} Desc_Section02a \ + "Добавить значки в меню Пуск для облегчения доступа" +${LangFileString} Desc_Section02b \ + "Добавить значки на рабочий стол для облегчения доступа" +${LangFileString} Desc_Section03 \ + "Модуль VLC Mozilla и Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Модуль VLC ActiveX" +${LangFileString} Desc_Section05 \ + "Регистрация воспроизведения CD и DVD" +${LangFileString} Desc_Section06 \ + "Назначить медиаплеер VLC приложением по умолчанию для заданного типа файлов" +${LangFileString} Desc_Section07 \ + "Добавить пункты контекстного меню ('Воспроизвести при помощи VLC' и 'Добавить в список воспроизведения VLC')" +${LangFileString} Desc_Section08 \ + "Удаляет настройки и кэш VLC от прошлых установок" + +${LangFileString} Name_Section91 "Удалить" +${LangFileString} Name_Section92 "Очистить настройки и кэш" + +${LangFileString} Desc_Section91 \ +"Удалить медиаплеер VLC и все его компоненты" +${LangFileString} Desc_Section92 \ +"Удаляет медиаплеер VLC и все его компоненты" + +${LangFileString} ShellAssociation_Play "Воспроизвести" +${LangFileString} ContextMenuEntry_PlayWith "Воспроизвести в VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Добавить в плейлист VLC" + +${LangFileString} Link_VisitWebsite "Посетить сайт VideoLAN медиаплеера VLC" + +${LangFileString} Name_InstTypeRecommended "Рекомендуемый" +${LangFileString} Name_InstTypeMinimum "Минимальный" +${LangFileString} Name_InstTypeFull "Полный" + +${LangFileString} Action_OnArrivalDVD "Воспроизвести DVD-фильм" +${LangFileString} Action_OnArrivalAudioCD "Воспроизвести аудио-CD" +${LangFileString} Action_OnArrivalVCDMovie "Воспроизвести VCD-фильм" +${LangFileString} Action_OnArrivalSVCDMovie "Воспроизвести SVCD-фильм" +${LangFileString} Action_OnArrivalVideoFiles "Воспроизвести видеофайлы" +${LangFileString} Action_OnArrivalMusicFiles "Воспроизвести аудиофайлы" +${LangFileString} Action_OnArrivalDVDAudio "Воспроизвести аудио-DVD" +${LangFileString} Action_OnArrivalBluray "Воспроизводить Blu-ray" + +${LangFileString} License_NextText "Теперь вы знаете о своих правах. Для продолжения нажмите Далее." + +${LangFileString} Detail_CheckProcesses "Проверка процессов..." +${LangFileString} MessageBox_VLCRunning "Похоже, VLC сейчас запущен, его придётся закрыть." +${LangFileString} MessageBox_VLCUnableToClose "Программа установки не смогла завершить VLC, пожалуйста, закройте его сами." +${LangFileString} MessageBox_InstallAborted "Установка прервана!" + +${LangFileString} Reinstall_Headline "Уже установлен" +${LangFileString} Reinstall_HeadlineInstall "Выберите вариант установки VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Выберите действие, которое вы хотите выполнить." +${LangFileString} Reinstall_MessageOlder "В вашей системе установлена более старая версия VLC. Выберите действие, которое вы хотите совершить, и нажмите Далее." +${LangFileString} Reinstall_MessageNewer "В вашей системе уже установлена более новая версия VLC! Возвращаться к старой версии не рекомендуется. Выберите действие, которое вы хотите совершить, и нажмите Далее для продолжения." +${LangFileString} Reinstall_MessageSame "Установлена версия VLC ${VERSION}. Выберите действие, которое вы хотите совершить, и нажмите Далее для продолжения." +${LangFileString} Reinstall_OptionUpgrade "Обновить VLC, используя предыдущие настройки (рекомендуется)" +${LangFileString} Reinstall_OptionDowngrade "Понизить версию VLC, используя предыдущие настройки (рекомендуется)" +${LangFileString} Reinstall_OptionComponents "Добавить/удалить/переустановить компоненты" +${LangFileString} Reinstall_OptionAdvanced "Изменить настройки (расширенный режим)" +${LangFileString} Reinstall_OptionUninstall "Удалить VLC" diff --git a/support/3rd_party/vlc/languages/ScotsGaelicExtra.nsh b/support/3rd_party/vlc/languages/ScotsGaelicExtra.nsh new file mode 100644 index 0000000..dd5641d --- /dev/null +++ b/support/3rd_party/vlc/languages/ScotsGaelicExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT ScotsGaelic +${LangFileString} Name_Section01 "Cluicheadair mheadhanan (riatanach)" +${LangFileString} Name_Section02a "Ath-ghoirid sa chlàr-taice tòiseachaidh" +${LangFileString} Name_Section02b "Ath-ghoirid air an deasg" +${LangFileString} Name_Section34 "Plugain-lìn" +${LangFileString} Name_Section03 "Plugan Mozilla" +${LangFileString} Name_Section04 "Plugan ActiveX" +${LangFileString} Name_Section05 "Cluich dhiosgan" +${LangFileString} Name_Section06 "Dàimhean nam faidhle" +${LangFileString} Name_SectionGroupAudio "Faidhlichean fuaime" +${LangFileString} Name_SectionGroupVideo "Faidhlichean video" +${LangFileString} Name_SectionGroupOther "Eile" +${LangFileString} Name_Section07 "Clàran-taice co-theacsail" +${LangFileString} Name_Section08 "Sguab às na roghainnean is an tasgadan" + +${LangFileString} Desc_Section01 \ + "Cluicheadair nam meadhanan e fhèin." +${LangFileString} Desc_Section02a \ + "Cuir ìomhaigheagan ris a' chlàr-taice tòiseachaidh airson grad-inntrigeadh" +${LangFileString} Desc_Section02b \ + "Cuir ìomhaigheagan air an deasg airson grad-inntrigeadh" +${LangFileString} Desc_Section03 \ + "Plugan VLC airson Mozilla is Firefox" +${LangFileString} Desc_Section04 \ + "Am plugan ActiveX" +${LangFileString} Desc_Section05 \ + "Clàradh airson cluich DVDan is CDan" +${LangFileString} Desc_Section06 \ + "Suidhichidh seo cluicheadair mheadhanan VLC mar an aplacaid bhunaiteach airson a leithid ud a dh'fhaidhle." +${LangFileString} Desc_Section07 \ + "Cuir buill cho-theacsail ris a' chlàr-taice ($\"Cluich le VLC$\" agus $\"Cuir ri liosta-chluiche VLC$\")" +${LangFileString} Desc_Section08 \ + "Sguabaidh seo às roghainnean is faidhlichean san tasgadan aig VLC a tha air fhàgail o stàlaidhean roimhe" + +${LangFileString} Name_Section91 "Dì-stàlaich" +${LangFileString} Name_Section92 "Sguab ås na roghainnean is an tasgadan" + +${LangFileString} Desc_Section91 \ +"Dì-stàlaich cluicheadair mheadhanan VLC agus a h-uile co-phàirt aige" +${LangFileString} Desc_Section92 \ +"Sguabaidh seo às na roghainnean aig VLC is faidhle sam bith san tasgadan aige" + +${LangFileString} ShellAssociation_Play "Cluich" +${LangFileString} ContextMenuEntry_PlayWith "Cluich le cluicheadair mheadhanan VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Cuir ri liosta-chluiche cluicheadair mheadhanan VLC" + +${LangFileString} Link_VisitWebsite "Tadhail air an làrach-lìn aig cluicheadair mheadhanan VLC le VideoLAN" + +${LangFileString} Name_InstTypeRecommended "Na mholamaid" +${LangFileString} Name_InstTypeMinimum "Uiread as lugha dheth" +${LangFileString} Name_InstTypeFull "Slàn" + +${LangFileString} Action_OnArrivalDVD "Cluich film DVD" +${LangFileString} Action_OnArrivalAudioCD "Cluich CD fuaime" +${LangFileString} Action_OnArrivalVCDMovie "Cluich film VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Cluich film SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Cluich faidhlichean video" +${LangFileString} Action_OnArrivalMusicFiles "Cluich faidhlichean fuaime" +${LangFileString} Action_OnArrivalDVDAudio "Cluich DVD fuaime" +${LangFileString} Action_OnArrivalBluray "Cluich Blu-ray" + +${LangFileString} License_NextText "Tha thu eòlach air do chòraichean a-nis. Briog air $\"Air adhart$\" airson leantainn air adhart." + +${LangFileString} Detail_CheckProcesses "A' sgrùdadh an adhartais..." +${LangFileString} MessageBox_VLCRunning "Tha coltas gu bheil VLC a' dol agus thèid a dhùnadh an-dràsta." +${LangFileString} MessageBox_VLCUnableToClose "Cha b' urrainn dhan stàlaichear VLC a dhùnadh, feuch is dùin e thu fhèin." +${LangFileString} MessageBox_InstallAborted "Sguireadh dhen stàladh!" + +${LangFileString} Reinstall_Headline "Air a stàladh mu thràth" +${LangFileString} Reinstall_HeadlineInstall "Cuir romhad mar a stàlaichear VLC dhut." +${LangFileString} Reinstall_HeadlineMaintenance "Tagh an obair-ghlèidhidh a tha ri dhèanamh." +${LangFileString} Reinstall_MessageOlder "Tha tionndadh nas sine de VLC stàlaichte air an t-siostam agad. Tagh an gnìomh a bu toigh leat dèanamh is briog air $\"Air adhart$\" gus leantainn air adhart." +${LangFileString} Reinstall_MessageNewer "Tha tionndadh nas ùire de VLC stàlaichte mu thràth! Cha mholamaid dhut tionndadh nas sine a chur 'na àite. Tagh an gnìomh a bu toigh leat dèanamh is briog air $\"Air adhart$\" gus leantainn air adhart." +${LangFileString} Reinstall_MessageSame "Tha VLC ${VERSION} air a stàladh mu thràth. Tagh an gnìomh a bu toigh leat dèanamh is briog air $\"Air adhart$\" gus leantainn air adhart." +${LangFileString} Reinstall_OptionUpgrade "Àrdaich VLC, a' cleachdadh nan seann-roghainnean (mholamaid seo)" +${LangFileString} Reinstall_OptionDowngrade "Ìslich VLC a' cleachdadh nan seann-roghainnean (mholamaid seo)" +${LangFileString} Reinstall_OptionComponents "Cuir ris/Thoir air falbh/Ath-stàlaich co-phàirtean" +${LangFileString} Reinstall_OptionAdvanced "Atharraich na roghainnean (adhartach)" +${LangFileString} Reinstall_OptionUninstall "Dì-stàlaich VLC" diff --git a/support/3rd_party/vlc/languages/SerbianExtra.nsh b/support/3rd_party/vlc/languages/SerbianExtra.nsh new file mode 100644 index 0000000..e28752a --- /dev/null +++ b/support/3rd_party/vlc/languages/SerbianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Serbian +${LangFileString} Name_Section01 "Медијски плејер (обавезно)" +${LangFileString} Name_Section02a "Пречица у менију „Старт“" +${LangFileString} Name_Section02b "Пречица на радној површини" +${LangFileString} Name_Section34 "Веб додаци" +${LangFileString} Name_Section03 "Додатак за Firefox" +${LangFileString} Name_Section04 "ActiveX додатак" +${LangFileString} Name_Section05 "Репродукција дискова" +${LangFileString} Name_Section06 "Повезаности датотека" +${LangFileString} Name_SectionGroupAudio "Аудио-записи" +${LangFileString} Name_SectionGroupVideo "Видео-записи" +${LangFileString} Name_SectionGroupOther "Друго" +${LangFileString} Name_Section07 "Контекстуални менији" +${LangFileString} Name_Section08 "Обриши поставке и кеш" + +${LangFileString} Desc_Section01 \ + "Сâм медијски плејер" +${LangFileString} Desc_Section02a \ + "Додаје иконе за брз приступ у мени „Старт“" +${LangFileString} Desc_Section02b \ + "Додаје икону за брз приступ на радну површину" +${LangFileString} Desc_Section03 \ + "Додатак за Firefox" +${LangFileString} Desc_Section04 \ + "ActiveX додатак" +${LangFileString} Desc_Section05 \ + "Регистровање DVD и CD репродукције" +${LangFileString} Desc_Section06 \ + "Поставља VLC Media Player као подразумевани програм за наведени тип датотека" +${LangFileString} Desc_Section07 \ + "Додаје ставке у контекстуални мени („Репродукуј помоћу VLC-а“ и „Додај у плејлисту VLC-а“)" +${LangFileString} Desc_Section08 \ + "Брише датотеке са поставкама и кешом VLC Media Player-а које су остале од претходних инсталација" + +${LangFileString} Name_Section91 "Деинсталирај" +${LangFileString} Name_Section92 "Обриши поставке и кеш" + +${LangFileString} Desc_Section91 \ +"Деинсталирај VLC Media Player и све његове компоненте" +${LangFileString} Desc_Section92 \ +"Брише датотеке са поставкама и кешом VLC Media Player-а" + +${LangFileString} ShellAssociation_Play "Репродукуј" +${LangFileString} ContextMenuEntry_PlayWith "Репродукуј помоћу VLC Media Player-а" +${LangFileString} ContextMenuEntry_AddToPlaylist "Додај у плејлисту VLC Media Player-а" + +${LangFileString} Link_VisitWebsite "Посети сајт VLC Media Player-а" + +${LangFileString} Name_InstTypeRecommended "Препоручено" +${LangFileString} Name_InstTypeMinimum "Минимална" +${LangFileString} Name_InstTypeFull "Пуна" + +${LangFileString} Action_OnArrivalDVD "Репродукуј DVD филм" +${LangFileString} Action_OnArrivalAudioCD "Репродукуј аудио CD" +${LangFileString} Action_OnArrivalVCDMovie "Репродукуј VCD филм" +${LangFileString} Action_OnArrivalSVCDMovie "Репродукуј SVCD филм" +${LangFileString} Action_OnArrivalVideoFiles "Репродукуј видео-записе" +${LangFileString} Action_OnArrivalMusicFiles "Репродукуј аудио-записе" +${LangFileString} Action_OnArrivalDVDAudio "Репродукуј аудио DVD" +${LangFileString} Action_OnArrivalBluray "Репродукуј Blu-ray" + +${LangFileString} License_NextText "Сада сте свесни својих права. Кликните на „У реду“ да бисте наставили." + +${LangFileString} Detail_CheckProcesses "Проверавам процесе…" +${LangFileString} MessageBox_VLCRunning "Изгледа да је VLC покренут. Сада ће бити затворен." +${LangFileString} MessageBox_VLCUnableToClose "Инсталациони програм не може да затвори VLC. Учините то ручно." +${LangFileString} MessageBox_InstallAborted "Инсталација је прекинута!" + +${LangFileString} Reinstall_Headline "Већ је инсталиран" +${LangFileString} Reinstall_HeadlineInstall "Изаберите како желите да инсталирате VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Изаберите опцију одржавања коју желите да извршите." +${LangFileString} Reinstall_MessageOlder "На вашем систему је инсталирана старија верзија VLC-а. Изаберите жељену радњу и кликните на „Следеће“ да бисте наставили." +${LangFileString} Reinstall_MessageNewer "Инсталирана је новија верзија VLC-а. Не препоручујемо вам да се враћате на старију верзију. Изаберите жељену радњу и кликните на „Следеће“ да бисте наставили." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} је већ инсталиран. Изаберите жељену радњу и кликните на „Следеће“ да бисте наставили." +${LangFileString} Reinstall_OptionUpgrade "Надогради VLC помоћу претходних поставки (препоручује се)" +${LangFileString} Reinstall_OptionDowngrade "Уназади VLC помоћу претходних поставки (препоручује се)" +${LangFileString} Reinstall_OptionComponents "Додај, уклони или поново инсталирај компоненте" +${LangFileString} Reinstall_OptionAdvanced "Промени поставке (напредно)" +${LangFileString} Reinstall_OptionUninstall "Деинсталирај VLC" diff --git a/support/3rd_party/vlc/languages/SimpChineseExtra.nsh b/support/3rd_party/vlc/languages/SimpChineseExtra.nsh new file mode 100644 index 0000000..92a5765 --- /dev/null +++ b/support/3rd_party/vlc/languages/SimpChineseExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT SimpChinese +${LangFileString} Name_Section01 "媒体播放器 (必需)" +${LangFileString} Name_Section02a "开始菜单快捷方式" +${LangFileString} Name_Section02b "桌面快捷方式" +${LangFileString} Name_Section34 "网页浏览器插件" +${LangFileString} Name_Section03 "Mozilla 插件" +${LangFileString} Name_Section04 "ActiveX 插件" +${LangFileString} Name_Section05 "光盘回放" +${LangFileString} Name_Section06 "文件类型关联" +${LangFileString} Name_SectionGroupAudio "音频文件" +${LangFileString} Name_SectionGroupVideo "视频文件" +${LangFileString} Name_SectionGroupOther "其他" +${LangFileString} Name_Section07 "右键快捷菜单" +${LangFileString} Name_Section08 "删除偏好设置与缓存" + +${LangFileString} Desc_Section01 \ + "媒体播放器自身" +${LangFileString} Desc_Section02a \ + "将图标添加到您的开始菜单以便访问" +${LangFileString} Desc_Section02b \ + "将图标添加到您的桌面以便访问" +${LangFileString} Desc_Section03 \ + "VLC Mozilla 与 Mozilla Firefox 插件" +${LangFileString} Desc_Section04 \ + "VLC ActiveX 插件" +${LangFileString} Desc_Section05 \ + "DVD 与 CD 回放功能注册" +${LangFileString} Desc_Section06 \ + "将 VLC media player 设为指定文件类型的默认程序" +${LangFileString} Desc_Section07 \ + "添加快捷菜单项 (「使用 VLC 播放」与「添加到 VLC 播放列表」)" +${LangFileString} Desc_Section08 \ + "删除先前安装版本所留下的 VLC media player 偏好设置与缓存文件" + +${LangFileString} Name_Section91 "卸载" +${LangFileString} Name_Section92 "删除偏好设置与缓存" + +${LangFileString} Desc_Section91 \ +"卸载 VLC media player 及其全部组件" +${LangFileString} Desc_Section92 \ +"删除 VLC media player 首选项与缓存文件" + +${LangFileString} ShellAssociation_Play "播放" +${LangFileString} ContextMenuEntry_PlayWith "使用 VLC media player 播放" +${LangFileString} ContextMenuEntry_AddToPlaylist "添加到 VLC media player 播放列表" + +${LangFileString} Link_VisitWebsite "访问 VideoLAN VLC media player 网站" + +${LangFileString} Name_InstTypeRecommended "推荐" +${LangFileString} Name_InstTypeMinimum "最小" +${LangFileString} Name_InstTypeFull "完整" + +${LangFileString} Action_OnArrivalDVD "播放 DVD 影片" +${LangFileString} Action_OnArrivalAudioCD "播放音频 CD" +${LangFileString} Action_OnArrivalVCDMovie "播放 VCD 影片" +${LangFileString} Action_OnArrivalSVCDMovie "播放 SVCD 影片" +${LangFileString} Action_OnArrivalVideoFiles "播放视频文件" +${LangFileString} Action_OnArrivalMusicFiles "播放音频文件" +${LangFileString} Action_OnArrivalDVDAudio "播放音频 DVD" +${LangFileString} Action_OnArrivalBluray "播放蓝光光盘" + +${LangFileString} License_NextText "您现在已经了解自己拥有的权利了。请点击“下一步”继续。" + +${LangFileString} Detail_CheckProcesses "正在检查进程列表..." +${LangFileString} MessageBox_VLCRunning "VLC 似乎仍在运行当中,我们现在将关闭它。" +${LangFileString} MessageBox_VLCUnableToClose "安装程序无法自动关闭 VLC,请手动操作。" +${LangFileString} MessageBox_InstallAborted "安装已中止!" + +${LangFileString} Reinstall_Headline "已安装" +${LangFileString} Reinstall_HeadlineInstall "请选择您希望如何安装 VLC。" +${LangFileString} Reinstall_HeadlineMaintenance "请选择要执行的维护选项。" +${LangFileString} Reinstall_MessageOlder "您的系统中已经安装了较旧版本的 VLC。请选择您希望执行的操作,并点击“下一步”继续。" +${LangFileString} Reinstall_MessageNewer "已安装较新版本的 VLC! 建议您不要降级安装旧版本。请选择您希望执行的操作,并点击“下一步”继续。" +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} 已经安装。请选择您希望执行的操作,并点击“下一步”继续。" +${LangFileString} Reinstall_OptionUpgrade "保留先前的设置项,升级 VLC (推荐)" +${LangFileString} Reinstall_OptionDowngrade "保留先前的设置项,降级 VLC (推荐)" +${LangFileString} Reinstall_OptionComponents "添加/移除/重新安装组件" +${LangFileString} Reinstall_OptionAdvanced "更改设置 (高级)" +${LangFileString} Reinstall_OptionUninstall "卸载 VLC" diff --git a/support/3rd_party/vlc/languages/SlovakExtra.nsh b/support/3rd_party/vlc/languages/SlovakExtra.nsh new file mode 100644 index 0000000..f283864 --- /dev/null +++ b/support/3rd_party/vlc/languages/SlovakExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Slovak +${LangFileString} Name_Section01 "Media Player (nutná súčasť)" +${LangFileString} Name_Section02a "Odkaz v menu Štart" +${LangFileString} Name_Section02b "Odkaz na pracovnej ploche" +${LangFileString} Name_Section34 "Prídavné moduly pre web" +${LangFileString} Name_Section03 "Prídavný modul pre prehliadač Mozilla" +${LangFileString} Name_Section04 "Prídavný modul pre ActiveX" +${LangFileString} Name_Section05 "Prehrávanie diskov" +${LangFileString} Name_Section06 "Asociácie s typmi súborov" +${LangFileString} Name_SectionGroupAudio "Zvukové súbory" +${LangFileString} Name_SectionGroupVideo "Súbory s videom" +${LangFileString} Name_SectionGroupOther "Ostatné" +${LangFileString} Name_Section07 "Kontextové menu" +${LangFileString} Name_Section08 "Vymazať nastavenia a vyrovnávaciu pamäť" + +${LangFileString} Desc_Section01 \ + "Samotný Media Player" +${LangFileString} Desc_Section02a \ + "Pridá ikony do menu Štart, pre ľahší prístup" +${LangFileString} Desc_Section02b \ + "Pridá ikonu na pracovnú plochu, pre ľahký prístup" +${LangFileString} Desc_Section03 \ + "Prídavný modul VLC pre prehliadač Mozilla a Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Prídavný modul VLC pre ActiveX" +${LangFileString} Desc_Section05 \ + "Registrácia programu ako prehrávača DVD a CD" +${LangFileString} Desc_Section06 \ + "Nastaví prehrávač VLC media player ako predvolenú aplikáciu pre špecifikovaný typ súboru" +${LangFileString} Desc_Section07 \ + "Pridá položky do kontextového menu ('Prehrať v programe VLC' a 'Pridať do playlistu programu VLC')" +${LangFileString} Desc_Section08 \ + "Vymaže nastavenia VLC media player a súbory vyrovnávacej pamäte minulých inštalácií" + +${LangFileString} Name_Section91 "Odinštalovať" +${LangFileString} Name_Section92 "Vymazať nastavenia a vyrovnávaciu pamäť" + +${LangFileString} Desc_Section91 \ +"Odinštalovať program VLC media player a všetky jeho súčasti" +${LangFileString} Desc_Section92 \ +"Vymaže nastavenia programu VLC media player a súbory vo vyrovnávacej pamäti" + +${LangFileString} ShellAssociation_Play "Prehrať" +${LangFileString} ContextMenuEntry_PlayWith "Prehrať v programe VLC media player" +${LangFileString} ContextMenuEntry_AddToPlaylist "Pridať do playlistu VLC media player" + +${LangFileString} Link_VisitWebsite "Navštíviť webovú stránku programu VideoLAN VLC media player" + +${LangFileString} Name_InstTypeRecommended "Odporúčané" +${LangFileString} Name_InstTypeMinimum "Minimum" +${LangFileString} Name_InstTypeFull "Úplné" + +${LangFileString} Action_OnArrivalDVD "Prehrať film na DVD" +${LangFileString} Action_OnArrivalAudioCD "Prehrať zvukové CD" +${LangFileString} Action_OnArrivalVCDMovie "Prehrať film na VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Prehrať film na SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Prehrať súbory s videom" +${LangFileString} Action_OnArrivalMusicFiles "Prehrať zvukové súbory" +${LangFileString} Action_OnArrivalDVDAudio "Prehrať zvukové DVD" +${LangFileString} Action_OnArrivalBluray "Prehrať Blu-ray" + +${LangFileString} License_NextText "Teraz ste informovaní o svojich právach. Pre pokračovanie kliknite na tlačidlo Ďalej." + +${LangFileString} Detail_CheckProcesses "Kontrolujú sa procesy..." +${LangFileString} MessageBox_VLCRunning "Zdá sa, že program VLC je práve spustený a preto bude ukončený." +${LangFileString} MessageBox_VLCUnableToClose "Tento inštalátor nemohol ukončiť program VLC, prosím urobte to manuálne." +${LangFileString} MessageBox_InstallAborted "Inštalácia bola prerušená!" + +${LangFileString} Reinstall_Headline "Už nainštalované" +${LangFileString} Reinstall_HeadlineInstall "Vyberte si, ako chcete nainštalovať VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Vyberte si možnosť pre údržbu." +${LangFileString} Reinstall_MessageOlder "Vo vašom počítači je nainštalovaná staršia verzia programu VLC. Vyberte si úkon, ktorý chcete vykonať a pokračujte kliknutím na tlačidlo Ďalej." +${LangFileString} Reinstall_MessageNewer "Už je nainštalovaná novšia verzia programu VLC! Neodporúča sa návrat k staršej verzii programu. Vyberte si úkon, ktorý chcete vykonať a pokračujte kliknutím na tlačidlo Ďalej." +${LangFileString} Reinstall_MessageSame "Už je nainštalovaný program VLC ${VERSION}. Vyberte si úkon, ktorý chcete urobiť a pokračujte kliknutím na tlačidlo Ďalej." +${LangFileString} Reinstall_OptionUpgrade "Aktualizovať VLC s použitím predchádzajúcich nastavení (odporúča sa)" +${LangFileString} Reinstall_OptionDowngrade "Prejsť na staršiu verziu VLC, s použitím predchádzajúcich nastavení (odporúča sa)" +${LangFileString} Reinstall_OptionComponents "Pridať/Odstrániť/Preinštalovať súčasti" +${LangFileString} Reinstall_OptionAdvanced "Zmeniť nastavenia (pokročilé)" +${LangFileString} Reinstall_OptionUninstall "Odinštalovať VLC" diff --git a/support/3rd_party/vlc/languages/SlovenianExtra.nsh b/support/3rd_party/vlc/languages/SlovenianExtra.nsh new file mode 100644 index 0000000..ef7298b --- /dev/null +++ b/support/3rd_party/vlc/languages/SlovenianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Slovenian +${LangFileString} Name_Section01 "Predvajalnik predstavnih vsebin (obvezno)" +${LangFileString} Name_Section02a "Bližnjica v meniju Start" +${LangFileString} Name_Section02b "Bližnjica na namizju" +${LangFileString} Name_Section34 "Spletni vstavki" +${LangFileString} Name_Section03 "Vstavek Mozilla" +${LangFileString} Name_Section04 "Vstavek ActiveX" +${LangFileString} Name_Section05 "Predvajanje nosilcev CD in DVD" +${LangFileString} Name_Section06 "Povezave z vrstami datotek" +${LangFileString} Name_SectionGroupAudio "Zvokovne datoteke" +${LangFileString} Name_SectionGroupVideo "Video datoteke" +${LangFileString} Name_SectionGroupOther "Drugo" +${LangFileString} Name_Section07 "Vsebinski meniji" +${LangFileString} Name_Section08 "Izbriši nastavitve in predpomnilnik" + +${LangFileString} Desc_Section01 \ + "Sam predvajalnik vsebin" +${LangFileString} Desc_Section02a \ + "Za lažji dostop v začetni meni postavi ikone" +${LangFileString} Desc_Section02b \ + "Za lažji dostop na vaše namizje postavi ikono" +${LangFileString} Desc_Section03 \ + "Dodatek VLC Mozilla in Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Vstavek ActiveX VLC" +${LangFileString} Desc_Section05 \ + "Registracija predvajanja DVD in CD" +${LangFileString} Desc_Section06 \ + "Predvajalnik VLC naj bo privzeti program za navedeno vrsto datotek" +${LangFileString} Desc_Section07 \ + "Dodaj ukaze v vsebinski meni (»Predvajaj z VLC« in »Dodaj v predvajalni seznam VLC«)" +${LangFileString} Desc_Section08 \ + "Izbriše nastavitve predvajalnika VLC in datoteke predpomnilnika, ki so tam ostale od prejšnjih namestitev" + +${LangFileString} Name_Section91 "Odstrani namestitev" +${LangFileString} Name_Section92 "Izbriši nastavitve in predpomnilnik" + +${LangFileString} Desc_Section91 \ +"Odstrani predvajalnik VLC in vse njegove dele" +${LangFileString} Desc_Section92 \ +"Izbriše nastavitve predvajalnika VLC in datoteke predpomnilnika" + +${LangFileString} ShellAssociation_Play "Predvajaj" +${LangFileString} ContextMenuEntry_PlayWith "Predvajaj s predvajalnikom VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Dodaj na VLC seznam predvajanja" + +${LangFileString} Link_VisitWebsite "Obišči spletišče predvajalnika VideoLAN VLC" + +${LangFileString} Name_InstTypeRecommended "Priporočena" +${LangFileString} Name_InstTypeMinimum "Osnovna" +${LangFileString} Name_InstTypeFull "Polna" + +${LangFileString} Action_OnArrivalDVD "Predvajaj filmski DVD" +${LangFileString} Action_OnArrivalAudioCD "Predvajaj zvočni CD" +${LangFileString} Action_OnArrivalVCDMovie "Predvajaj film VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Predvajaj film SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Predvajaj video datoteke" +${LangFileString} Action_OnArrivalMusicFiles "Predvajaj zvokovne datoteke" +${LangFileString} Action_OnArrivalDVDAudio "Predvajaj zvočni DVD" +${LangFileString} Action_OnArrivalBluray "Predvajaj Blu-ray" + +${LangFileString} License_NextText "Sedaj ste seznanjeni z dovoljenji in vašimi pravicami in lahko nadaljujete." + +${LangFileString} Detail_CheckProcesses "Preverjanje opravil ..." +${LangFileString} MessageBox_VLCRunning "VLC je zagnan in bo zdaj zaprt." +${LangFileString} MessageBox_VLCUnableToClose "Namestitvenega programa VLC ni mogoče samodejno zapreti. To je treba storiti ročno." +${LangFileString} MessageBox_InstallAborted "Namestitev je prekinjena!" + +${LangFileString} Reinstall_Headline "Že nameščeno" +${LangFileString} Reinstall_HeadlineInstall "Izberite vrsto namestitve VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Izberite funkcijo vzdrževanja, ki nej se izvede." +${LangFileString} Reinstall_MessageOlder "Na vaš sistem je nameščena starejša različica VLC. Izberite opravilo, ki ga želite izvršiti, in kliknite Naprej za nadaljevanje." +${LangFileString} Reinstall_MessageNewer "Nameščena je že novejša različica VLC! Povrnitev na prejšnjo različico ni priporočena. Izberite želeno opravilo in kliknite Naprej za nadaljevanje." +${LangFileString} Reinstall_MessageSame "Različica VLC ${VERSION} je že nameščena. Izberite opravilo, ki ga želite izvršiti, in kliknite Naprej za nadaljevanje." +${LangFileString} Reinstall_OptionUpgrade "Nadgradi VLC z obstoječimi nastavitvami (priporočeno)" +${LangFileString} Reinstall_OptionDowngrade "Povrni starejšo različico VLC z obstoječimi nastavitvami (priporočeno)" +${LangFileString} Reinstall_OptionComponents "Dodaj/odstrani/ponovno namesti dele predvajalnika VLC" +${LangFileString} Reinstall_OptionAdvanced "Spremeni nastavitve (napredno)" +${LangFileString} Reinstall_OptionUninstall "Odstrani namestitev VLC" diff --git a/support/3rd_party/vlc/languages/SpanishExtra.nsh b/support/3rd_party/vlc/languages/SpanishExtra.nsh new file mode 100644 index 0000000..cda50c8 --- /dev/null +++ b/support/3rd_party/vlc/languages/SpanishExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Spanish +${LangFileString} Name_Section01 "Reproductor (necesario)" +${LangFileString} Name_Section02a "Acceso directo en el menú Inicio" +${LangFileString} Name_Section02b "Acceso directo en el Escritorio" +${LangFileString} Name_Section34 "Complementos web" +${LangFileString} Name_Section03 "Complemento de Mozilla" +${LangFileString} Name_Section04 "Complemento de ActiveX" +${LangFileString} Name_Section05 "Reproducción de discos" +${LangFileString} Name_Section06 "Asociaciones de tipos de archivo" +${LangFileString} Name_SectionGroupAudio "Archivos de audio" +${LangFileString} Name_SectionGroupVideo "Archivos de vídeo" +${LangFileString} Name_SectionGroupOther "Otros" +${LangFileString} Name_Section07 "Menús contextuales" +${LangFileString} Name_Section08 "Borrar caché y preferencias" + +${LangFileString} Desc_Section01 \ + "El propio reproductor" +${LangFileString} Desc_Section02a \ + "Añade iconos al menú Inicio para un fácil acceso" +${LangFileString} Desc_Section02b \ + "Añade iconos al Escritorio para un fácil acceso" +${LangFileString} Desc_Section03 \ + "El complemento VLC de Mozilla y Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "El complemento VLC de ActiveX" +${LangFileString} Desc_Section05 \ + "Registro de reproducción DVD y CD" +${LangFileString} Desc_Section06 \ + "Establecer el Reproductor multimedia VLC como la aplicación predeterminada para el tipo de archivo especificado" +${LangFileString} Desc_Section07 \ + "Añade opciones en el menú contextual («Reproducir con VLC» y «Añadir a la lista de VLC»" +${LangFileString} Desc_Section08 \ + "Borra los archivos de caché y preferencias del reproductor multimedia VLC de anteriores instalaciones" + +${LangFileString} Name_Section91 "Desinstalar" +${LangFileString} Name_Section92 "Borrar caché y preferencias" + +${LangFileString} Desc_Section91 \ +"Desinstalar el reproductor multimedia VLC y todos sus componentes" +${LangFileString} Desc_Section92 \ +"Borra los archivos de caché y preferencias del reproductor multimedia VLC" + +${LangFileString} ShellAssociation_Play "Reproducir" +${LangFileString} ContextMenuEntry_PlayWith "Reproducir con VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Añadir a la lista de VLC" + +${LangFileString} Link_VisitWebsite "Visita el sitio web del reproductor multimedia VideoLAN VLC" + +${LangFileString} Name_InstTypeRecommended "Recomendada" +${LangFileString} Name_InstTypeMinimum "Mínima" +${LangFileString} Name_InstTypeFull "Completa" + +${LangFileString} Action_OnArrivalDVD "Reproducir película DVD" +${LangFileString} Action_OnArrivalAudioCD "Reproducir CD de audio" +${LangFileString} Action_OnArrivalVCDMovie "Reproducir película VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Reproducir película SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Reproducir archivos de vídeo" +${LangFileString} Action_OnArrivalMusicFiles "Reproducir archivos de audio" +${LangFileString} Action_OnArrivalDVDAudio "Reproducir DVD de audio" +${LangFileString} Action_OnArrivalBluray "Reproducir Blu-ray" + +${LangFileString} License_NextText "Ahora conoce sus derechos. Pulse Siguiente para continuar." + +${LangFileString} Detail_CheckProcesses "Comprobando procesos..." +${LangFileString} MessageBox_VLCRunning "Aparentemente VLC se está ejecutado y será cerrado ahora." +${LangFileString} MessageBox_VLCUnableToClose "Este instalador fué incapaz de cerrar VLC, por favor, hágalo usted." +${LangFileString} MessageBox_InstallAborted "Instalación cancelada" + +${LangFileString} Reinstall_Headline "Ya está instalado" +${LangFileString} Reinstall_HeadlineInstall "Seleccione como quiere instalar VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Seleccione la opción de mantenimiento a realizar." +${LangFileString} Reinstall_MessageOlder "Está instalada una versión más antigua de VLC en su sistema. Seleccione la operación que quiere realizar y pulse Siguiente para continuar." +${LangFileString} Reinstall_MessageNewer "Está instalada una versión más reciente de VLC. No se recomienda que desactualice a una versión más antigua. Seleccione la operación que quiere realizar y pulse Siguiente para continuar." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} ya está instalado. Seleccione la operación que quiere realizar y pulse Siguiente para continuar." +${LangFileString} Reinstall_OptionUpgrade "Actualizar VLC usando las preferencias siguientes (recomendado)" +${LangFileString} Reinstall_OptionDowngrade "Desactualizar VLC usando las preferencias anteriores (recomendado)" +${LangFileString} Reinstall_OptionComponents "Añadir/Eliminar/Reinstalar componentes" +${LangFileString} Reinstall_OptionAdvanced "Cambiar preferencias (avanzado)" +${LangFileString} Reinstall_OptionUninstall "Desinstalar VLC" diff --git a/support/3rd_party/vlc/languages/SwedishExtra.nsh b/support/3rd_party/vlc/languages/SwedishExtra.nsh new file mode 100644 index 0000000..0d6924c --- /dev/null +++ b/support/3rd_party/vlc/languages/SwedishExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Swedish +${LangFileString} Name_Section01 "Mediaspelare (nödvändig)" +${LangFileString} Name_Section02a "Genväg på startmenyn" +${LangFileString} Name_Section02b "Genväg på skrivbordet" +${LangFileString} Name_Section34 "Insticksmoduler" +${LangFileString} Name_Section03 "Mozilla-tillägg" +${LangFileString} Name_Section04 "ActiveX-tillägg" +${LangFileString} Name_Section05 "Skivuppspelning" +${LangFileString} Name_Section06 "Filtypsassociationer" +${LangFileString} Name_SectionGroupAudio "Ljudfiler" +${LangFileString} Name_SectionGroupVideo "Videofiler" +${LangFileString} Name_SectionGroupOther "Övrigt" +${LangFileString} Name_Section07 "Högerklicksmenyer" +${LangFileString} Name_Section08 "Radera inställningar och cache" + +${LangFileString} Desc_Section01 \ + "Själva mediaspelaren" +${LangFileString} Desc_Section02a \ + "Lägger till ikoner till din startmeny för enkel åtkomst" +${LangFileString} Desc_Section02b \ + "Lägger till en ikon till ditt skrivbord för enkel åtkomst" +${LangFileString} Desc_Section03 \ + "VLC-insticksmodul för Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "VLC-insticksmodul för ActiveX" +${LangFileString} Desc_Section05 \ + "Uppspelningsregistrering för DVD och CD" +${LangFileString} Desc_Section06 \ + "Ställer in VLC media player som standardprogram för de valda filtyperna" +${LangFileString} Desc_Section07 \ + "Lägger till objekt i högerklicksmenyn ($\"Spela upp i VLC media player$\" och $\"Lägg till i VLC media player-listan$\")" +${LangFileString} Desc_Section08 \ + "Raderar inställningar och cachefiler som lämnats kvar från tidigare installationer av VLC media player" + +${LangFileString} Name_Section91 "Avinstallera" +${LangFileString} Name_Section92 "Radera inställningar och cache" + +${LangFileString} Desc_Section91 \ +"Avinstallera VLC media player och alla dess komponenter" +${LangFileString} Desc_Section92 \ +"Raderar VLC media players inställningar och cachefiler" + +${LangFileString} ShellAssociation_Play "Spela upp" +${LangFileString} ContextMenuEntry_PlayWith "Spela upp i VLC media player" +${LangFileString} ContextMenuEntry_AddToPlaylist "Lägg till i VLC media player-listan" + +${LangFileString} Link_VisitWebsite "Besök VideoLANs webbsida för VLC media player" + +${LangFileString} Name_InstTypeRecommended "Rekommenderad" +${LangFileString} Name_InstTypeMinimum "Minimal" +${LangFileString} Name_InstTypeFull "Fullständig" + +${LangFileString} Action_OnArrivalDVD "Spela upp DVD-film" +${LangFileString} Action_OnArrivalAudioCD "Spela upp ljud-CD" +${LangFileString} Action_OnArrivalVCDMovie "Spela upp VCD-film" +${LangFileString} Action_OnArrivalSVCDMovie "Spela upp SVCD-film" +${LangFileString} Action_OnArrivalVideoFiles "Spela upp videofiler" +${LangFileString} Action_OnArrivalMusicFiles "Spela upp ljudfiler" +${LangFileString} Action_OnArrivalDVDAudio "Spela upp ljud-DVD" +${LangFileString} Action_OnArrivalBluray "Spela upp Blu-ray" + +${LangFileString} License_NextText "Du är nu medveten om dina rättigheter. Klicka på Nästa för att fortsätta." + +${LangFileString} Detail_CheckProcesses "Kontrollerar processer..." +${LangFileString} MessageBox_VLCRunning "Det verkar som att VLC körs och kommer nu att stängas." +${LangFileString} MessageBox_VLCUnableToClose "Denna installation kunde inte stänga VLC, var god gör det manuellt." +${LangFileString} MessageBox_InstallAborted "Installationen avbröts!" + +${LangFileString} Reinstall_Headline "Redan installerad" +${LangFileString} Reinstall_HeadlineInstall "Välj hur du vill installera VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Välj ett underhållsalternativ att utföra." +${LangFileString} Reinstall_MessageOlder "En äldre version av VLC är installerad på ditt system. Välj åtgärden du vill utföra och klicka på Nästa för att fortsätta." +${LangFileString} Reinstall_MessageNewer "En nyare version av VLC är redan installerad! Det rekommenderas inte att du nedgraderar till en äldre version. Välj åtgärden du vill utföra och klicka på Nästa för att fortsätta." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} är redan installerad. Välj den åtgärd du vill utföra och klicka på Nästa för att fortsätta." +${LangFileString} Reinstall_OptionUpgrade "Uppgradera VLC med tidigare inställningar (rekommenderas)" +${LangFileString} Reinstall_OptionDowngrade "Nedgradera VLC med tidigare inställningar (rekommenderas)" +${LangFileString} Reinstall_OptionComponents "Lägg till/Ta bort/Ominstallera komponenter" +${LangFileString} Reinstall_OptionAdvanced "Ändra inställningar (avancerat)" +${LangFileString} Reinstall_OptionUninstall "Avinstallera VLC" diff --git a/support/3rd_party/vlc/languages/ThaiExtra.nsh b/support/3rd_party/vlc/languages/ThaiExtra.nsh new file mode 100644 index 0000000..b0691e6 --- /dev/null +++ b/support/3rd_party/vlc/languages/ThaiExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Thai +${LangFileString} Name_Section01 "โปรแกรมเล่นสื่อ (จำเป็นต้องเลือก)" +${LangFileString} Name_Section02a "ทางลัดเมนู $\"เริ่ม$\"" +${LangFileString} Name_Section02b "ทางลัดเดสก์ท็อป" +${LangFileString} Name_Section34 "ปลั๊กอิน Web" +${LangFileString} Name_Section03 "ปลั๊กอิน Mozilla" +${LangFileString} Name_Section04 "ปลั๊กอิน ActiveX" +${LangFileString} Name_Section05 "การเล่นแผ่นดิสก์" +${LangFileString} Name_Section06 "การเชื่อมโยงชนิดไฟล์" +${LangFileString} Name_SectionGroupAudio "ไฟล์เสียง" +${LangFileString} Name_SectionGroupVideo "ไฟล์วิดีโอ" +${LangFileString} Name_SectionGroupOther "อื่นๆ" +${LangFileString} Name_Section07 "เมนูบริบท" +${LangFileString} Name_Section08 "ลบการตั้งค่าและแคช" + +${LangFileString} Desc_Section01 \ + "ปลั๊กอินของตัวเล่นสื่อเอง" +${LangFileString} Desc_Section02a \ + "นำไอคอนไว้ตรงเมนู $\"เริ่ม$\" ของคุณ เพื่อให้ง่ายต่อการเข้าใช้งาน" +${LangFileString} Desc_Section02b \ + "นำไอคอนไว้ตรงเดสก์ท็อปของคุณ เพื่อให้ง่ายต่อการเข้าใช้งาน" +${LangFileString} Desc_Section03 \ + "ปลั๊กอินของ VLC Mozilla และ Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "ปลั๊กอินของ VLC ActiveX" +${LangFileString} Desc_Section05 \ + "กำหนดการใช้งานการเล่น DVD และ CD" +${LangFileString} Desc_Section06 \ + "ตั้งโปรแกรมเล่นสื่อ VLC ให้เป็นแอปพลิเคชันเริ่มต้นสำหรับชนิดไฟล์ที่ระบุ" +${LangFileString} Desc_Section07 \ + "เพิ่มรายการเมนูบริบท ('เล่นด้วย VLC' และ 'เพิ่มลงในเพลย์ลิสต์ของ VLC')" +${LangFileString} Desc_Section08 \ + "ลบแฟ้มค่าปรับแต่งและแคช ของโปรแกรมเล่นสื่อ VLC ที่เหลือทิ้งไว้จากการติดตั้งในครั้งก่อน" + +${LangFileString} Name_Section91 "ถอดถอน" +${LangFileString} Name_Section92 "ลบค่าปรับแต่งและแคช" + +${LangFileString} Desc_Section91 \ +"ถอนการติดตั้งโปรแกรมเล่นสื่อ VLC รวมถึงส่วนประกอบทั้งหมด" +${LangFileString} Desc_Section92 \ +"ลบไฟล์การตั้งค่าและแคชของโปรแกรมเล่นสื่อ VLC " + +${LangFileString} ShellAssociation_Play "เล่น" +${LangFileString} ContextMenuEntry_PlayWith "เล่นด้วยโปรแกรมเล่นสื่อ VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "เพิ่มลงในเพลย์ลิสต์ของโปรแกรมเล่นสื่อ VLC" + +${LangFileString} Link_VisitWebsite "เยี่ยมชมเว็บไซต์ VideoLAN ของโปรแกรมเล่นสื่อ VLC" + +${LangFileString} Name_InstTypeRecommended "ตามที่แนะนำ" +${LangFileString} Name_InstTypeMinimum "ต่ำสุด" +${LangFileString} Name_InstTypeFull "เต็มที่" + +${LangFileString} Action_OnArrivalDVD "เล่น DVD ภาพยนตร์" +${LangFileString} Action_OnArrivalAudioCD "เล่น CD เสียง" +${LangFileString} Action_OnArrivalVCDMovie "เล่น VCD ภาพยนตร์" +${LangFileString} Action_OnArrivalSVCDMovie "เล่น SVCD ภาพยนตร์" +${LangFileString} Action_OnArrivalVideoFiles "เล่นไฟล์วิดีโอ" +${LangFileString} Action_OnArrivalMusicFiles "เล่นไฟล์เสียง" +${LangFileString} Action_OnArrivalDVDAudio "เล่น DVD เพลง" +${LangFileString} Action_OnArrivalBluray "เล่นบลูเรย์" + +${LangFileString} License_NextText "คุณได้ตระหนักในสิทธิ์การใช้งานด้านต่างๆ แล้ว กด 'ถัดไป' เพื่อทำต่อ " + +${LangFileString} Detail_CheckProcesses "กำลังตรวจสอบกระบวนการ..." +${LangFileString} MessageBox_VLCRunning "ดูเหมือนว่า VLC กำลังทำงานอยู่ และจะถูกปิดในขณะนี้" +${LangFileString} MessageBox_VLCUnableToClose "ตัวติดตั้งนี้ไม่สามารถปิด VLC ได้ กรุณาปิดด้วยตัวคุณเอง" +${LangFileString} MessageBox_InstallAborted "ยกเลิกการติดตั้งแล้ว!" + +${LangFileString} Reinstall_Headline "ติดตั้งเรียบร้อยแล้ว" +${LangFileString} Reinstall_HeadlineInstall "เลือกว่าคุณต้องการที่จะติดตั้ง VLC อย่างไร" +${LangFileString} Reinstall_HeadlineMaintenance "เลือกตัวเลือกการบำรุงรักษาที่จะดำเนินการ" +${LangFileString} Reinstall_MessageOlder "ระบบของคุณมี VLC เวอร์ชั่นเก่าติดตั้งไว้อยู่ก่อนแล้ว เลือกการดำเนินการที่คุณต้องการทำ และคลิก $\"ถัดไป$\" เพื่อทำต่อ" +${LangFileString} Reinstall_MessageNewer "มี VLC เวอร์ชั่นที่ใหม่กว่าติดตั้งอยู่แล้ว! ไม่แนะนำให้คุณดาวน์เกรดเป็นเวอร์ชั่นที่เก่ากว่า เลือกการดำเนินการที่คุณต้องการทำ และคลิก $\"ถัดไป$\" เพื่อทำต่อ" +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} ถูกติดตั้งไว้อยู่แล้ว เลือกการดำเนินการที่คุณต้องการทำ และคลิก $\"ถัดไป$\" เพื่อทำต่อ" +${LangFileString} Reinstall_OptionUpgrade "อัปเกรด VLC โดยใช้การตั้งค่าก่อนหน้านี้ (แนะนำ)" +${LangFileString} Reinstall_OptionDowngrade "ดาวน์เกรด VLC โดยใช้การตั้งค่าก่อนหน้านี้ (แนะนำ)" +${LangFileString} Reinstall_OptionComponents "เพิ่ม/ลบ/ติดตั้งส่วนประกอบใหม่" +${LangFileString} Reinstall_OptionAdvanced "เปลี่ยนการตั้งค่า (ขั้นสูง)" +${LangFileString} Reinstall_OptionUninstall "ถอนการติดตั้ง VLC" diff --git a/support/3rd_party/vlc/languages/TradChineseExtra.nsh b/support/3rd_party/vlc/languages/TradChineseExtra.nsh new file mode 100644 index 0000000..6dcde59 --- /dev/null +++ b/support/3rd_party/vlc/languages/TradChineseExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT TradChinese +${LangFileString} Name_Section01 "媒體播放器 (必要)" +${LangFileString} Name_Section02a "開始功能表捷徑" +${LangFileString} Name_Section02b "桌面捷徑" +${LangFileString} Name_Section34 "網頁外掛" +${LangFileString} Name_Section03 "Moziila 外掛" +${LangFileString} Name_Section04 "ActiveX 外掛" +${LangFileString} Name_Section05 "光碟播放" +${LangFileString} Name_Section06 "檔案類型關聯" +${LangFileString} Name_SectionGroupAudio "音訊檔案" +${LangFileString} Name_SectionGroupVideo "視訊檔案" +${LangFileString} Name_SectionGroupOther "其他" +${LangFileString} Name_Section07 "右鍵選單" +${LangFileString} Name_Section08 "刪除偏好設定與快取" + +${LangFileString} Desc_Section01 \ + "媒體播放器本體" +${LangFileString} Desc_Section02a \ + "在開始功能表新增啟動圖示以利存取" +${LangFileString} Desc_Section02b \ + "在桌面新增圖示以利存取" +${LangFileString} Desc_Section03 \ + "VLC Mozilla 與 Mozilla Firefox 外掛" +${LangFileString} Desc_Section04 \ + "VLC ActiveX 外掛" +${LangFileString} Desc_Section05 \ + "註冊 DVD 與 CD 播放" +${LangFileString} Desc_Section06 \ + "設定 VLC 媒體播放器為特定檔案類型的預設程式" +${LangFileString} Desc_Section07 \ + "新增右鍵選單項目 (「以 VLC 播放」與「新增至 VLC 播放清單」)" +${LangFileString} Desc_Section08 \ + "刪除上一個 VLC 媒體播放器安裝留下來的偏好設定與快取" + +${LangFileString} Name_Section91 "移除" +${LangFileString} Name_Section92 "刪除偏好設定與快取" + +${LangFileString} Desc_Section91 \ +"移除 VLC 媒體播放器與所有元件" +${LangFileString} Desc_Section92 \ +"刪除 VLC 媒體播放器偏好設定與快取" + +${LangFileString} ShellAssociation_Play "播放" +${LangFileString} ContextMenuEntry_PlayWith "以 VLC 媒體播放器播放" +${LangFileString} ContextMenuEntry_AddToPlaylist "新增至 VLC 媒體播放器的播放清單" + +${LangFileString} Link_VisitWebsite "前往 the VideoLAN VLC 媒體播放器網站" + +${LangFileString} Name_InstTypeRecommended "建議的安裝" +${LangFileString} Name_InstTypeMinimum "最小化安裝" +${LangFileString} Name_InstTypeFull "完整安裝" + +${LangFileString} Action_OnArrivalDVD "播放 DVD 電影" +${LangFileString} Action_OnArrivalAudioCD "播放音樂 CD" +${LangFileString} Action_OnArrivalVCDMovie "播放 VCD 電影" +${LangFileString} Action_OnArrivalSVCDMovie "播放 SVCD 電影" +${LangFileString} Action_OnArrivalVideoFiles "播放視訊檔案" +${LangFileString} Action_OnArrivalMusicFiles "播放音訊檔案" +${LangFileString} Action_OnArrivalDVDAudio "播放音訊 DVD" +${LangFileString} Action_OnArrivalBluray "播放藍光" + +${LangFileString} License_NextText "您已經被告知您的權利了,請按下一步以繼續" + +${LangFileString} Detail_CheckProcesses "執行檢查中..." +${LangFileString} MessageBox_VLCRunning "VLC 似乎正在執行中且將被關閉" +${LangFileString} MessageBox_VLCUnableToClose "安裝程式無法順利關閉 VLC,請手動關閉。" +${LangFileString} MessageBox_InstallAborted "中止安裝!" + +${LangFileString} Reinstall_Headline "已安裝" +${LangFileString} Reinstall_HeadlineInstall "請選擇您要如何安裝 VLC。" +${LangFileString} Reinstall_HeadlineMaintenance "請選擇要執行的維護選項。" +${LangFileString} Reinstall_MessageOlder "您的系統上已安裝了舊的版本,請選擇一個您要執行的動作並按下一步以繼續。" +${LangFileString} Reinstall_MessageNewer "新版的 VLC 已經安裝!我們不建議您降級到舊版,請選擇一個您要執行的動作並按下一步以繼續。" +${LangFileString} Reinstall_MessageSame "VLC 版號 ${VERSION} 已安裝,請選擇一個您要執行的動作並按下一步以繼續。" +${LangFileString} Reinstall_OptionUpgrade "使用之前的設定值更新 VLC (建議選項)" +${LangFileString} Reinstall_OptionDowngrade "使用之前的設定值降級 VLC (建議選項)" +${LangFileString} Reinstall_OptionComponents "新增/移除/重新安裝 元件" +${LangFileString} Reinstall_OptionAdvanced "修改設定 (進階)" +${LangFileString} Reinstall_OptionUninstall "移除 VLC" diff --git a/support/3rd_party/vlc/languages/TurkishExtra.nsh b/support/3rd_party/vlc/languages/TurkishExtra.nsh new file mode 100644 index 0000000..ae7d046 --- /dev/null +++ b/support/3rd_party/vlc/languages/TurkishExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Turkish +${LangFileString} Name_Section01 "Ortam Oynatıcısı (zorunlu)" +${LangFileString} Name_Section02a "Başlat Menüsü Kısayolu" +${LangFileString} Name_Section02b "Masaüstü Kısayolu" +${LangFileString} Name_Section34 "Web eklentileri" +${LangFileString} Name_Section03 "Mozilla eklentisi" +${LangFileString} Name_Section04 "ActiveX eklentisi" +${LangFileString} Name_Section05 "Disk Oynatımı" +${LangFileString} Name_Section06 "Dosya türü ilişkilendirmeleri" +${LangFileString} Name_SectionGroupAudio "Ses Dosyaları" +${LangFileString} Name_SectionGroupVideo "Görüntü Dosyaları" +${LangFileString} Name_SectionGroupOther "Diğer" +${LangFileString} Name_Section07 "Sağ Tık Menüleri" +${LangFileString} Name_Section08 "Ayarları ve ön belleği sil" + +${LangFileString} Desc_Section01 \ + "Ortam oynatıcısının kendisi" +${LangFileString} Desc_Section02a \ + "Başlat menünüze kolay erişim simgeleri ekler" +${LangFileString} Desc_Section02b \ + "Masaüstünüze kolay erişim simgeleri ekler" +${LangFileString} Desc_Section03 \ + "VLC Mozilla ve Mozilla Firefox eklentisi" +${LangFileString} Desc_Section04 \ + "VLC ActiveX eklentisi" +${LangFileString} Desc_Section05 \ + "DVD ve CD oynatma kaydı" +${LangFileString} Desc_Section06 \ + "VLC ortam oynatıcısını belirtilen dosya türü için varsayılan uygulama olarak ayarlar" +${LangFileString} Desc_Section07 \ + "Sağ tık menüsü ögelerini ekler ('VLC ile Oynat' ve 'VLC oynatma Listesine Ekle')" +${LangFileString} Desc_Section08 \ + "VLC ortam oynatıcısının önceki kurulumlarından kalan ayarları ve ön bellek dosyalarını siler" + +${LangFileString} Name_Section91 "Kaldır" +${LangFileString} Name_Section92 "Ayarları ve ön belleği sil" + +${LangFileString} Desc_Section91 \ +"VLC ortam oynatıcısını ve tüm bileşenlerini kaldırır" +${LangFileString} Desc_Section92 \ +"VLC ortam oynatıcısının ayarlarını ve ön bellek dosyalarını siler" + +${LangFileString} ShellAssociation_Play "Oynat" +${LangFileString} ContextMenuEntry_PlayWith "VLC ile Oynat" +${LangFileString} ContextMenuEntry_AddToPlaylist "VLC Oynatma Listesine Ekle" + +${LangFileString} Link_VisitWebsite "VideoLAN VLC web sitesine git" + +${LangFileString} Name_InstTypeRecommended "Önerilen" +${LangFileString} Name_InstTypeMinimum "En Düşük" +${LangFileString} Name_InstTypeFull "Tam" + +${LangFileString} Action_OnArrivalDVD "DVD film oynatımı" +${LangFileString} Action_OnArrivalAudioCD "Ses CD oynatımı" +${LangFileString} Action_OnArrivalVCDMovie "VCD film oynatımı" +${LangFileString} Action_OnArrivalSVCDMovie "SVCD film oynatımı" +${LangFileString} Action_OnArrivalVideoFiles "Görüntü dosyalarının oynatımı" +${LangFileString} Action_OnArrivalMusicFiles "Ses dosyalarının oynatımı" +${LangFileString} Action_OnArrivalDVDAudio "Ses DVD oynatımı" +${LangFileString} Action_OnArrivalBluray "Blu-Ray oynatımı" + +${LangFileString} License_NextText "Artık haklarınızı biliyorsunuz. Devam etmek için Sonraki düğmesine tıklayın." + +${LangFileString} Detail_CheckProcesses "İşlemler denetleniyor..." +${LangFileString} MessageBox_VLCRunning "VLC çalışıyor görünüyor ve şimdi kapatılacak." +${LangFileString} MessageBox_VLCUnableToClose "Kurucu etkin VLC uygulamasını kapatamadı, lütfen el ile kapatın." +${LangFileString} MessageBox_InstallAborted "Kurulum iptal edildi!" + +${LangFileString} Reinstall_Headline "Zaten Kurulu" +${LangFileString} Reinstall_HeadlineInstall "VLC uygulamasını nasıl kurmak istediğinizi seçin." +${LangFileString} Reinstall_HeadlineMaintenance "Yürütmek istediğiniz bakım işlemini seçin." +${LangFileString} Reinstall_MessageOlder "Sisteminizde eski bir VLC sürümü kurulu. Yapmak istediğiniz işlemi seçip Sonraki düğmesine tıklayın." +${LangFileString} Reinstall_MessageNewer "Daha yeni bir VLC sürümü zaten kurulu! Eski bir sürüme geri dönmeniz önerilmez. Yapmak istediğiniz işlemi seçip Sonraki düğmesine tıklayın." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} zaten kurulu. Yapmak istediğiniz işlemi seçip Sonraki düğmesine tıklayın." +${LangFileString} Reinstall_OptionUpgrade "Önceki ayarlar kullanılarak VLC güncellensin (önerilir)" +${LangFileString} Reinstall_OptionDowngrade "Önceki ayarlar kullanılarak VLC sürümü düşürülsün (önerilir)" +${LangFileString} Reinstall_OptionComponents "Bileşenleri Ekle/Sil/Yeniden Kur" +${LangFileString} Reinstall_OptionAdvanced "Ayarları değiştir (gelişmiş)" +${LangFileString} Reinstall_OptionUninstall "VLC Uygulamasını Kaldır" diff --git a/support/3rd_party/vlc/languages/UkrainianExtra.nsh b/support/3rd_party/vlc/languages/UkrainianExtra.nsh new file mode 100644 index 0000000..7f333ea --- /dev/null +++ b/support/3rd_party/vlc/languages/UkrainianExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Ukrainian +${LangFileString} Name_Section01 "Медіапрогравач (обов'язковий)" +${LangFileString} Name_Section02a "Ярлик у меню „Пуск“" +${LangFileString} Name_Section02b "Ярлик на робочому столі" +${LangFileString} Name_Section34 "Веб-модуль" +${LangFileString} Name_Section03 "Модуль для Mozilla" +${LangFileString} Name_Section04 "Модуль ActiveX" +${LangFileString} Name_Section05 "Відтворення дисків" +${LangFileString} Name_Section06 "Асоціації типів файлів" +${LangFileString} Name_SectionGroupAudio "Звукові файли" +${LangFileString} Name_SectionGroupVideo "Відеофайли" +${LangFileString} Name_SectionGroupOther "Інші" +${LangFileString} Name_Section07 "Контекстне меню" +${LangFileString} Name_Section08 "Вилучити налаштування і кеш" + +${LangFileString} Desc_Section01 \ + "Сам медіапрогравач" +${LangFileString} Desc_Section02a \ + "Додає піктограми до вашого меню „Пуск“ для легкого доступу" +${LangFileString} Desc_Section02b \ + "Додає піктограми до вашого робочого столу для легкого доступу" +${LangFileString} Desc_Section03 \ + "Модуль VLC для Mozilla та Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Модуль VLC ActiveX" +${LangFileString} Desc_Section05 \ + "Реєстрація відтворення DVD та CD" +${LangFileString} Desc_Section06 \ + "Установлює медіапрогравач VLC як типову програму для вказаного типу файлів" +${LangFileString} Desc_Section07 \ + "Додати елементи контекстного меню ('Відтворити з VLC' and 'Додати до списку відтворення VLC')" +${LangFileString} Desc_Section08 \ + "Вилучає налаштування медіапрогравача VLC та файли кешу, які залишилися від попередніх інсталяцій" + +${LangFileString} Name_Section91 "Видалити" +${LangFileString} Name_Section92 "Вилучити налаштування і кеш" + +${LangFileString} Desc_Section91 \ +"Видалити медіапрогравач VLC та усі його компоненти" +${LangFileString} Desc_Section92 \ +"Вилучає налаштування медіапрогравача VLC та файли кешу" + +${LangFileString} ShellAssociation_Play "Відтворити" +${LangFileString} ContextMenuEntry_PlayWith "Відтворити через медіапрогравач VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Додати до списку відтворення медіапрогравача VLC" + +${LangFileString} Link_VisitWebsite "Відвідати веб-сайт медіапрогравача VLC від VideoLAN" + +${LangFileString} Name_InstTypeRecommended "Рекомендовано" +${LangFileString} Name_InstTypeMinimum "Мінімальна" +${LangFileString} Name_InstTypeFull "Повна" + +${LangFileString} Action_OnArrivalDVD "Відтворювати DVD-Video" +${LangFileString} Action_OnArrivalAudioCD "Відтворювати CD-Audio" +${LangFileString} Action_OnArrivalVCDMovie "Відтворювати VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Відтворювати SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Відтворювати відеофайли" +${LangFileString} Action_OnArrivalMusicFiles "Відтворювати звукові файли" +${LangFileString} Action_OnArrivalDVDAudio "Відтворювати DVD-Audio" +${LangFileString} Action_OnArrivalBluray "Відтворювати Blu-ray" + +${LangFileString} License_NextText "Тепер ви обізнані про свої права. Натисніть кнопку Далі, аби продовжити." + +${LangFileString} Detail_CheckProcesses "Перевіряються процеси…" +${LangFileString} MessageBox_VLCRunning "VLC наразі запущена і невдовзі буде закрита." +${LangFileString} MessageBox_VLCUnableToClose "Програма установки не може закрити VLC. Будь ласка, зробіть це вручну." +${LangFileString} MessageBox_InstallAborted "Перервано встановлення!" + +${LangFileString} Reinstall_Headline "Вже встановлено" +${LangFileString} Reinstall_HeadlineInstall "Виберіть, як ви хочете встановити VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Виберіть варіант дії для виконання." +${LangFileString} Reinstall_MessageOlder "Старіша версія VLC встановлена у вашій системі. Виберіть, яку дію слід виконати, і натисніть Далі для продовження." +${LangFileString} Reinstall_MessageNewer "Новіша версія VLC встановлена у вашій системі. Не рекомендується встановлювати старішу версію. Виберіть, яку дію слід виконати, і натисніть Далі для продовження." +${LangFileString} Reinstall_MessageSame "Програма VLC ${VERSION} встановлена у вашій системі. Виберіть, яку дію слід виконати, і натисніть Далі для продовження." +${LangFileString} Reinstall_OptionUpgrade "Встановити новішу версію VLC з попередніми установками (рекомендовано)" +${LangFileString} Reinstall_OptionDowngrade "Встановити старішу версію VLC з попередніми установками (рекомендовано)" +${LangFileString} Reinstall_OptionComponents "Додати/Вилучити/Перевстановити компоненти" +${LangFileString} Reinstall_OptionAdvanced "Змінити параметри (розширені)" +${LangFileString} Reinstall_OptionUninstall "Видалити VLC" diff --git a/support/3rd_party/vlc/languages/UzbekExtra.nsh b/support/3rd_party/vlc/languages/UzbekExtra.nsh new file mode 100644 index 0000000..e111318 --- /dev/null +++ b/support/3rd_party/vlc/languages/UzbekExtra.nsh @@ -0,0 +1,77 @@ +!insertmacro LANGFILE_EXT Uzbek +${LangFileString} Name_Section01 "Media pleyeri (talab etiladi)" +${LangFileString} Name_Section02a "Boshlash menyusi yorlig'i" +${LangFileString} Name_Section02b "Ishchi stoli yorlig'i" +${LangFileString} Name_Section34 "Veb-plaginlar" +${LangFileString} Name_Section03 "Mozilla plagini" +${LangFileString} Name_Section04 "ActiveX plagini" +${LangFileString} Name_Section05 "Disklarni ijro ettirish" +${LangFileString} Name_Section06 "Fayl turlari" +${LangFileString} Name_SectionGroupAudio "Audio fayllar" +${LangFileString} Name_SectionGroupVideo "Video fayllar" +${LangFileString} Name_SectionGroupOther "Boshqa" +${LangFileString} Name_Section07 "Kontekst menyular" +${LangFileString} Name_Section08 "Sozlashlarni va keshni o'chirish" + +${LangFileString} Desc_Section01 \ + "Media pleyerning o‘zi" +${LangFileString} Desc_Section02a \ + "Oson foydalanish uchun nishonchalarni $\"Boshlash$\" menyusiga qo‘shadi" +${LangFileString} Desc_Section02b \ + "Oson ishga tushirish uchun ish stolingizga nishonchani qo‘shadi." +${LangFileString} Desc_Section03 \ + "VLC Mozilla va Mozilla Firefox plagini" +${LangFileString} Desc_Section04 \ + "VLC ActiveX plagini" +${LangFileString} Desc_Section05 \ + "DVD va CD’larni ijro etishni ro‘yxatdan o‘tkazish" +${LangFileString} Desc_Section06 \ + "VLC media pleyerni ko‘rsatilgan turdagi fayllar uchun standart dastur sifatida o‘rnatadi" +${LangFileString} Desc_Section07 \ + "Menyu bandi matni qo‘shing (VLC bilan ijro etish va 'VLC ijro ro‘yxatiga qo‘shish')" +${LangFileString} Desc_Section08 \ + "VLC media pleyer sozlamalari va oldingi o‘rnatishlga tegishli kesh fayllarini o‘chiradi" + +${LangFileString} Name_Section91 "Olib tashlash" +${LangFileString} Name_Section92 "Sozlamalar va keshni o‘chirish" + +${LangFileString} Desc_Section91 \ +"VLC media pleyer va uning barcha komponentlarini o‘chirish" +${LangFileString} Desc_Section92 \ +"VLC media pleyer sozlamalari va kesh fayllarini o‘chiradi" + +${LangFileString} ShellAssociation_Play "Ijro etish" +${LangFileString} ContextMenuEntry_PlayWith "VLC media pleyer bilan qo‘yish" +${LangFileString} ContextMenuEntry_AddToPlaylist "VLC media pleyer ijro ro‘yxatiga qo‘shish" + +${LangFileString} Link_VisitWebsite "VideoLAN VLC media pleyer veb sahifasiga tashrif buyuring" + +${LangFileString} Name_InstTypeRecommended "Tavsiya etilgan" +${LangFileString} Name_InstTypeMinimum "Minimum" +${LangFileString} Name_InstTypeFull "To‘liq" + +${LangFileString} Action_OnArrivalDVD "DVD filmni qo‘yish" +${LangFileString} Action_OnArrivalAudioCD "Audio CD qo‘yish" +${LangFileString} Action_OnArrivalVCDMovie "VCD filmni qo‘yish" +${LangFileString} Action_OnArrivalSVCDMovie "SVCD filmni qo‘yish" +${LangFileString} Action_OnArrivalVideoFiles "Video fayllarni qo‘yish" +${LangFileString} Action_OnArrivalMusicFiles "Audio fayllarni qo‘yish" +${LangFileString} Action_OnArrivalDVDAudio "DVD audion qo‘yish" +${LangFileString} License_NextText "Siz o‘z huquqlaringiz bo‘yicha haqsiz. Davom etish uchun $\"Keyingi$\" tugmasini bosing." + +${LangFileString} Detail_CheckProcesses "Jarayonlar tekshirilmoqda..." +${LangFileString} MessageBox_VLCRunning "VLC ishga tushirilganga o‘xhaydi, shuning uchun hozir yopiladi." +${LangFileString} MessageBox_VLCUnableToClose "Ushbu o‘rnatgich VLC’ni yopa olmaydi. Buni o‘zingiz amalga oshiring." +${LangFileString} MessageBox_InstallAborted "O‘rnatish bekor qilindi!" + +${LangFileString} Reinstall_Headline "Allaqachon o‘rnatilgan" +${LangFileString} Reinstall_HeadlineInstall "VLC’ni qanday usulda o‘rnatish kerakligini tanlang." +${LangFileString} Reinstall_HeadlineMaintenance "Bajarish uchun asosiy sozlamalarni tanlang." +${LangFileString} Reinstall_MessageOlder "Tizimingizda VLC’ning eskiroq versiyasi o‘rnatilgan. Amalga oshirish kerak bo‘lgan jarayonni tanlang va davom etish uchun $\"Keyingi$\" tugmasini bosing." +${LangFileString} Reinstall_MessageNewer "VLC’ning yangiroq versiyasi allaqachon o‘rnatilgan! Eskiroq versiyasiga qaytarish tavsiya qilinmaydi. Amalga oshirish kerak bo‘lgan jarayonni tanlang va davom etish uchun $\"Keyingi$\" tugmasini bosing." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} allaqachon o‘rnatilgan. Amalga oshirishni xohlagan jarayonlarni tanlang va $\"Keyingi$\" tugmasini bosing." +${LangFileString} Reinstall_OptionUpgrade "VLC’ni oldingi sozlamalari bilan yangilash (tavsiya qilinadi)" +${LangFileString} Reinstall_OptionDowngrade "VLC’ni oldingi sozlamalaridan foydalanib tiklash (tavsiya qilinadi)" +${LangFileString} Reinstall_OptionComponents "Komponentlarni qo‘shish/o‘chirish/qayta o‘rnatish" +${LangFileString} Reinstall_OptionAdvanced "Sozlamalarni o‘zgartirish (qo‘shimcha)" +${LangFileString} Reinstall_OptionUninstall "VLC’ni o‘chirish" diff --git a/support/3rd_party/vlc/languages/VietnameseExtra.nsh b/support/3rd_party/vlc/languages/VietnameseExtra.nsh new file mode 100644 index 0000000..a489fa5 --- /dev/null +++ b/support/3rd_party/vlc/languages/VietnameseExtra.nsh @@ -0,0 +1,65 @@ +!insertmacro LANGFILE_EXT Vietnamese +${LangFileString} Name_Section01 "Trình phát phương tiện (bắt buộc)" +${LangFileString} Name_Section02a "Lối tắt trên menu Bắt đầu" +${LangFileString} Name_Section02b "Lối tắt trên Desktop" +${LangFileString} Name_Section05 "Phát các đĩa" +${LangFileString} Name_Section06 "Sự liên kết loại tệp" +${LangFileString} Name_SectionGroupAudio "Các tệp âm thanh" +${LangFileString} Name_SectionGroupVideo "Các tệp video" +${LangFileString} Name_SectionGroupOther "Khác" +${LangFileString} Name_Section08 "Xoá cài đặt và bộ nhớ đệm" + +${LangFileString} Desc_Section01 \ + "Bản thân trình phát phương tiện" +${LangFileString} Desc_Section02a \ + "Thêm biểu tượng vào menu bắt đầu để dễ truy cập" +${LangFileString} Desc_Section02b \ + "Thêm biểu tượng vào Desktop để dễ truy cập" +${LangFileString} Desc_Section08 \ + "Xoá cài đặt và tệp bộ nhớ đệm của trình phát phương tiện VLC còn sót lại từ các lần cài đặt trước" + +${LangFileString} Name_Section91 "Gỡ cài đặt" +${LangFileString} Name_Section92 "Xoá cài đặt và bộ nhớ đệm" + +${LangFileString} Desc_Section91 \ +"Gỡ cài đặt trình phát phương tiện VLC và tất cả thành phần của nó" +${LangFileString} Desc_Section92 \ +"Xoá cài đặt và tệp bộ nhớ đệm của trình phát phương tiện VLC" + +${LangFileString} ShellAssociation_Play "Phát" +${LangFileString} ContextMenuEntry_PlayWith "Phát bằng trình phát phương tiện VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Thêm vào danh sách phát của trình phát phương tiện VLC" + +${LangFileString} Link_VisitWebsite "Đi đến trang web của VideoLAN trình phát phương tiện VLC" + +${LangFileString} Name_InstTypeRecommended "Được khuyến nghị" +${LangFileString} Name_InstTypeMinimum "Tối thiểu" +${LangFileString} Name_InstTypeFull "Đầy đủ" + +${LangFileString} Action_OnArrivalDVD "Phát bộ phim DVD" +${LangFileString} Action_OnArrivalAudioCD "Phát CD âm thanh" +${LangFileString} Action_OnArrivalVCDMovie "Phát bộ phim VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Phát bộ phim SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Phát các tệp video" +${LangFileString} Action_OnArrivalMusicFiles "Phát các tệp âm thanh" +${LangFileString} Action_OnArrivalDVDAudio "Phát DVD âm thanh" +${LangFileString} Action_OnArrivalBluray "Phát Blu-ray" + +${LangFileString} License_NextText "Bây giờ bạn đã nhận thức được các quyền của bạn. Click Tiếp để tiếp tục." + +${LangFileString} Detail_CheckProcesses "Đang kiểm tra các tiến trình..." +${LangFileString} MessageBox_VLCRunning "VLC có vẻ đang chạy và sẽ được đóng ngay." +${LangFileString} MessageBox_VLCUnableToClose "Trình cài đặt này không thể đóng VLC, hãy đóng nó thủ công." +${LangFileString} MessageBox_InstallAborted "Cài đặt bị huỷ!" + +${LangFileString} Reinstall_Headline "Đã được cài đặt" +${LangFileString} Reinstall_HeadlineInstall "Chọn cách bạn muốn cài đặt VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Chọn tuỳ chọn bảo trì để thực hiện." +${LangFileString} Reinstall_MessageOlder "Một phiên bản cũ hơn của VLC được cài đặt trên hệ thống của bạn. Chọn hoạt động bạn muốn thực hiện và click Tiếp để tiếp tục." +${LangFileString} Reinstall_MessageNewer "Một phiên bản mới hơn của VLC đã được cài đặt! Việc hạ cấp xuống một phiên bản cũ hơn không được khuyến nghị. Chọn hoạt động bạn muốn thực hiện và click Tiếp để tiếp tục." +${LangFileString} Reinstall_MessageSame "VLC ${VERSION} đã được cài đặt. Chọn hoạt động bạn muốn thực hiện và click Tiếp để tiếp tục." +${LangFileString} Reinstall_OptionUpgrade "Nâng cấp VLC dùng cài đặt trước (được khuyến nghị)" +${LangFileString} Reinstall_OptionDowngrade "Hạ cấp VLC dùng cài đặt trước (được khuyến nghị)" +${LangFileString} Reinstall_OptionComponents "Thêm/Gỡ bỏ/Cài đặt lại các thành phần" +${LangFileString} Reinstall_OptionAdvanced "Thay đổi cài đặt (nâng cao)" +${LangFileString} Reinstall_OptionUninstall "Gỡ cài đặt VLC" diff --git a/support/3rd_party/vlc/languages/WelshExtra.nsh b/support/3rd_party/vlc/languages/WelshExtra.nsh new file mode 100644 index 0000000..e24587b --- /dev/null +++ b/support/3rd_party/vlc/languages/WelshExtra.nsh @@ -0,0 +1,79 @@ +!insertmacro LANGFILE_EXT Welsh +${LangFileString} Name_Section01 "Chwaraeydd Cyfryngau (gofynnol)" +${LangFileString} Name_Section02a "Llwybr Byr yn y Ddewislen Cychwyn" +${LangFileString} Name_Section02b "Llwybr Byr ar y Bwrdd Gwaith" +${LangFileString} Name_Section34 "Ategion We" +${LangFileString} Name_Section03 "Ategyn Mozilla" +${LangFileString} Name_Section04 "Ategyn ActiveX" +${LangFileString} Name_Section05 "Chwaraeydd Disgiau" +${LangFileString} Name_Section06 "Cysylltiadau mathau ffeil " +${LangFileString} Name_SectionGroupAudio "Ffeiliau Sain" +${LangFileString} Name_SectionGroupVideo "Ffeiliau Fideo" +${LangFileString} Name_SectionGroupOther "Eraill" +${LangFileString} Name_Section07 "Dewislenni Cyd-destun" +${LangFileString} Name_Section08 "Dileu'r dewisiadau a'r cuddstôr" + +${LangFileString} Desc_Section01 \ + "Y chwaraeydd cyfryngau ei hun" +${LangFileString} Desc_Section02a \ + "Rhoi eiconau yn eich dewislen cychwyn i allu agor VLC yn hawdd" +${LangFileString} Desc_Section02b \ + "Rhoi eicon ar eich bwrdd gwaith i allu agor VLC yn hawdd" +${LangFileString} Desc_Section03 \ + "Gosod ategyn VLC ar gyfer Mozilla a Mozilla Firefox" +${LangFileString} Desc_Section04 \ + "Gosod ategyn VLC ar gyfer ActiveX" +${LangFileString} Desc_Section05 \ + "Cofrestriad chwarae CD a DVD" +${LangFileString} Desc_Section06 \ + "Gosod chwaraeydd VLC fel y rhaglen ddiofyn ar gyfer y mathau o ffeil a dewisir" +${LangFileString} Desc_Section07 \ + "Ychwanegu eitemau cyd-destun at ddewislenni ('Chwarae gyda VLC' ac 'Ychwanegu i restr chwarae VLC')" +${LangFileString} Desc_Section08 \ + "Dileu dewisiadau a ffeiliau cuddstôr (cache) yn weddill o fersiynau gynt o chwaraeydd VLC" + +${LangFileString} Name_Section91 "Dadosod" +${LangFileString} Name_Section92 "Dileu'r dewisiadau a'r cuddstôr" + +${LangFileString} Desc_Section91 \ +"Dadosod chwaraeydd VLC a'i holl gydrannau" +${LangFileString} Desc_Section92 \ +"Dileu dewisiadau a ffeiliau cuddstôr chwaraeydd VLC." + +${LangFileString} ShellAssociation_Play "Chwarae" +${LangFileString} ContextMenuEntry_PlayWith "Chwarae gyda chwaraeydd VLC" +${LangFileString} ContextMenuEntry_AddToPlaylist "Ychwanegu at restr chwarae VLC" + +${LangFileString} Link_VisitWebsite "Ymweld â gwefan chwaraeydd VLC gan VideoLAN" + +${LangFileString} Name_InstTypeRecommended "Argymhellwyd" +${LangFileString} Name_InstTypeMinimum "Lleiaf" +${LangFileString} Name_InstTypeFull "Llawn" + +${LangFileString} Action_OnArrivalDVD "Chwarae ffilm DVD" +${LangFileString} Action_OnArrivalAudioCD "Chwarae CD sain" +${LangFileString} Action_OnArrivalVCDMovie "Chwarae ffilm VCD" +${LangFileString} Action_OnArrivalSVCDMovie "Chwarae ffilm SVCD" +${LangFileString} Action_OnArrivalVideoFiles "Chwarae ffeiliau fideo" +${LangFileString} Action_OnArrivalMusicFiles "Chwarae ffeiliau sain" +${LangFileString} Action_OnArrivalDVDAudio "Chwarae DVD sain" +${LangFileString} Action_OnArrivalBluray "Chwarae Blu-ray" + +${LangFileString} License_NextText "Wedi ei ddarllen, rydych yn ymwybodol o'ch hawliau. Cliciwch $\"Nesaf$\" i barhau." + +${LangFileString} Detail_CheckProcesses "Yn gwirio..." +${LangFileString} MessageBox_VLCRunning "Mae'n ymddangos bod VLC yn rhedeg, felly bydd nawr yn cael ei gau." +${LangFileString} MessageBox_VLCUnableToClose "Methwyd cau VLC. Caewch y chwaraeydd, os gwelwch yn dda." +${LangFileString} MessageBox_InstallAborted "Diweddwyd y broses gosod cyn gorffen!" + +${LangFileString} Reinstall_Headline "Eisoes wedi'i osod" +${LangFileString} Reinstall_HeadlineInstall "Dewiswch sut hoffech osod VLC." +${LangFileString} Reinstall_HeadlineMaintenance "Dewiswch yr opsiwn cynnal a chadw i'w weithredu." +${LangFileString} Reinstall_MessageOlder "Mae fersiwn gynt o VLC wedi'i osod ar eich system. Dewiswch un o'r gweithredoedd a chliciwch $\"Nesaf$\" i barhau." +${LangFileString} Reinstall_MessageNewer "Mae fersiwn mwy diweddar o VLC eisoes wedi'i osod! Nid yw'n arferol i israddio at fersiwn gynt. Dewiswch un o'r gweithredoedd a chliciwch $\"Nesaf$\" i barhau." +${LangFileString} Reinstall_MessageSame "Mae VLC ${VERSION} eisoes wedi'i osod. Dewiswch un o'r gweithredoedd a chliciwch $\"Nesaf$\" i barhau." +${LangFileString} Reinstall_OptionUpgrade "Uwchraddio VLC gyda'r un gosodiadau (argymhellwyd)" +${LangFileString} Reinstall_OptionDowngrade "Israddio VLC gyda'r un gosodiadau (argymhellwyd)" +${LangFileString} Reinstall_OptionComponents "Ychwanegu/Tynnu/Ailosod cydrannau" +${LangFileString} Reinstall_OptionAdvanced "Newid gosodiadau (uwch)" +${LangFileString} Reinstall_OptionUninstall "Dadosod VLC" diff --git a/support/3rd_party/vlc/libvlc.dll b/support/3rd_party/vlc/libvlc.dll new file mode 100644 index 0000000..9ef7778 Binary files /dev/null and b/support/3rd_party/vlc/libvlc.dll differ diff --git a/support/3rd_party/vlc/libvlccore.dll b/support/3rd_party/vlc/libvlccore.dll new file mode 100644 index 0000000..ec73e59 Binary files /dev/null and b/support/3rd_party/vlc/libvlccore.dll differ diff --git a/support/3rd_party/vlc/locale/ach/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ach/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..f89ee14 Binary files /dev/null and b/support/3rd_party/vlc/locale/ach/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/af/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/af/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..7023a0f Binary files /dev/null and b/support/3rd_party/vlc/locale/af/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/am/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/am/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..7053148 Binary files /dev/null and b/support/3rd_party/vlc/locale/am/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/am_ET/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/am_ET/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..3275c4f Binary files /dev/null and b/support/3rd_party/vlc/locale/am_ET/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/an/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/an/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..dd7f221 Binary files /dev/null and b/support/3rd_party/vlc/locale/an/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ar/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ar/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..ad86b63 Binary files /dev/null and b/support/3rd_party/vlc/locale/ar/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/as_IN/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/as_IN/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..6d6f510 Binary files /dev/null and b/support/3rd_party/vlc/locale/as_IN/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ast/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ast/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..bf2575a Binary files /dev/null and b/support/3rd_party/vlc/locale/ast/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/be/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/be/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..ab95508 Binary files /dev/null and b/support/3rd_party/vlc/locale/be/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/bg/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/bg/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..7d82455 Binary files /dev/null and b/support/3rd_party/vlc/locale/bg/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/bn/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/bn/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..8073c3b Binary files /dev/null and b/support/3rd_party/vlc/locale/bn/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/bn_IN/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/bn_IN/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..33a1fa4 Binary files /dev/null and b/support/3rd_party/vlc/locale/bn_IN/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/br/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/br/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..181597e Binary files /dev/null and b/support/3rd_party/vlc/locale/br/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/brx/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/brx/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..0f8d2ac Binary files /dev/null and b/support/3rd_party/vlc/locale/brx/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/bs/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/bs/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..07b1e07 Binary files /dev/null and b/support/3rd_party/vlc/locale/bs/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ca/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ca/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..5d6e7b1 Binary files /dev/null and b/support/3rd_party/vlc/locale/ca/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ca@valencia/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ca@valencia/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..75053ca Binary files /dev/null and b/support/3rd_party/vlc/locale/ca@valencia/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/cgg/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/cgg/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..e8f29f6 Binary files /dev/null and b/support/3rd_party/vlc/locale/cgg/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/co/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/co/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..d8aebbd Binary files /dev/null and b/support/3rd_party/vlc/locale/co/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/cs/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/cs/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..e5874f2 Binary files /dev/null and b/support/3rd_party/vlc/locale/cs/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/cy/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/cy/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..7bab334 Binary files /dev/null and b/support/3rd_party/vlc/locale/cy/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/da/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/da/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..26aca14 Binary files /dev/null and b/support/3rd_party/vlc/locale/da/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/de/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/de/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..bbd0985 Binary files /dev/null and b/support/3rd_party/vlc/locale/de/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/el/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/el/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..cfe4b0e Binary files /dev/null and b/support/3rd_party/vlc/locale/el/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/en_GB/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/en_GB/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..982cdab Binary files /dev/null and b/support/3rd_party/vlc/locale/en_GB/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/eo/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/eo/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..4173e3f Binary files /dev/null and b/support/3rd_party/vlc/locale/eo/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/es/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/es/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..4b587e9 Binary files /dev/null and b/support/3rd_party/vlc/locale/es/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/es_MX/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/es_MX/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..1569a4c Binary files /dev/null and b/support/3rd_party/vlc/locale/es_MX/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/et/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/et/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..ab909c3 Binary files /dev/null and b/support/3rd_party/vlc/locale/et/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/eu/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/eu/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..9ae6776 Binary files /dev/null and b/support/3rd_party/vlc/locale/eu/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/fa/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/fa/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..571f98a Binary files /dev/null and b/support/3rd_party/vlc/locale/fa/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ff/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ff/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..f0c30cc Binary files /dev/null and b/support/3rd_party/vlc/locale/ff/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/fi/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/fi/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..9f73fb7 Binary files /dev/null and b/support/3rd_party/vlc/locale/fi/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/fr/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/fr/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..1ae0b86 Binary files /dev/null and b/support/3rd_party/vlc/locale/fr/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/fur/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/fur/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..9537ad6 Binary files /dev/null and b/support/3rd_party/vlc/locale/fur/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/fy/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/fy/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..736b717 Binary files /dev/null and b/support/3rd_party/vlc/locale/fy/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ga/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ga/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..784bbbf Binary files /dev/null and b/support/3rd_party/vlc/locale/ga/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/gd/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/gd/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..6b842d7 Binary files /dev/null and b/support/3rd_party/vlc/locale/gd/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/gl/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/gl/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..64938e7 Binary files /dev/null and b/support/3rd_party/vlc/locale/gl/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/gu/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/gu/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..895d83f Binary files /dev/null and b/support/3rd_party/vlc/locale/gu/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/he/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/he/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..d9098ce Binary files /dev/null and b/support/3rd_party/vlc/locale/he/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/hi/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/hi/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..5f85c12 Binary files /dev/null and b/support/3rd_party/vlc/locale/hi/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/hr/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/hr/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..65b10ba Binary files /dev/null and b/support/3rd_party/vlc/locale/hr/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/hu/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/hu/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..28f3d33 Binary files /dev/null and b/support/3rd_party/vlc/locale/hu/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/hy/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/hy/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..5974d3c Binary files /dev/null and b/support/3rd_party/vlc/locale/hy/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/id/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/id/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..9aa1226 Binary files /dev/null and b/support/3rd_party/vlc/locale/id/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ie/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ie/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..3c25dfe Binary files /dev/null and b/support/3rd_party/vlc/locale/ie/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/is/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/is/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..8fa3ff6 Binary files /dev/null and b/support/3rd_party/vlc/locale/is/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/it/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/it/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..9e92a9d Binary files /dev/null and b/support/3rd_party/vlc/locale/it/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ja/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ja/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..fd1fe9b Binary files /dev/null and b/support/3rd_party/vlc/locale/ja/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ka/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ka/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..7d6e1c3 Binary files /dev/null and b/support/3rd_party/vlc/locale/ka/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/kab/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/kab/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..0948080 Binary files /dev/null and b/support/3rd_party/vlc/locale/kab/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/kk/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/kk/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..55d7462 Binary files /dev/null and b/support/3rd_party/vlc/locale/kk/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/km/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/km/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..e10c312 Binary files /dev/null and b/support/3rd_party/vlc/locale/km/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/kn/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/kn/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..1de4ce3 Binary files /dev/null and b/support/3rd_party/vlc/locale/kn/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ko/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ko/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..a3936c6 Binary files /dev/null and b/support/3rd_party/vlc/locale/ko/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ks_IN/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ks_IN/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..e8f8f21 Binary files /dev/null and b/support/3rd_party/vlc/locale/ks_IN/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ku_IQ/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ku_IQ/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..af53edf Binary files /dev/null and b/support/3rd_party/vlc/locale/ku_IQ/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ky/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ky/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..ec7634d Binary files /dev/null and b/support/3rd_party/vlc/locale/ky/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/lg/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/lg/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..e552c1c Binary files /dev/null and b/support/3rd_party/vlc/locale/lg/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/lo/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/lo/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..5a3a49e Binary files /dev/null and b/support/3rd_party/vlc/locale/lo/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/lt/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/lt/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..81b12d5 Binary files /dev/null and b/support/3rd_party/vlc/locale/lt/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/lv/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/lv/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..ef7330e Binary files /dev/null and b/support/3rd_party/vlc/locale/lv/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/mai/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/mai/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..67eec76 Binary files /dev/null and b/support/3rd_party/vlc/locale/mai/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/mk/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/mk/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..05d1e60 Binary files /dev/null and b/support/3rd_party/vlc/locale/mk/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ml/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ml/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..78d9d8e Binary files /dev/null and b/support/3rd_party/vlc/locale/ml/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/mn/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/mn/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..bd2fec0 Binary files /dev/null and b/support/3rd_party/vlc/locale/mn/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/mr/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/mr/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..6aa173e Binary files /dev/null and b/support/3rd_party/vlc/locale/mr/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ms/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ms/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..7e4a0f3 Binary files /dev/null and b/support/3rd_party/vlc/locale/ms/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/my/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/my/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..28684c0 Binary files /dev/null and b/support/3rd_party/vlc/locale/my/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/nb/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/nb/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..d488cfc Binary files /dev/null and b/support/3rd_party/vlc/locale/nb/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ne/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ne/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..952d1e4 Binary files /dev/null and b/support/3rd_party/vlc/locale/ne/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/nl/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/nl/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..95fc9e5 Binary files /dev/null and b/support/3rd_party/vlc/locale/nl/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/nn/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/nn/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..c361486 Binary files /dev/null and b/support/3rd_party/vlc/locale/nn/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/oc/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/oc/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..085a37d Binary files /dev/null and b/support/3rd_party/vlc/locale/oc/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/or_IN/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/or_IN/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..43c4d26 Binary files /dev/null and b/support/3rd_party/vlc/locale/or_IN/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/pa/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/pa/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..bacd27d Binary files /dev/null and b/support/3rd_party/vlc/locale/pa/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/pl/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/pl/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..2fbb96e Binary files /dev/null and b/support/3rd_party/vlc/locale/pl/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ps/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ps/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..4cdf62a Binary files /dev/null and b/support/3rd_party/vlc/locale/ps/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/pt_BR/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/pt_BR/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..fb08d53 Binary files /dev/null and b/support/3rd_party/vlc/locale/pt_BR/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/pt_PT/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/pt_PT/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..e158070 Binary files /dev/null and b/support/3rd_party/vlc/locale/pt_PT/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ro/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ro/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..4e8eace Binary files /dev/null and b/support/3rd_party/vlc/locale/ro/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ru/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ru/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..d082c42 Binary files /dev/null and b/support/3rd_party/vlc/locale/ru/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/si/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/si/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..e043ad3 Binary files /dev/null and b/support/3rd_party/vlc/locale/si/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/sk/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/sk/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..b2b87da Binary files /dev/null and b/support/3rd_party/vlc/locale/sk/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/sl/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/sl/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..16dd427 Binary files /dev/null and b/support/3rd_party/vlc/locale/sl/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/sm/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/sm/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..16cafc0 Binary files /dev/null and b/support/3rd_party/vlc/locale/sm/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/sq/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/sq/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..1a04851 Binary files /dev/null and b/support/3rd_party/vlc/locale/sq/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/sr/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/sr/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..43eeff3 Binary files /dev/null and b/support/3rd_party/vlc/locale/sr/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/sv/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/sv/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..a80a6c2 Binary files /dev/null and b/support/3rd_party/vlc/locale/sv/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/sw/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/sw/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..9e88dc8 Binary files /dev/null and b/support/3rd_party/vlc/locale/sw/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ta/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ta/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..f592c55 Binary files /dev/null and b/support/3rd_party/vlc/locale/ta/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/te/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/te/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..0d7a735 Binary files /dev/null and b/support/3rd_party/vlc/locale/te/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/th/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/th/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..0df551f Binary files /dev/null and b/support/3rd_party/vlc/locale/th/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/tr/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/tr/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..1cef30b Binary files /dev/null and b/support/3rd_party/vlc/locale/tr/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/tt/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/tt/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..5d0c0a3 Binary files /dev/null and b/support/3rd_party/vlc/locale/tt/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/ug/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/ug/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..f96b1a4 Binary files /dev/null and b/support/3rd_party/vlc/locale/ug/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/uk/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/uk/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..f0fd9a2 Binary files /dev/null and b/support/3rd_party/vlc/locale/uk/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/uz/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/uz/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..f590f86 Binary files /dev/null and b/support/3rd_party/vlc/locale/uz/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/vi/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/vi/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..990daff Binary files /dev/null and b/support/3rd_party/vlc/locale/vi/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/wa/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/wa/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..1575f41 Binary files /dev/null and b/support/3rd_party/vlc/locale/wa/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/zh_CN/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/zh_CN/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..1deb00a Binary files /dev/null and b/support/3rd_party/vlc/locale/zh_CN/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/zh_TW/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/zh_TW/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..6976fd4 Binary files /dev/null and b/support/3rd_party/vlc/locale/zh_TW/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/locale/zu/LC_MESSAGES/vlc.mo b/support/3rd_party/vlc/locale/zu/LC_MESSAGES/vlc.mo new file mode 100644 index 0000000..7d985af Binary files /dev/null and b/support/3rd_party/vlc/locale/zu/LC_MESSAGES/vlc.mo differ diff --git a/support/3rd_party/vlc/lua/extensions/VLSub.luac b/support/3rd_party/vlc/lua/extensions/VLSub.luac new file mode 100644 index 0000000..fdd8b4e Binary files /dev/null and b/support/3rd_party/vlc/lua/extensions/VLSub.luac differ diff --git a/support/3rd_party/vlc/lua/http/css/main.css b/support/3rd_party/vlc/lua/http/css/main.css new file mode 100644 index 0000000..aebe6ce --- /dev/null +++ b/support/3rd_party/vlc/lua/http/css/main.css @@ -0,0 +1,260 @@ +root { + display: block; +} +body{ +} +#mainContainer{ + text-align: center; + width: 800px; +} +#controlContainer{ + width: 800px; +} +#libraryContainer{ + width: 800px; + margin-top: 2px; +} +#libraryTree{ + height: 300px; + overflow: auto; + white-space: nowrap; + text-align: left; +} +#viewContainer{ + width: 800px; +} +#mediaViewer{ + min-height: 500px; + background-color:#222; +} +#player{ + top:0px; + height: 500px; + width: 500px; + background-color:#222; +} +#seekSlider{ + width: 98%; + margin-left:5px; +} +#volumeSlider{ + width: 100px; + display: inline-block; +} +#currentVolume{ + display: inline-block; +} +#mediaTitle{ + position: absolute; + top: 0px; + left: 10px; + width: 600px; + text-align: center; + padding: 5px; + overflow: auto; +} +#currentTime{ + margin-top:-40px; + float: left; + text-align: left; +} + +#totalTime{ + margin-top:-40px; + float: right; + text-align: right; +} + +#controlTable{ + position:relative; + height: 150px; +} +#controlButtons{ + position: absolute; + top: 80px; + left: 10px; + padding: 0; + margin: 0; + text-align: left; +} + +.buttonszone{ + position:absolute; + width: 20px; + margin-left:-20px; + vertical-align:top; + padding:0px; + font-size:0px; + line-height:0px; +} + +#buttonszone1 { + top: 200px; +} + +#buttonszone2 { + top: 20px; +} + +.buttonszone li{ + float:left; + clear:left; + font-size:0px; +} + +.buttonszone li span{ + float:left +} + +.buttonszone_active { + margin-top: 0px; + width: 120px; + margin-left:-122px; + font-size:10px; + line-height:16px; +} + +.buttonszone_active li { + width:120px; +} + + +#volumesliderzone{ + position: absolute; + top: 105px; + left: 410px; + width: 210px; +} + +#volumeSlider{ + width: 208px; +} +#libraryTree ul li a { + border:none; +} +#artszone{ + position: absolute; + top: 0px; + right: 10px; + width: 150px; + height: 150px; + vertical-align: top; +} + +#seekContainer{ + position:absolute; + left: 5px; + top: 55px; + width: 79%; + vertical-align: bottom; +} + +.button48{ + width: 48px; + height: 48px; + margin: 5px 0px 5px 2px; + background: none; + border: none; + display: inline-block; + list-style: none; + float:left; + cursor: pointer; + background-image: url("../images/buttons.png"); + background-repeat: no-repeat; +} +.button48:hover{ + filter: alpha(opacity:0.5); + -ms-filter: "alpha(opacity=50)"; + -khtml-opacity: 0.50; + -moz-opacity: 0.5; + filter: alpha(opacity=50); + opacity: 0.5; +} + +.button{ + cursor: pointer; + display: inline-block; +} +#buttonOpen{ + background-position: 0px 0px; +} +#buttonStop{ + background-position: -576px 0px; +} +.playing { + background-position: -336px 0px; +} +.paused { + background-position: -384px 0px; +} +#buttonPrev{ + background-position: -144px 0px; +} +#buttonNext{ + background-position: -288px 0px; +} +#buttonFull{ + background-position: -192px 0px; +} +#buttonSout{ + background-position: -624px 0px; +} +#buttonEQ{ + background-position: -48px 0px; +} +#window_browse ol{ + list-style-type: none; +} +#window_browse ol li{ + list-style-type: none; + float: left; + padding: 5px; +} +.system_icon{ + width:80px; + text-align:center; + vertical-align:top; + display: inline-block; + cursor: pointer; + padding: 2px; + border: 1px solid #823D0A; + margin: 2px; + height: 92px; + background-color: #E1E1E1; + overflow: hidden; +} +#window_create_stream table tr td{ + font-size: 11px; +} + +#window_equalizer div div{ + text-align: center; + font-size: 11px; + padding: 0px; +} + +#window_equalizer { + height:80px !important ; +} + +.eqBand{ + margin-bottom: 10px; + margin-top: 10px; + height: 400px; + font-size: 1.5em; +} +.footer{ + margin-top: 30px; + text-align: center; + font-size: 11px; +} + +div.centered{ + margin-left: auto; + margin-right: auto; +} + +.hidden{ + visibility: hidden; + display: none; +} diff --git a/support/3rd_party/vlc/lua/http/css/mobile.css b/support/3rd_party/vlc/lua/http/css/mobile.css new file mode 100644 index 0000000..6b42c1e --- /dev/null +++ b/support/3rd_party/vlc/lua/http/css/mobile.css @@ -0,0 +1,188 @@ +root { + display: block; +} +#content{ + +} +body{ + font: 11pt Helvetica, Arial, sans-serif; + background-color:#EEE; + margin: 0px; +} + +#libraryTree{ + height: 300px; + overflow:scroll; + white-space: nowrap; + text-align: left; +} + +#mediaViewer{ + min-height: 500px; +} +#meta { + position:relative; + width:100%; +} +#seekSlider{ + width: 100%; +} + +#volumeSlider{ + width: 100%; + display: inline-block; +} +#currentVolume{ + display: inline-block; +} +#mediaTitle{ + text-align:center; + width:100%; + margin-top:5px; +} +#currentTime{ + float: left; + text-align: left; +} +#totalTime{ + float: right; + text-align: right; +} +#play_controls, #controls{ + margin-top:30px; + width:95%; + margin-left:auto; + margin-right:auto; +} + +#controlTable{ + position:relative; + height: 150px; +} + +#buttonszone li{ + float: left; +} + +#art{ + top:0px; + width:150px; + height:150px; + margin:0 auto; + box-sizing:border-box; + -webkit-box-sizing:border-box; +} + +.ui-slider-range{ + background-color:#FFB200; + background:#FFB200 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; +} + + +#buttons{ + --button-scale: 1.2; + margin:0 auto; + position: relative; + width: calc(288px * var(--button-scale)); +} +.button48{ + width: calc(48px * var(--button-scale)); + height: calc(48px * var(--button-scale)); + margin: 5px 0px 5px 0px; + background: none; + border: none; + display: inline-block; + cursor: pointer; + background-image: url("../images/buttons.png"); + background-size: calc(672px * var(--button-scale)); + background-repeat: no-repeat; +} + +.button{ + cursor: pointer; + display: inline-block; +} +#buttonOpen{ + background-position: 0px 0px; +} +#buttonStop{ + background-position: calc(-576px * var(--button-scale)) 0px; +} +#buttonRewd{ + background-position: calc(-528px * var(--button-scale)) 0px; +} +#buttonFwrd{ + background-position: calc(-96px * var(--button-scale)) 0px; +} +.playing { + background-position: calc(-336px * var(--button-scale)) 0px; +} +.paused { + background-position: calc(-384px * var(--button-scale)) 0px; +} +#buttonPrev{ + background-position: calc(-144px * var(--button-scale)) 0px; +} +#buttonNext{ + background-position: calc(-288px * var(--button-scale)) 0px; +} +#buttonFull{ + background-position: calc(-192px * var(--button-scale)) 0px; +} +#buttonSout{ + background-position: calc(-624px * var(--button-scale)) 0px; +} +#buttonEQ{ + background-position: calc(-48px * var(--button-scale)) 0px; +} +#window_browse ol{ + list-style-type: none; +} +#window_browse ol li{ + list-style-type: none; + float: left; + padding: 5px; +} +.system_icon{ + width:80px; + text-align:center; + vertical-align:top; + display: inline-block; + cursor: pointer; + padding: 2px; + border: 1px solid #823D0A; + margin: 2px; + height: 92px; + background-color: #E1E1E1; + overflow: hidden; +} +#window_create_stream table tr td{ + font-size: 11px; +} + +#window_equalizer div div{ + text-align: center; + font-size: 11px; + padding: 0px; +} +.eqBand{ + margin-bottom: 10px; + margin-top: 10px; + height: 400px; + font-size: 1.5em; +} +.footer{ + margin-top: 30px; + text-align: center; + font-size: 11px; +} + +div.centered{ + margin-left: auto; + margin-right: auto; +} + +.hidden{ + visibility: hidden; + display: none; +} diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 0000000..23e5db8 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100644 index 0000000..a5f651e Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 0000000..2eace21 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 0000000..f8483d0 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png new file mode 100644 index 0000000..2e97279 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..e7d01fa Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 0000000..d2783ca Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 0000000..5a0a5d8 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png new file mode 100644 index 0000000..0d8cfed Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_222222_256x240.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..6cb03be Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_222222_256x240.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100644 index 0000000..fdf7b1e Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_228ef1_256x240.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 0000000..dc2f36b Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_ef8c08_256x240.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 0000000..0b7f9d7 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_ffd27a_256x240.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000..547a2b9 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/css/ui-lightness/images/ui-icons_ffffff_256x240.png differ diff --git a/support/3rd_party/vlc/lua/http/css/ui-lightness/jquery-ui-1.8.13.custom.css b/support/3rd_party/vlc/lua/http/css/ui-lightness/jquery-ui-1.8.13.custom.css new file mode 100644 index 0000000..f3e2b50 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/css/ui-lightness/jquery-ui-1.8.13.custom.css @@ -0,0 +1,581 @@ +/* + * jQuery UI CSS Framework 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } + +.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } +.ui-selecting { background: #FECA40; } +.ui-selected { background: #F39814; color: white; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* + * jQuery UI Resizable 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; + /* http://bugs.jqueryui.com/ticket/7233 + - Resizable: resizable handles fail to work in IE if transparent and content overlaps + */ + background-image:url(data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=); +} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* + * jQuery UI Selectable 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } +/* + * jQuery UI Autocomplete 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.13 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* + * jQuery UI Tabs 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } diff --git a/support/3rd_party/vlc/lua/http/custom.lua b/support/3rd_party/vlc/lua/http/custom.lua new file mode 100644 index 0000000..509d415 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/custom.lua @@ -0,0 +1,19 @@ +-- make xgettext fetch strings from html code +function gettext(text) print(vlc.gettext._(text)) end + +local _G = _G + +local dialogs = setmetatable({}, { +__index = function(self, name) + -- Cache the dialogs + return rawget(self, name) or + rawget(rawset(self, name, process(http_dir.."/dialogs/"..name)), name) +end}) + +_G.dialogs = function(...) + for i=1, select("#",...) do + dialogs[(select(i,...))]() + end +end + +_G.vlm = vlc.vlm() diff --git a/support/3rd_party/vlc/lua/http/dialogs/batch_window.html b/support/3rd_party/vlc/lua/http/dialogs/batch_window.html new file mode 100644 index 0000000..e402d1f --- /dev/null +++ b/support/3rd_party/vlc/lua/http/dialogs/batch_window.html @@ -0,0 +1,32 @@ + +
"> + +
diff --git a/support/3rd_party/vlc/lua/http/dialogs/browse_window.html b/support/3rd_party/vlc/lua/http/dialogs/browse_window.html new file mode 100644 index 0000000..c66ac49 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/dialogs/browse_window.html @@ -0,0 +1,44 @@ + + +
"> +
+
    +
  1. +
+
+
diff --git a/support/3rd_party/vlc/lua/http/dialogs/create_stream.html b/support/3rd_party/vlc/lua/http/dialogs/create_stream.html new file mode 100644 index 0000000..1eb077f --- /dev/null +++ b/support/3rd_party/vlc/lua/http/dialogs/create_stream.html @@ -0,0 +1,394 @@ + +
"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + + + + +
+ + + + + + + +
+ + + +   + +
+ + + +   +
+ + + + + + + + + + + + + +
+
+
+ +   
+ + + +
" opendialog="window_browse">
+
" >
+
+ +
+ + diff --git a/support/3rd_party/vlc/lua/http/dialogs/equalizer_window.html b/support/3rd_party/vlc/lua/http/dialogs/equalizer_window.html new file mode 100644 index 0000000..a81bb13 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/dialogs/equalizer_window.html @@ -0,0 +1,54 @@ + +
"> +
+
0dB
+
+
+
+
+
diff --git a/support/3rd_party/vlc/lua/http/dialogs/error_window.html b/support/3rd_party/vlc/lua/http/dialogs/error_window.html new file mode 100644 index 0000000..2237bab --- /dev/null +++ b/support/3rd_party/vlc/lua/http/dialogs/error_window.html @@ -0,0 +1,19 @@ + +
"> +
+
+
diff --git a/support/3rd_party/vlc/lua/http/dialogs/mosaic_window.html b/support/3rd_party/vlc/lua/http/dialogs/mosaic_window.html new file mode 100644 index 0000000..a93c0b6 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/dialogs/mosaic_window.html @@ -0,0 +1,146 @@ + + +
"> + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + + + + +
+
+

+ + + + + + + + + + +

+
+
diff --git a/support/3rd_party/vlc/lua/http/dialogs/offset_window.html b/support/3rd_party/vlc/lua/http/dialogs/offset_window.html new file mode 100644 index 0000000..05a0fb3 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/dialogs/offset_window.html @@ -0,0 +1,79 @@ + +
"> +
+
">
+
1x
+
+
+
">
+
0s
+
+
+
">
+
0s
+
diff --git a/support/3rd_party/vlc/lua/http/dialogs/stream_config_window.html b/support/3rd_party/vlc/lua/http/dialogs/stream_config_window.html new file mode 100644 index 0000000..12737aa --- /dev/null +++ b/support/3rd_party/vlc/lua/http/dialogs/stream_config_window.html @@ -0,0 +1,40 @@ + +
"> + + + + + + + + + + + + + + + + + +
+
diff --git a/support/3rd_party/vlc/lua/http/dialogs/stream_window.html b/support/3rd_party/vlc/lua/http/dialogs/stream_window.html new file mode 100644 index 0000000..86ff218 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/dialogs/stream_window.html @@ -0,0 +1,99 @@ + + +
"> +
" opendialog="window_create_stream">
+
" opendialog="window_create_mosaiac">
+
">
+
">
+
">
+
+ +
+ +
+
"> + + + + + + + + + + + + + + + + + +
+
diff --git a/support/3rd_party/vlc/lua/http/favicon.ico b/support/3rd_party/vlc/lua/http/favicon.ico new file mode 100644 index 0000000..a7d6288 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/favicon.ico differ diff --git a/support/3rd_party/vlc/lua/http/images/Audio-48.png b/support/3rd_party/vlc/lua/http/images/Audio-48.png new file mode 100644 index 0000000..a32e6aa Binary files /dev/null and b/support/3rd_party/vlc/lua/http/images/Audio-48.png differ diff --git a/support/3rd_party/vlc/lua/http/images/Back-48.png b/support/3rd_party/vlc/lua/http/images/Back-48.png new file mode 100644 index 0000000..0363d84 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/images/Back-48.png differ diff --git a/support/3rd_party/vlc/lua/http/images/Folder-48.png b/support/3rd_party/vlc/lua/http/images/Folder-48.png new file mode 100644 index 0000000..59fe638 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/images/Folder-48.png differ diff --git a/support/3rd_party/vlc/lua/http/images/Other-48.png b/support/3rd_party/vlc/lua/http/images/Other-48.png new file mode 100644 index 0000000..83fae77 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/images/Other-48.png differ diff --git a/support/3rd_party/vlc/lua/http/images/Video-48.png b/support/3rd_party/vlc/lua/http/images/Video-48.png new file mode 100644 index 0000000..8a2b82d Binary files /dev/null and b/support/3rd_party/vlc/lua/http/images/Video-48.png differ diff --git a/support/3rd_party/vlc/lua/http/images/buttons.png b/support/3rd_party/vlc/lua/http/images/buttons.png new file mode 100644 index 0000000..7dee3a5 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/images/buttons.png differ diff --git a/support/3rd_party/vlc/lua/http/images/speaker-32.png b/support/3rd_party/vlc/lua/http/images/speaker-32.png new file mode 100644 index 0000000..5a7fc13 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/images/speaker-32.png differ diff --git a/support/3rd_party/vlc/lua/http/images/vlc-48.png b/support/3rd_party/vlc/lua/http/images/vlc-48.png new file mode 100644 index 0000000..327b538 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/images/vlc-48.png differ diff --git a/support/3rd_party/vlc/lua/http/images/vlc16x16.png b/support/3rd_party/vlc/lua/http/images/vlc16x16.png new file mode 100644 index 0000000..aec7160 Binary files /dev/null and b/support/3rd_party/vlc/lua/http/images/vlc16x16.png differ diff --git a/support/3rd_party/vlc/lua/http/index.html b/support/3rd_party/vlc/lua/http/index.html new file mode 100644 index 0000000..ed1d839 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/index.html @@ -0,0 +1,313 @@ + + + + + <?vlc gettext("VLC media player - Web Interface") ?> + + + + + + + + + + + + + + + +
+
+
+
+
    +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
+
    +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
+
+
volume
+
50%
+
+
+ Album Art +
+
+
+
">
+
00:00:00
+
00:00:00
+
+
+
+
+
    +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
+
+
+
+
+
+


+
+
+
+ +
+
+
"> +

+ +

+

+ +

+
+
"> +

+ Main Controls will operate the stream instead of the main interface.") ?> + Manage Streams") ?> + "> +

+

+ Media Viewer window will display the stream.") ?> + Main Controls.") ?> +

+

+ Library will be the subject of the stream.") ?> +

+

+ Open Stream button again.") ?> +

+

+ +

+
+ + + diff --git a/support/3rd_party/vlc/lua/http/js/common.js b/support/3rd_party/vlc/lua/http/js/common.js new file mode 100644 index 0000000..d766699 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/js/common.js @@ -0,0 +1,93 @@ +var intv = 0; +var ccmd = ""; +var video_types = [ + "asf", "avi", "bik", "bin", "divx", "drc", "dv", "f4v", "flv", "gxf", "iso", + "m1v", "m2v", "m2t", "m2ts", "m4v", "mkv", "mov", + "mp2", "mp4", "mpeg", "mpeg1", + "mpeg2", "mpeg4", "mpg", "mts", "mtv", "mxf", "mxg", "nuv", + "ogg", "ogm", "ogv", "ogx", "ps", + "rec", "rm", "rmvb", "rpl", "thp", "ts", "txd", "vob", "wmv", "xesc" ]; +var audio_types = [ + "3ga", "a52", "aac", "ac3", "ape", "awb", "dts", "flac", "it", + "m4a", "m4p", "mka", "mlp", "mod", "mp1", "mp2", "mp3", + "oga", "ogg", "oma", "s3m", "spx", "thd", "tta", + "wav", "wma", "wv", "xm" +]; +var playlist_types = [ + "asx", "b4s", "cue", "ifo", "m3u", "m3u8", "pls", "ram", "rar", + "sdp", "vlc", "xspf", "zip", "conf" +]; + +var stream_server = window.location.hostname; + +function format_time(s) { + var hours = Math.floor(s / 3600); + var minutes = Math.floor((s / 60) % 60); + var seconds = Math.floor(s % 60); + hours = hours < 10 ? "0" + hours : hours; + minutes = minutes < 10 ? "0" + minutes : minutes; + seconds = seconds < 10 ? "0" + seconds : seconds; + return hours + ":" + minutes + ":" + seconds; +} + +function toFloat(text) { + return parseFloat(text.replace(',', '.')); +} + +function setIntv() { + if (intv > 0) { + intv++; + setTimeout(setIntv, 500); + } else { + intv = 0; + } + if (intv > 5) { + var nt = 0; + switch (ccmd) { + case 'prev': + nt = Math.max(0, $('#seekSlider').slider('value') - 10); + break; + case 'next': + nt = Math.max(0, $('#seekSlider').slider('value') + 10); + break; + } + switch (current_que) { + case 'main': + sendCommand({ + 'command': 'seek', + 'val': Math.round((nt / 100) * $('#seekSlider').attr('totalLength')), + plreload: false + }); + break; + case 'stream': + sendVLMCmd('control Current seek ' + nt); + break; + } + } +} + +function isMobile() { + var a = navigator.userAgent || navigator.vendor || window.opera; + if (/android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) { + return true; + } + return false; +} + +function createElementLi(name, type, dir, ext) { + var icon = "Other-48.png"; + if( type == "dir" && name == '..' ) + icon = "Back-48.png"; + else if( type == 'dir' ) + icon = "Folder-48.png"; + else if( $.inArray(ext, video_types) != -1 ) + icon = "Video-48.png"; + else if( $.inArray(ext, audio_types) != -1 ) + icon = "Audio-48.png"; + else if( $.inArray(ext, playlist_types) != -1 ) + // TODO: Playlist-48.png + icon = "Other-48.png"; + var open = type == "dir" ? "opendir='" + dir + "'" : (type == "file" ? "openfile='" + dir + "'" : "opendev='" + dir + "'"); + var str = "
  • " + name + "
    " + name + "
  • "; + return str; +} diff --git a/support/3rd_party/vlc/lua/http/js/controllers.js b/support/3rd_party/vlc/lua/http/js/controllers.js new file mode 100644 index 0000000..c7bbdb6 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/js/controllers.js @@ -0,0 +1,532 @@ +var currentArt = null; +var current_que = 'main'; +var current_playlist_id = -1; +var previous_playlist_id = -1; +var seek_sec = 0; + +function updateArt(url) { + $('#albumArt').fadeOut(500, function () { + $(this).addClass('hidden').removeAttr('height').removeAttr('width').attr('src', url); + }); +} + +function updateStatus() { + $.ajax({ + url: 'requests/status.xml', + success: function (data, status, jqXHR) { + if (current_que == 'main') { + $('.dynamic').empty(); + $('#mediaTitle').append($('[name="filename"]', data).text()); + $('#totalTime').append(format_time($('length', data).text())); + $('#currentTime').append(format_time($('time', data).text())); + if (!$('#seekSlider').data('clicked')) { + $('#seekSlider').slider({ + value: toFloat($('position', data).text()) * 100 + }); + } + $('#currentVolume').append(Math.round($('volume', data).text() / 2.56) + '%'); + /* Don't interfere with the user's action */ + if (!$('#volumeSlider').data('clicked')) { + $('#volumeSlider').slider({ + value: ($('volume', data).text() / 5.12) + }); + } + $('#rateSlider').slider({ + value: ($('rate', data).text()) + }); + $('#currentRate').append(Math.round($('rate', data).text() * 100) / 100 + 'x'); + $('#audioSlider').slider({ + value: ($('audiodelay', data).text()) + }); + $('#currentAudioDelay').append(Math.round($('audiodelay', data).text() * 100) / 100 + 's'); + $('#subtitleSlider').slider({ + value: ($('subtitledelay', data).text()) + }); + $('#currentSubtitleDelay').append(Math.round($('subtitledelay', data).text() * 100) / 100 + 's'); + $('#seekSlider').attr('totalLength', $('length', data).text()); + $('#buttonPlay').attr('state', $('state', data).text()).attr('mrl', $('[name="filename"]', data).text()); + if ($('state', data).text() == 'playing') { + $('#buttonPlay').removeClass('paused').addClass('playing'); + } else { + $('#buttonPlay').removeClass('playing').addClass('paused'); + } + if ($('random', data).text() == 'true') { + $('#buttonShuffle').removeClass('ui-state-default').addClass('ui-state-active'); + } else { + $('#buttonShuffle').addClass('ui-state-default').removeClass('ui-state-active'); + } + if ($('loop', data).text() == 'true') { + $('#buttonLoop').removeClass('ui-state-default').addClass('ui-state-active'); + } else { + $('#buttonLoop').addClass('ui-state-default').removeClass('ui-state-active'); + } + if ($('repeat', data).text() == 'true') { + $('#buttonRepeat').removeClass('ui-state-default').addClass('ui-state-active'); + } else { + $('#buttonRepeat').addClass('ui-state-default').removeClass('ui-state-active'); + } + + if ($('[name="artwork_url"]', data).text() != currentArt && $('[name="artwork_url"]', data).text() != "") { + var tmp = new Date(); + currentArt = $('[name="artwork_url"]', data).text(); + updateArt('/art?' + tmp.getTime()); + } else if ($('[name="artwork_url"]', data).text() == "" && currentArt != 'images/vlc-48.png') { + currentArt = 'images/vlc-48.png'; + updateArt(currentArt); + } + + current_playlist_id = parseInt($('currentplid', data).text()); + if (previous_playlist_id != current_playlist_id) { + updatePlayList(); + previous_playlist_id = current_playlist_id; + } + + seek_sec = parseInt($('seek_sec', data).text()); + + if (pollStatus) { + setTimeout(updateStatus, 1000); + } + + } + $('band', data).each(function () { + var id = $(this).attr('id'); + var value = $(this).text() ? $(this).text() : 0; + var freq = ["60 Hz","170 Hz", "310 Hz", "600 Hz", "1 kHz","3 kHz", "6 kHz", "12 kHz" , "14 kHz" , "16 kHz" ]; + if (!$('#eq_container' + id).length) { + $('#window_equalizer').append('
    ' + value + 'dB
    ' + freq[id] + '
    '); + $('#eq' + id).slider({ + min: -20, + max: 20, + step: 0.1, + range: "min", + value: value, + animate: true, + orientation: "vertical", + stop: function (event, ui) { + $('#' + $(this).attr('id') + '_txt').empty().append(ui.value + 'dB'); + sendCommand({ + command: 'equalizer', + val: ui.value, + band: $(this).attr('id').substr(2) + }) + }, + slide: function (event, ui) { + $('#' + $(this).attr('id') + '_txt').empty().append(ui.value + 'dB'); + } + }); + } else { + $('#eq' + id).slider({ + value: value + }); + $('#eq' + id + '_txt').empty().append(Math.round(value * 100) / 100 + 'dB'); + } + }); + $('#preamp').slider('value', $('preamp', data).text()); + $('#preamp_txt').empty().append(Math.round($('preamp', data).text() * 100) / 100 + 'dB'); + }, + error: function (jqXHR, status, error) { + setTimeout(updateStatus, 500); + } + }); +} + +function updatePlayList(force_refresh) { + if (force_refresh) { + //refresh playlist.. + $('#libraryTree').jstree('refresh', -1); + } else { + //iterate through playlist.. + var match = false; + $('.jstree-leaf').each(function(){ + var id = $(this).attr('id'); + if (id != null && id.substr(0,5) == 'plid_') { + if ( id.substr(5) == current_playlist_id ) { + $(this).addClass('ui-state-highlight'); + $(this).attr('current', 'current'); + this.scrollIntoView(true); + match = true; + } else { + $(this).removeClass('ui-state-highlight'); + $(this).removeAttr('current'); + } + if ($(this).children('a').size() > 0) { + $($(this).children('a')[0]).removeClass('ui-state-active'); + } + } + }); + //local title wasn't found - refresh playlist.. + if (!match) updatePlayList(true); + } +} + +function sendCommand(params, append) { + if (current_que == 'stream') { + $.ajax({ + url: 'requests/status.xml', + data: params, + success: function (data, status, jqXHR) { + if (append != undefined) { + eval(append); + } + updateStatus(); + } + }); + } else { + if (params.plreload === false) { + $.ajax({ + url: 'requests/status.xml', + data: params, + success: function (data, status, jqXHR) { + if (append != undefined) { + eval(append); + } + } + }); + } else { + $.ajax({ + url: 'requests/status.xml', + data: params, + success: function (data, status, jqXHR) { + if (append != undefined) { + eval(append); + } + } + }); + } + } +} + +function browse(dir) { + dir = dir == undefined ? 'file://~' : dir; + $.ajax({ + url: 'requests/browse.xml', + data: 'uri=' + encodeURIComponent(dir), + success: function (data, status, jqXHR) { + var tgt = browse_target.indexOf('__') == -1 ? browse_target : browse_target.substr(0, browse_target.indexOf('__')); + $('#browse_elements').empty(); + $('element', data).each(function () { + var ext = $(this).attr('name').substr($(this).attr('name').lastIndexOf('.') + 1).toLowerCase(); + if ($(this).attr('type') == 'dir' || $.inArray(ext, video_types) != -1 || $.inArray(ext, audio_types) != -1 || $.inArray(ext, playlist_types) != -1) { + $('#browse_elements').append(createElementLi($(this).attr('name'), $(this).attr('type'), $(this).attr('uri'), ext)); + } + }); + $('[opendir]').dblclick(function () { + browse($(this).attr('opendir')); + }); + $('[openfile]').dblclick(function () { + switch (tgt) { + case '#stream_input': + $(browse_target).val($(this).attr('openfile')); + break; + case '#mosaic_open': + $('li', browse_target).remove(); + $(browse_target).append(this); + $(this).css({ + 'margin-left': -40, + 'margin-top': -46, + 'float': 'left' + }); + break; + case '#mobile': + break; + default: + sendCommand('command=in_play&input=' + encodeURIComponent($(this).attr('openfile'))); + updatePlayList(true); + break; + } + $('#window_browse').dialog('close'); + }); + $('[opendir]').click(function () { + switch (tgt) { + case '#mobile': + browse($(this).attr('opendir')); + break; + default: + break; + } + }); + $('[openfile]').click(function () { + switch (tgt) { + case '#mobile': + sendCommand('command=in_play&input=' + encodeURIComponent($(this).attr('openfile')), "window.location='mobile.html'"); + break; + default: + break; + } + }); + switch (tgt) { + case '#mobile': + break; + default: + $('[selectable]').selectable(); + break; + } + }, + error: function (jqXHR, status, error) { + setTimeout('browse("' + dir + '")', 1041); + } + }); +} + +function updateStreams() { + $.ajax({ + url: 'requests/vlm.xml', + success: function (data, status, jqXHR) { + $('#stream_info').accordion("destroy"); + $('#stream_info').empty(); + $('broadcast', data).each(function () { + var stream_div = $('#stream_status_').clone(); + var name = $(this).attr('name'); + var loop = $(this).attr('loop') == 'yes'; + var playing = $('instance', $(this)).attr('state') == 'playing'; + var file = $('input', $(this)).text(); + var output = $('output', $(this)).text(); + var time = isNaN(Math.round($('instance', $(this)).attr('time') / 1000000)) ? 0 : Math.round($('instance', $(this)).attr('time') / 1000000); + var length = isNaN(Math.round($('instance', $(this)).attr('length') / 1000000)) ? 0 : Math.round($('instance', $(this)).attr('length') / 1000000); + $('[id]', stream_div).each(function () { + $(this).attr('id', $(this).attr('id') + name); + }); + $(stream_div).attr('id', $(stream_div).attr('id') + name); + $('#stream_title_' + name, stream_div).append(name); + $('#stream_file_' + name, stream_div).append(file); + $('#stream_pos_' + name, stream_div).slider({ + value: 0, + range: "min", + min: 0, + slide: function (event, ui) { + $("#stream_current_time_" + name, stream_div).empty(); + $("#stream_current_time_" + name, stream_div).append(format_time(ui.value)); + $("#stream_total_time_" + name, stream_div).empty(); + $("#stream_total_time_" + name, stream_div).append(format_time($('#stream_pos_' + name, stream_div).slider('option', 'max'))); + sendVLMCmd('control ' + name + ' seek ' + Math.round(ui.value / $('#stream_pos_' + name, stream_div).slider('option', 'max') * 100)); + }, + change: function (event, ui) { + $("#stream_current_time_" + name, stream_div).empty(); + $("#stream_current_time_" + name, stream_div).append(format_time(ui.value)); + $("#stream_total_time_" + name, stream_div).empty(); + $("#stream_total_time_" + name, stream_div).append(format_time($('#stream_pos_' + name, stream_div).slider('option', 'max'))); + } + }); + $('#button_stream_stop_' + name, stream_div).click(function () { + sendVLMCmd('control ' + name + ' stop'); + return false; + }); + $('#button_stream_play_' + name, stream_div).click(function () { + if ($('span', this).hasClass('ui-icon-pause')) { + sendVLMCmd('control ' + name + ' pause'); + } else { + sendVLMCmd('control ' + name + ' play'); + } + }); + $('#button_stream_loop_' + name, stream_div).click(function () { + if (loop) { + sendVLMCmd('setup ' + name + ' unloop'); + } else { + sendVLMCmd('setup ' + name + ' loop'); + } + }); + $('#button_stream_delete_' + name, stream_div).click(function () { + sendVLMCmd('del ' + name); + }); + $('#stream_pos_' + name, stream_div).slider({ + max: length, + value: time + }); + if (playing) { + $('span', $('#button_stream_play_' + name, stream_div)).removeClass('ui-icon-play'); + $('span', $('#button_stream_play_' + name, stream_div)).addClass('ui-icon-pause'); + } + if (loop) { + $('#button_stream_loop_' + name, stream_div).addClass('ui-state-active'); + } + $(stream_div).css({ + 'visibility': '', + 'display': '' + }); + $('#stream_info').append(stream_div); + + }); + $('.button').hover( + + function () { + $(this).addClass('ui-state-hover'); + }, function () { + $(this).removeClass('ui-state-hover'); + }); + $('#stream_info').accordion({ + header: "h3", + collapsible: true, + autoHeight: true + }); + if (current_que == 'stream') { + $('.dynamic').empty(); + $('#mediaTitle').append($('[name="Current"] input', data).text()); + $('#totalTime').append(format_time(isNaN($('[name="Current"] instance', data).attr('length')) ? 0 : $('[name="Current"] instance', data).attr('length') / 1000000)); + $('#currentTime').append(format_time(isNaN($('[name="Current"] instance', data).attr('time')) ? 0 : $('[name="Current"] instance', data).attr('time') / 1000000)); + $('#seekSlider').slider({ + value: (($('[name="Current"] instance', data).attr('time') / 1000000) / ($('[name="Current"] instance', data).attr('length') / 1000000) * 100) + }); + $('#seekSlider').attr('totalLength', $('[name="Current"] instance', data).attr('length') / 1000000); + $('#buttonPlay').attr('state', $('[name="Current"] instance', data).length > 0 ? $('[name="Current"] instance', data).attr('state') : 'stopped'); + if ($('[name="Current"] instance', data).attr('state') == 'playing') { + $('#buttonPlay').removeClass('paused'); + $('#buttonPlay').addClass('playing'); + } else { + $('#buttonPlay').removeClass('playing'); + $('#buttonPlay').addClass('paused'); + } + setTimeout(updateStreams, 1000); + } + } + }); +} + +function updateEQ() { + $.ajax({ + url: 'requests/status.xml', + success: function (data, status, jqXHR) { + $('band', data).each(function () { + var freq = ["60 Hz","170 Hz", "310 Hz", "600 Hz", "1 kHz","3 kHz", "6 kHz", "12 kHz" , "14 kHz" , "16 kHz" ]; + var id = $(this).attr('id'); + var value = $(this).text() ? $(this).text() : 0; + if (!$('#eq_container' + id).length) { + $('#window_equalizer').append('
    ' + value + 'dB
    ' + freq[id] + '
    '); + $('#eq' + id).slider({ + min: -20, + max: 20, + step: 0.1, + range: "min", + value: value, + animate: true, + orientation: "vertical", + stop: function (event, ui) { + $('#' + $(this).attr('id') + '_txt').empty().append(ui.value + 'dB'); + sendEQCmd({ + command: 'equalizer', + val: ui.value, + band: $(this).attr('id').substr(2) + }) + }, + slide: function (event, ui) { + $('#' + $(this).attr('id') + '_txt').empty().append(ui.value + 'dB'); + } + }); + } else { + $('#eq' + id).slider({ + value: value + }); + $('#eq' + id + '_txt').empty().append(Math.round(value * 100) / 100 + 'dB'); + } + }); + $('#preamp').slider('value', $('preamp', data).text()); + $('#preamp_txt').empty().append(Math.round($('preamp', data).text() * 100) / 100 + 'dB'); + } + }) +} + +function sendVLMCmd(command, append) { + var commands = command.split(';'); + if (commands.length > 1) { + sendBatchVLMCmd(command, append); + } else { + if (current_que == 'main') { + $.ajax({ + url: 'requests/vlm_cmd.xml', + data: 'command=' + encodeURIComponent(command), + success: function (data, status, jqXHR) { + if ($('error', data).text()) { + $('#error_container').append('
    ' + $('error', data).text() + '
    '); + $('#window_error').dialog('open'); + } + if (append != undefined) { + eval(append); + } + updateStreams(); + } + }); + } else { + $.ajax({ + url: 'requests/vlm_cmd.xml', + data: 'command=' + encodeURIComponent(command), + success: function (data, status, jqXHR) { + if ($('error', data).text()) { + $('#error_container').append('
    ' + $('error', data).text() + '
    '); + $('#window_error').dialog('open'); + } + updateStreams(); + } + }); + } + } +} + +function sendBatchVLMCmd(command, append) { + var commands = command.split(';'); + $.ajax({ + url: 'requests/vlm_cmd.xml', + data: 'command=' + encodeURIComponent(commands.shift()), + success: function (data, status, jqXHR) { + if ($('error', data).text()) { + $('#error_container').append('
    ' + $('error', data).text() + '
    '); + $('#window_error').dialog('open'); + } + sendVLMCmd(commands.join(';'), append); + } + }); +} + +function sendEQCmd(params) { + $.ajax({ + url: 'requests/status.xml', + data: params, + success: function (data, status, jqXHR) { + updateEQ(); + } + }); +} + +$(function () { + $('#albumArt').load(function () { + var width = $(this).width(); + var height = $(this).height(); + var max = Math.max(width, height); + if (max > 150) { + var ratio = 150 / max; + width = Math.floor(width * ratio); + height = Math.floor(height * ratio); + } + $(this).attr('width', width).attr('height', height).css('margin-left', Math.floor((150 - width) / 2)).css('margin-top', Math.floor((150 - height) / 2)).removeClass('hidden').fadeIn(); + }); + $('#libraryTree').jstree({ + "xml_data": { + "ajax": { + "url": "requests/playlist_jstree.xml" + }, + "xsl": "nest" + }, + "themeroller": { + "item_leaf": "ui-icon-video" + }, + "core": { + "initially_open": ["plid_1", "plid_2", "plid_3"] + }, + "plugins": ["xml_data", "ui", "themeroller"] + }).bind("loaded.jstree", function (event, data) { + $('[current]', '[id^="plid_"]').each(function () { + $(this).addClass('ui-state-highlight'); + current_playlist_id = $(this).attr('id').substr(5); + }); + }).bind("refresh.jstree", function (event, data) { + $('[current]', '[id^="plid_"]').each(function () { + $(this).addClass('ui-state-highlight'); + current_playlist_id = $(this).attr('id').substr(5); + }); + }).delegate("#plid_0 li.jstree-leaf a", "click", function (event, data) { + event.preventDefault(); + current_playlist_id = $(this).parent().attr('id').substr(5); + sendCommand('command=pl_play&id=' + current_playlist_id); + }); + updateStatus(); + updateStreams(); + updateEQ(); +}); diff --git a/support/3rd_party/vlc/lua/http/js/jquery.jstree.js b/support/3rd_party/vlc/lua/http/js/jquery.jstree.js new file mode 100644 index 0000000..a47e949 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/js/jquery.jstree.js @@ -0,0 +1,4544 @@ +/* + * jsTree 1.0-rc3 + * http://jstree.com/ + * + * Copyright (c) 2010 Ivan Bozhanov (vakata.com) + * + * Licensed same as jquery - under the terms of either the MIT License or the GPL Version 2 License + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * $Date: 2011-02-09 01:17:14 +0200 (ср, 09 февр 2011) $ + * $Revision: 236 $ + */ + +/*jslint browser: true, onevar: true, undef: true, bitwise: true, strict: true */ +/*global window : false, clearInterval: false, clearTimeout: false, document: false, setInterval: false, setTimeout: false, jQuery: false, navigator: false, XSLTProcessor: false, DOMParser: false, XMLSerializer: false*/ + +"use strict"; + +// top wrapper to prevent multiple inclusion (is this OK?) +(function () { if(jQuery && jQuery.jstree) { return; } + var is_ie6 = false, is_ie7 = false, is_ff2 = false; + +/* + * jsTree core + */ +(function ($) { + // Common functions not related to jsTree + // decided to move them to a `vakata` "namespace" + $.vakata = {}; + // CSS related functions + $.vakata.css = { + get_css : function(rule_name, delete_flag, sheet) { + rule_name = rule_name.toLowerCase(); + var css_rules = sheet.cssRules || sheet.rules, + j = 0; + do { + if(css_rules.length && j > css_rules.length + 5) { return false; } + if(css_rules[j].selectorText && css_rules[j].selectorText.toLowerCase() == rule_name) { + if(delete_flag === true) { + if(sheet.removeRule) { sheet.removeRule(j); } + if(sheet.deleteRule) { sheet.deleteRule(j); } + return true; + } + else { return css_rules[j]; } + } + } + while (css_rules[++j]); + return false; + }, + add_css : function(rule_name, sheet) { + if($.jstree.css.get_css(rule_name, false, sheet)) { return false; } + if(sheet.insertRule) { sheet.insertRule(rule_name + ' { }', 0); } else { sheet.addRule(rule_name, null, 0); } + return $.vakata.css.get_css(rule_name); + }, + remove_css : function(rule_name, sheet) { + return $.vakata.css.get_css(rule_name, true, sheet); + }, + add_sheet : function(opts) { + var tmp = false, is_new = true; + if(opts.str) { + if(opts.title) { tmp = $("style[id='" + opts.title + "-stylesheet']")[0]; } + if(tmp) { is_new = false; } + else { + tmp = document.createElement("style"); + tmp.setAttribute('type',"text/css"); + if(opts.title) { tmp.setAttribute("id", opts.title + "-stylesheet"); } + } + if(tmp.styleSheet) { + if(is_new) { + document.getElementsByTagName("head")[0].appendChild(tmp); + tmp.styleSheet.cssText = opts.str; + } + else { + tmp.styleSheet.cssText = tmp.styleSheet.cssText + " " + opts.str; + } + } + else { + tmp.appendChild(document.createTextNode(opts.str)); + document.getElementsByTagName("head")[0].appendChild(tmp); + } + return tmp.sheet || tmp.styleSheet; + } + if(opts.url) { + if(document.createStyleSheet) { + try { tmp = document.createStyleSheet(opts.url); } catch (e) { } + } + else { + tmp = document.createElement('link'); + tmp.rel = 'stylesheet'; + tmp.type = 'text/css'; + tmp.media = "all"; + tmp.href = opts.url; + document.getElementsByTagName("head")[0].appendChild(tmp); + return tmp.styleSheet; + } + } + } + }; + + // private variables + var instances = [], // instance array (used by $.jstree.reference/create/focused) + focused_instance = -1, // the index in the instance array of the currently focused instance + plugins = {}, // list of included plugins + prepared_move = {}; // for the move_node function + + // jQuery plugin wrapper (thanks to jquery UI widget function) + $.fn.jstree = function (settings) { + var isMethodCall = (typeof settings == 'string'), // is this a method call like $().jstree("open_node") + args = Array.prototype.slice.call(arguments, 1), + returnValue = this; + + // if a method call execute the method on all selected instances + if(isMethodCall) { + if(settings.substring(0, 1) == '_') { return returnValue; } + this.each(function() { + var instance = instances[$.data(this, "jstree-instance-id")], + methodValue = (instance && $.isFunction(instance[settings])) ? instance[settings].apply(instance, args) : instance; + if(typeof methodValue !== "undefined" && (settings.indexOf("is_") === 0 || (methodValue !== true && methodValue !== false))) { returnValue = methodValue; return false; } + }); + } + else { + this.each(function() { + // extend settings and allow for multiple hashes and $.data + var instance_id = $.data(this, "jstree-instance-id"), + a = [], + b = settings ? $.extend({}, true, settings) : {}, + c = $(this), + s = false, + t = []; + a = a.concat(args); + if(c.data("jstree")) { a.push(c.data("jstree")); } + b = a.length ? $.extend.apply(null, [true, b].concat(a)) : b; + + // if an instance already exists, destroy it first + if(typeof instance_id !== "undefined" && instances[instance_id]) { instances[instance_id].destroy(); } + // push a new empty object to the instances array + instance_id = parseInt(instances.push({}),10) - 1; + // store the jstree instance id to the container element + $.data(this, "jstree-instance-id", instance_id); + // clean up all plugins + b.plugins = $.isArray(b.plugins) ? b.plugins : $.jstree.defaults.plugins.slice(); + b.plugins.unshift("core"); + // only unique plugins + b.plugins = b.plugins.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(","); + + // extend defaults with passed data + s = $.extend(true, {}, $.jstree.defaults, b); + s.plugins = b.plugins; + $.each(plugins, function (i, val) { + if($.inArray(i, s.plugins) === -1) { s[i] = null; delete s[i]; } + else { t.push(i); } + }); + s.plugins = t; + + // push the new object to the instances array (at the same time set the default classes to the container) and init + instances[instance_id] = new $.jstree._instance(instance_id, $(this).addClass("jstree jstree-" + instance_id), s); + // init all activated plugins for this instance + $.each(instances[instance_id]._get_settings().plugins, function (i, val) { instances[instance_id].data[val] = {}; }); + $.each(instances[instance_id]._get_settings().plugins, function (i, val) { if(plugins[val]) { plugins[val].__init.apply(instances[instance_id]); } }); + // initialize the instance + setTimeout(function() { instances[instance_id].init(); }, 0); + }); + } + // return the jquery selection (or if it was a method call that returned a value - the returned value) + return returnValue; + }; + // object to store exposed functions and objects + $.jstree = { + defaults : { + plugins : [] + }, + _focused : function () { return instances[focused_instance] || null; }, + _reference : function (needle) { + // get by instance id + if(instances[needle]) { return instances[needle]; } + // get by DOM (if still no luck - return null + var o = $(needle); + if(!o.length && typeof needle === "string") { o = $("#" + needle); } + if(!o.length) { return null; } + return instances[o.closest(".jstree").data("jstree-instance-id")] || null; + }, + _instance : function (index, container, settings) { + // for plugins to store data in + this.data = { core : {} }; + this.get_settings = function () { return $.extend(true, {}, settings); }; + this._get_settings = function () { return settings; }; + this.get_index = function () { return index; }; + this.get_container = function () { return container; }; + this.get_container_ul = function () { return container.children("ul:eq(0)"); }; + this._set_settings = function (s) { + settings = $.extend(true, {}, settings, s); + }; + }, + _fn : { }, + plugin : function (pname, pdata) { + pdata = $.extend({}, { + __init : $.noop, + __destroy : $.noop, + _fn : {}, + defaults : false + }, pdata); + plugins[pname] = pdata; + + $.jstree.defaults[pname] = pdata.defaults; + $.each(pdata._fn, function (i, val) { + val.plugin = pname; + val.old = $.jstree._fn[i]; + $.jstree._fn[i] = function () { + var rslt, + func = val, + args = Array.prototype.slice.call(arguments), + evnt = new $.Event("before.jstree"), + rlbk = false; + + if(this.data.core.locked === true && i !== "unlock" && i !== "is_locked") { return; } + + // Check if function belongs to the included plugins of this instance + do { + if(func && func.plugin && $.inArray(func.plugin, this._get_settings().plugins) !== -1) { break; } + func = func.old; + } while(func); + if(!func) { return; } + + // context and function to trigger events, then finally call the function + if(i.indexOf("_") === 0) { + rslt = func.apply(this, args); + } + else { + rslt = this.get_container().triggerHandler(evnt, { "func" : i, "inst" : this, "args" : args, "plugin" : func.plugin }); + if(rslt === false) { return; } + if(typeof rslt !== "undefined") { args = rslt; } + + rslt = func.apply( + $.extend({}, this, { + __callback : function (data) { + this.get_container().triggerHandler( i + '.jstree', { "inst" : this, "args" : args, "rslt" : data, "rlbk" : rlbk }); + }, + __rollback : function () { + rlbk = this.get_rollback(); + return rlbk; + }, + __call_old : function (replace_arguments) { + return func.old.apply(this, (replace_arguments ? Array.prototype.slice.call(arguments, 1) : args ) ); + } + }), args); + } + + // return the result + return rslt; + }; + $.jstree._fn[i].old = val.old; + $.jstree._fn[i].plugin = pname; + }); + }, + rollback : function (rb) { + if(rb) { + if(!$.isArray(rb)) { rb = [ rb ]; } + $.each(rb, function (i, val) { + instances[val.i].set_rollback(val.h, val.d); + }); + } + } + }; + // set the prototype for all instances + $.jstree._fn = $.jstree._instance.prototype = {}; + + // load the css when DOM is ready + $(function() { + // code is copied from jQuery ($.browser is deprecated + there is a bug in IE) + var u = navigator.userAgent.toLowerCase(), + v = (u.match( /.+?(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1], + css_string = '' + + '.jstree ul, .jstree li { display:block; margin:0 0 0 0; padding:0 0 0 0; list-style-type:none; } ' + + '.jstree li { display:block; min-height:18px; line-height:18px; white-space:nowrap; margin-left:18px; min-width:18px; } ' + + '.jstree-rtl li { margin-left:0; margin-right:18px; } ' + + '.jstree > ul > li { margin-left:0px; } ' + + '.jstree-rtl > ul > li { margin-right:0px; } ' + + '.jstree ins { display:inline-block; text-decoration:none; width:18px; height:18px; margin:0 0 0 0; padding:0; } ' + + '.jstree a { display:inline-block; line-height:16px; height:16px; color:black; white-space:nowrap; text-decoration:none; padding:1px 2px; margin:0; } ' + + '.jstree a:focus { outline: none; } ' + + '.jstree a > ins { height:16px; width:16px; } ' + + '.jstree a > .jstree-icon { margin-right:3px; } ' + + '.jstree-rtl a > .jstree-icon { margin-left:3px; margin-right:0; } ' + + 'li.jstree-open > ul { display:block; } ' + + 'li.jstree-closed > ul { display:none; } '; + // Correct IE 6 (does not support the > CSS selector) + if(/msie/.test(u) && parseInt(v, 10) == 6) { + is_ie6 = true; + + // fix image flicker and lack of caching + try { + document.execCommand("BackgroundImageCache", false, true); + } catch (err) { } + + css_string += '' + + '.jstree li { height:18px; margin-left:0; margin-right:0; } ' + + '.jstree li li { margin-left:18px; } ' + + '.jstree-rtl li li { margin-left:0px; margin-right:18px; } ' + + 'li.jstree-open ul { display:block; } ' + + 'li.jstree-closed ul { display:none !important; } ' + + '.jstree li a { display:inline; border-width:0 !important; padding:0px 2px !important; } ' + + '.jstree li a ins { height:16px; width:16px; margin-right:3px; } ' + + '.jstree-rtl li a ins { margin-right:0px; margin-left:3px; } '; + } + // Correct IE 7 (shifts anchor nodes onhover) + if(/msie/.test(u) && parseInt(v, 10) == 7) { + is_ie7 = true; + css_string += '.jstree li a { border-width:0 !important; padding:0px 2px !important; } '; + } + // correct ff2 lack of display:inline-block + if(!/compatible/.test(u) && /mozilla/.test(u) && parseFloat(v, 10) < 1.9) { + is_ff2 = true; + css_string += '' + + '.jstree ins { display:-moz-inline-box; } ' + + '.jstree li { line-height:12px; } ' + // WHY?? + '.jstree a { display:-moz-inline-box; } ' + + '.jstree .jstree-no-icons .jstree-checkbox { display:-moz-inline-stack !important; } '; + /* this shouldn't be here as it is theme specific */ + } + // the default stylesheet + $.vakata.css.add_sheet({ str : css_string, title : "jstree" }); + }); + + // core functions (open, close, create, update, delete) + $.jstree.plugin("core", { + __init : function () { + this.data.core.locked = false; + this.data.core.to_open = this.get_settings().core.initially_open; + this.data.core.to_load = this.get_settings().core.initially_load; + }, + defaults : { + html_titles : false, + animation : 500, + initially_open : [], + initially_load : [], + open_parents : true, + notify_plugins : true, + rtl : false, + load_open : false, + strings : { + loading : "Loading ...", + new_node : "New node", + multiple_selection : "Multiple selection" + } + }, + _fn : { + init : function () { + this.set_focus(); + if(this._get_settings().core.rtl) { + this.get_container().addClass("jstree-rtl").css("direction", "rtl"); + } + this.get_container().html(""); + this.data.core.li_height = this.get_container_ul().find("li.jstree-closed, li.jstree-leaf").eq(0).height() || 18; + + this.get_container() + .delegate("li > ins", "click.jstree", $.proxy(function (event) { + var trgt = $(event.target); + if(trgt.is("ins") && event.pageY - trgt.offset().top < this.data.core.li_height) { this.toggle_node(trgt); } + }, this)) + .bind("mousedown.jstree", $.proxy(function () { + this.set_focus(); // This used to be setTimeout(set_focus,0) - why? + }, this)) + .bind("dblclick.jstree", function (event) { + var sel; + if(document.selection && document.selection.empty) { document.selection.empty(); } + else { + if(window.getSelection) { + sel = window.getSelection(); + try { + sel.removeAllRanges(); + sel.collapse(); + } catch (err) { } + } + } + }); + if(this._get_settings().core.notify_plugins) { + this.get_container() + .bind("load_node.jstree", $.proxy(function (e, data) { + var o = this._get_node(data.rslt.obj), + t = this; + if(o === -1) { o = this.get_container_ul(); } + if(!o.length) { return; } + o.find("li").each(function () { + var th = $(this); + if(th.data("jstree")) { + $.each(th.data("jstree"), function (plugin, values) { + if(t.data[plugin] && $.isFunction(t["_" + plugin + "_notify"])) { + t["_" + plugin + "_notify"].call(t, th, values); + } + }); + } + }); + }, this)); + } + if(this._get_settings().core.load_open) { + this.get_container() + .bind("load_node.jstree", $.proxy(function (e, data) { + var o = this._get_node(data.rslt.obj), + t = this; + if(o === -1) { o = this.get_container_ul(); } + if(!o.length) { return; } + o.find("li.jstree-open:not(:has(ul))").each(function () { + t.load_node(this, $.noop, $.noop); + }); + }, this)); + } + this.__callback(); + this.load_node(-1, function () { this.loaded(); this.reload_nodes(); }); + }, + destroy : function () { + var i, + n = this.get_index(), + s = this._get_settings(), + _this = this; + + $.each(s.plugins, function (i, val) { + try { plugins[val].__destroy.apply(_this); } catch(err) { } + }); + this.__callback(); + // set focus to another instance if this one is focused + if(this.is_focused()) { + for(i in instances) { + if(instances.hasOwnProperty(i) && i != n) { + instances[i].set_focus(); + break; + } + } + } + // if no other instance found + if(n === focused_instance) { focused_instance = -1; } + // remove all traces of jstree in the DOM (only the ones set using jstree*) and cleans all events + this.get_container() + .unbind(".jstree") + .undelegate(".jstree") + .removeData("jstree-instance-id") + .find("[class^='jstree']") + .andSelf() + .attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); }); + $(document) + .unbind(".jstree-" + n) + .undelegate(".jstree-" + n); + // remove the actual data + instances[n] = null; + delete instances[n]; + }, + + _core_notify : function (n, data) { + if(data.opened) { + this.open_node(n, false, true); + } + }, + + lock : function () { + this.data.core.locked = true; + this.get_container().children("ul").addClass("jstree-locked").css("opacity","0.7"); + this.__callback({}); + }, + unlock : function () { + this.data.core.locked = false; + this.get_container().children("ul").removeClass("jstree-locked").css("opacity","1"); + this.__callback({}); + }, + is_locked : function () { return this.data.core.locked; }, + save_opened : function () { + var _this = this; + this.data.core.to_open = []; + this.get_container_ul().find("li.jstree-open").each(function () { + if(this.id) { _this.data.core.to_open.push("#" + this.id.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:")); } + }); + this.__callback(_this.data.core.to_open); + }, + save_loaded : function () { }, + reload_nodes : function (is_callback) { + var _this = this, + done = true, + current = [], + remaining = []; + if(!is_callback) { + this.data.core.reopen = false; + this.data.core.refreshing = true; + this.data.core.to_open = $.map($.makeArray(this.data.core.to_open), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); }); + this.data.core.to_load = $.map($.makeArray(this.data.core.to_load), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); }); + if(this.data.core.to_open.length) { + this.data.core.to_load = this.data.core.to_load.concat(this.data.core.to_open); + } + } + if(this.data.core.to_load.length) { + $.each(this.data.core.to_load, function (i, val) { + if(val == "#") { return true; } + if($(val).length) { current.push(val); } + else { remaining.push(val); } + }); + if(current.length) { + this.data.core.to_load = remaining; + $.each(current, function (i, val) { + if(!_this._is_loaded(val)) { + _this.load_node(val, function () { _this.reload_nodes(true); }, function () { _this.reload_nodes(true); }); + done = false; + } + }); + } + } + if(this.data.core.to_open.length) { + $.each(this.data.core.to_open, function (i, val) { + _this.open_node(val, false, true); + }); + } + if(done) { + // TODO: find a more elegant approach to synchronizing returning requests + if(this.data.core.reopen) { clearTimeout(this.data.core.reopen); } + this.data.core.reopen = setTimeout(function () { _this.__callback({}, _this); }, 50); + this.data.core.refreshing = false; + this.reopen(); + } + }, + reopen : function () { + var _this = this; + if(this.data.core.to_open.length) { + $.each(this.data.core.to_open, function (i, val) { + _this.open_node(val, false, true); + }); + } + this.__callback({}); + }, + refresh : function (obj) { + var _this = this; + this.save_opened(); + if(!obj) { obj = -1; } + obj = this._get_node(obj); + if(!obj) { obj = -1; } + if(obj !== -1) { obj.children("UL").remove(); } + else { this.get_container_ul().empty(); } + this.load_node(obj, function () { _this.__callback({ "obj" : obj}); _this.reload_nodes(); }); + }, + // Dummy function to fire after the first load (so that there is a jstree.loaded event) + loaded : function () { + this.__callback(); + }, + // deal with focus + set_focus : function () { + if(this.is_focused()) { return; } + var f = $.jstree._focused(); + if(f) { f.unset_focus(); } + + this.get_container().addClass("jstree-focused"); + focused_instance = this.get_index(); + this.__callback(); + }, + is_focused : function () { + return focused_instance == this.get_index(); + }, + unset_focus : function () { + if(this.is_focused()) { + this.get_container().removeClass("jstree-focused"); + focused_instance = -1; + } + this.__callback(); + }, + + // traverse + _get_node : function (obj) { + var $obj = $(obj, this.get_container()); + if($obj.is(".jstree") || obj == -1) { return -1; } + $obj = $obj.closest("li", this.get_container()); + return $obj.length ? $obj : false; + }, + _get_next : function (obj, strict) { + obj = this._get_node(obj); + if(obj === -1) { return this.get_container().find("> ul > li:first-child"); } + if(!obj.length) { return false; } + if(strict) { return (obj.nextAll("li").size() > 0) ? obj.nextAll("li:eq(0)") : false; } + + if(obj.hasClass("jstree-open")) { return obj.find("li:eq(0)"); } + else if(obj.nextAll("li").size() > 0) { return obj.nextAll("li:eq(0)"); } + else { return obj.parentsUntil(".jstree","li").next("li").eq(0); } + }, + _get_prev : function (obj, strict) { + obj = this._get_node(obj); + if(obj === -1) { return this.get_container().find("> ul > li:last-child"); } + if(!obj.length) { return false; } + if(strict) { return (obj.prevAll("li").length > 0) ? obj.prevAll("li:eq(0)") : false; } + + if(obj.prev("li").length) { + obj = obj.prev("li").eq(0); + while(obj.hasClass("jstree-open")) { obj = obj.children("ul:eq(0)").children("li:last"); } + return obj; + } + else { var o = obj.parentsUntil(".jstree","li:eq(0)"); return o.length ? o : false; } + }, + _get_parent : function (obj) { + obj = this._get_node(obj); + if(obj == -1 || !obj.length) { return false; } + var o = obj.parentsUntil(".jstree", "li:eq(0)"); + return o.length ? o : -1; + }, + _get_children : function (obj) { + obj = this._get_node(obj); + if(obj === -1) { return this.get_container().children("ul:eq(0)").children("li"); } + if(!obj.length) { return false; } + return obj.children("ul:eq(0)").children("li"); + }, + get_path : function (obj, id_mode) { + var p = [], + _this = this; + obj = this._get_node(obj); + if(obj === -1 || !obj || !obj.length) { return false; } + obj.parentsUntil(".jstree", "li").each(function () { + p.push( id_mode ? this.id : _this.get_text(this) ); + }); + p.reverse(); + p.push( id_mode ? obj.attr("id") : this.get_text(obj) ); + return p; + }, + + // string functions + _get_string : function (key) { + return this._get_settings().core.strings[key] || key; + }, + + is_open : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-open"); }, + is_closed : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-closed"); }, + is_leaf : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-leaf"); }, + correct_state : function (obj) { + obj = this._get_node(obj); + if(!obj || obj === -1) { return false; } + obj.removeClass("jstree-closed jstree-open").addClass("jstree-leaf").children("ul").remove(); + this.__callback({ "obj" : obj }); + }, + // open/close + open_node : function (obj, callback, skip_animation) { + obj = this._get_node(obj); + if(!obj.length) { return false; } + if(!obj.hasClass("jstree-closed")) { if(callback) { callback.call(); } return false; } + var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation, + t = this; + if(!this._is_loaded(obj)) { + obj.children("a").addClass("jstree-loading"); + this.load_node(obj, function () { t.open_node(obj, callback, skip_animation); }, callback); + } + else { + if(this._get_settings().core.open_parents) { + obj.parentsUntil(".jstree",".jstree-closed").each(function () { + t.open_node(this, false, true); + }); + } + if(s) { obj.children("ul").css("display","none"); } + obj.removeClass("jstree-closed").addClass("jstree-open").children("a").removeClass("jstree-loading"); + if(s) { obj.children("ul").stop(true, true).slideDown(s, function () { this.style.display = ""; t.after_open(obj); }); } + else { t.after_open(obj); } + this.__callback({ "obj" : obj }); + if(callback) { callback.call(); } + } + }, + after_open : function (obj) { this.__callback({ "obj" : obj }); }, + close_node : function (obj, skip_animation) { + obj = this._get_node(obj); + var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation, + t = this; + if(!obj.length || !obj.hasClass("jstree-open")) { return false; } + if(s) { obj.children("ul").attr("style","display:block !important"); } + obj.removeClass("jstree-open").addClass("jstree-closed"); + if(s) { obj.children("ul").stop(true, true).slideUp(s, function () { this.style.display = ""; t.after_close(obj); }); } + else { t.after_close(obj); } + this.__callback({ "obj" : obj }); + }, + after_close : function (obj) { this.__callback({ "obj" : obj }); }, + toggle_node : function (obj) { + obj = this._get_node(obj); + if(obj.hasClass("jstree-closed")) { return this.open_node(obj); } + if(obj.hasClass("jstree-open")) { return this.close_node(obj); } + }, + open_all : function (obj, do_animation, original_obj) { + obj = obj ? this._get_node(obj) : -1; + if(!obj || obj === -1) { obj = this.get_container_ul(); } + if(original_obj) { + obj = obj.find("li.jstree-closed"); + } + else { + original_obj = obj; + if(obj.is(".jstree-closed")) { obj = obj.find("li.jstree-closed").andSelf(); } + else { obj = obj.find("li.jstree-closed"); } + } + var _this = this; + obj.each(function () { + var __this = this; + if(!_this._is_loaded(this)) { _this.open_node(this, function() { _this.open_all(__this, do_animation, original_obj); }, !do_animation); } + else { _this.open_node(this, false, !do_animation); } + }); + // so that callback is fired AFTER all nodes are open + if(original_obj.find('li.jstree-closed').length === 0) { this.__callback({ "obj" : original_obj }); } + }, + close_all : function (obj, do_animation) { + var _this = this; + obj = obj ? this._get_node(obj) : this.get_container(); + if(!obj || obj === -1) { obj = this.get_container_ul(); } + obj.find("li.jstree-open").andSelf().each(function () { _this.close_node(this, !do_animation); }); + this.__callback({ "obj" : obj }); + }, + clean_node : function (obj) { + obj = obj && obj != -1 ? $(obj) : this.get_container_ul(); + obj = obj.is("li") ? obj.find("li").andSelf() : obj.find("li"); + obj.removeClass("jstree-last") + .filter("li:last-child").addClass("jstree-last").end() + .filter(":has(li)") + .not(".jstree-open").removeClass("jstree-leaf").addClass("jstree-closed"); + obj.not(".jstree-open, .jstree-closed").addClass("jstree-leaf").children("ul").remove(); + this.__callback({ "obj" : obj }); + }, + // rollback + get_rollback : function () { + this.__callback(); + return { i : this.get_index(), h : this.get_container().children("ul").clone(true), d : this.data }; + }, + set_rollback : function (html, data) { + this.get_container().empty().append(html); + this.data = data; + this.__callback(); + }, + // Dummy functions to be overwritten by any datastore plugin included + load_node : function (obj, s_call, e_call) { this.__callback({ "obj" : obj }); }, + _is_loaded : function (obj) { return true; }, + + // Basic operations: create + create_node : function (obj, position, js, callback, is_loaded) { + obj = this._get_node(obj); + position = typeof position === "undefined" ? "last" : position; + var d = $("
  • "), + s = this._get_settings().core, + tmp; + + if(obj !== -1 && !obj.length) { return false; } + if(!is_loaded && !this._is_loaded(obj)) { this.load_node(obj, function () { this.create_node(obj, position, js, callback, true); }); return false; } + + this.__rollback(); + + if(typeof js === "string") { js = { "data" : js }; } + if(!js) { js = {}; } + if(js.attr) { d.attr(js.attr); } + if(js.metadata) { d.data(js.metadata); } + if(js.state) { d.addClass("jstree-" + js.state); } + if(!js.data) { js.data = this._get_string("new_node"); } + if(!$.isArray(js.data)) { tmp = js.data; js.data = []; js.data.push(tmp); } + $.each(js.data, function (i, m) { + tmp = $(""); + if($.isFunction(m)) { m = m.call(this, js); } + if(typeof m == "string") { tmp.attr('href','#')[ s.html_titles ? "html" : "text" ](m); } + else { + if(!m.attr) { m.attr = {}; } + if(!m.attr.href) { m.attr.href = '#'; } + tmp.attr(m.attr)[ s.html_titles ? "html" : "text" ](m.title); + if(m.language) { tmp.addClass(m.language); } + } + tmp.prepend(" "); + if(m.icon) { + if(m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); } + else { tmp.children("ins").css("background","url('" + m.icon + "') center center no-repeat"); } + } + d.append(tmp); + }); + d.prepend(" "); + if(obj === -1) { + obj = this.get_container(); + if(position === "before") { position = "first"; } + if(position === "after") { position = "last"; } + } + switch(position) { + case "before": obj.before(d); tmp = this._get_parent(obj); break; + case "after" : obj.after(d); tmp = this._get_parent(obj); break; + case "inside": + case "first" : + if(!obj.children("ul").length) { obj.append("
      "); } + obj.children("ul").prepend(d); + tmp = obj; + break; + case "last": + if(!obj.children("ul").length) { obj.append("
        "); } + obj.children("ul").append(d); + tmp = obj; + break; + default: + if(!obj.children("ul").length) { obj.append("
          "); } + if(!position) { position = 0; } + tmp = obj.children("ul").children("li").eq(position); + if(tmp.length) { tmp.before(d); } + else { obj.children("ul").append(d); } + tmp = obj; + break; + } + if(tmp === -1 || tmp.get(0) === this.get_container().get(0)) { tmp = -1; } + this.clean_node(tmp); + this.__callback({ "obj" : d, "parent" : tmp }); + if(callback) { callback.call(this, d); } + return d; + }, + // Basic operations: rename (deal with text) + get_text : function (obj) { + obj = this._get_node(obj); + if(!obj.length) { return false; } + var s = this._get_settings().core.html_titles; + obj = obj.children("a:eq(0)"); + if(s) { + obj = obj.clone(); + obj.children("INS").remove(); + return obj.html(); + } + else { + obj = obj.contents().filter(function() { return this.nodeType == 3; })[0]; + return obj.nodeValue; + } + }, + set_text : function (obj, val) { + obj = this._get_node(obj); + if(!obj.length) { return false; } + obj = obj.children("a:eq(0)"); + if(this._get_settings().core.html_titles) { + var tmp = obj.children("INS").clone(); + obj.html(val).prepend(tmp); + this.__callback({ "obj" : obj, "name" : val }); + return true; + } + else { + obj = obj.contents().filter(function() { return this.nodeType == 3; })[0]; + this.__callback({ "obj" : obj, "name" : val }); + return (obj.nodeValue = val); + } + }, + rename_node : function (obj, val) { + obj = this._get_node(obj); + this.__rollback(); + if(obj && obj.length && this.set_text.apply(this, Array.prototype.slice.call(arguments))) { this.__callback({ "obj" : obj, "name" : val }); } + }, + // Basic operations: deleting nodes + delete_node : function (obj) { + obj = this._get_node(obj); + if(!obj.length) { return false; } + this.__rollback(); + var p = this._get_parent(obj), prev = $([]), t = this; + obj.each(function () { + prev = prev.add(t._get_prev(this)); + }); + obj = obj.detach(); + if(p !== -1 && p.find("> ul > li").length === 0) { + p.removeClass("jstree-open jstree-closed").addClass("jstree-leaf"); + } + this.clean_node(p); + this.__callback({ "obj" : obj, "prev" : prev, "parent" : p }); + return obj; + }, + prepare_move : function (o, r, pos, cb, is_cb) { + var p = {}; + + p.ot = $.jstree._reference(o) || this; + p.o = p.ot._get_node(o); + p.r = r === - 1 ? -1 : this._get_node(r); + p.p = (typeof pos === "undefined" || pos === false) ? "last" : pos; // TODO: move to a setting + if(!is_cb && prepared_move.o && prepared_move.o[0] === p.o[0] && prepared_move.r[0] === p.r[0] && prepared_move.p === p.p) { + this.__callback(prepared_move); + if(cb) { cb.call(this, prepared_move); } + return; + } + p.ot = $.jstree._reference(p.o) || this; + p.rt = $.jstree._reference(p.r) || this; // r === -1 ? p.ot : $.jstree._reference(p.r) || this + if(p.r === -1 || !p.r) { + p.cr = -1; + switch(p.p) { + case "first": + case "before": + case "inside": + p.cp = 0; + break; + case "after": + case "last": + p.cp = p.rt.get_container().find(" > ul > li").length; + break; + default: + p.cp = p.p; + break; + } + } + else { + if(!/^(before|after)$/.test(p.p) && !this._is_loaded(p.r)) { + return this.load_node(p.r, function () { this.prepare_move(o, r, pos, cb, true); }); + } + switch(p.p) { + case "before": + p.cp = p.r.index(); + p.cr = p.rt._get_parent(p.r); + break; + case "after": + p.cp = p.r.index() + 1; + p.cr = p.rt._get_parent(p.r); + break; + case "inside": + case "first": + p.cp = 0; + p.cr = p.r; + break; + case "last": + p.cp = p.r.find(" > ul > li").length; + p.cr = p.r; + break; + default: + p.cp = p.p; + p.cr = p.r; + break; + } + } + p.np = p.cr == -1 ? p.rt.get_container() : p.cr; + p.op = p.ot._get_parent(p.o); + p.cop = p.o.index(); + if(p.op === -1) { p.op = p.ot ? p.ot.get_container() : this.get_container(); } + if(!/^(before|after)$/.test(p.p) && p.op && p.np && p.op[0] === p.np[0] && p.o.index() < p.cp) { p.cp++; } + //if(p.p === "before" && p.op && p.np && p.op[0] === p.np[0] && p.o.index() < p.cp) { p.cp--; } + p.or = p.np.find(" > ul > li:nth-child(" + (p.cp + 1) + ")"); + prepared_move = p; + this.__callback(prepared_move); + if(cb) { cb.call(this, prepared_move); } + }, + check_move : function () { + var obj = prepared_move, ret = true, r = obj.r === -1 ? this.get_container() : obj.r; + if(!obj || !obj.o || obj.or[0] === obj.o[0]) { return false; } + if(obj.op && obj.np && obj.op[0] === obj.np[0] && obj.cp - 1 === obj.o.index()) { return false; } + obj.o.each(function () { + if(r.parentsUntil(".jstree", "li").andSelf().index(this) !== -1) { ret = false; return false; } + }); + return ret; + }, + move_node : function (obj, ref, position, is_copy, is_prepared, skip_check) { + if(!is_prepared) { + return this.prepare_move(obj, ref, position, function (p) { + this.move_node(p, false, false, is_copy, true, skip_check); + }); + } + if(is_copy) { + prepared_move.cy = true; + } + if(!skip_check && !this.check_move()) { return false; } + + this.__rollback(); + var o = false; + if(is_copy) { + o = obj.o.clone(true); + o.find("*[id]").andSelf().each(function () { + if(this.id) { this.id = "copy_" + this.id; } + }); + } + else { o = obj.o; } + + if(obj.or.length) { obj.or.before(o); } + else { + if(!obj.np.children("ul").length) { $("
            ").appendTo(obj.np); } + obj.np.children("ul:eq(0)").append(o); + } + + try { + obj.ot.clean_node(obj.op); + obj.rt.clean_node(obj.np); + if(!obj.op.find("> ul > li").length) { + obj.op.removeClass("jstree-open jstree-closed").addClass("jstree-leaf").children("ul").remove(); + } + } catch (e) { } + + if(is_copy) { + prepared_move.cy = true; + prepared_move.oc = o; + } + this.__callback(prepared_move); + return prepared_move; + }, + _get_move : function () { return prepared_move; } + } + }); +})(jQuery); +//*/ + +/* + * jsTree ui plugin + * This plugins handles selecting/deselecting/hovering/dehovering nodes + */ +(function ($) { + var scrollbar_width, e1, e2; + $(function() { + if (/msie/.test(navigator.userAgent.toLowerCase())) { + e1 = $('').css({ position: 'absolute', top: -1000, left: 0 }).appendTo('body'); + e2 = $('').css({ position: 'absolute', top: -1000, left: 0 }).appendTo('body'); + scrollbar_width = e1.width() - e2.width(); + e1.add(e2).remove(); + } + else { + e1 = $('
            ').css({ width: 100, height: 100, overflow: 'auto', position: 'absolute', top: -1000, left: 0 }) + .prependTo('body').append('
            ').find('div').css({ width: '100%', height: 200 }); + scrollbar_width = 100 - e1.width(); + e1.parent().remove(); + } + }); + $.jstree.plugin("ui", { + __init : function () { + this.data.ui.selected = $(); + this.data.ui.last_selected = false; + this.data.ui.hovered = null; + this.data.ui.to_select = this.get_settings().ui.initially_select; + + this.get_container() + .delegate("a", "click.jstree", $.proxy(function (event) { + event.preventDefault(); + event.currentTarget.blur(); + if(!$(event.currentTarget).hasClass("jstree-loading")) { + this.select_node(event.currentTarget, true, event); + } + }, this)) + .delegate("a", "mouseenter.jstree", $.proxy(function (event) { + if(!$(event.currentTarget).hasClass("jstree-loading")) { + this.hover_node(event.target); + } + }, this)) + .delegate("a", "mouseleave.jstree", $.proxy(function (event) { + if(!$(event.currentTarget).hasClass("jstree-loading")) { + this.dehover_node(event.target); + } + }, this)) + .bind("reopen.jstree", $.proxy(function () { + this.reselect(); + }, this)) + .bind("get_rollback.jstree", $.proxy(function () { + this.dehover_node(); + this.save_selected(); + }, this)) + .bind("set_rollback.jstree", $.proxy(function () { + this.reselect(); + }, this)) + .bind("close_node.jstree", $.proxy(function (event, data) { + var s = this._get_settings().ui, + obj = this._get_node(data.rslt.obj), + clk = (obj && obj.length) ? obj.children("ul").find("a.jstree-clicked") : $(), + _this = this; + if(s.selected_parent_close === false || !clk.length) { return; } + clk.each(function () { + _this.deselect_node(this); + if(s.selected_parent_close === "select_parent") { _this.select_node(obj); } + }); + }, this)) + .bind("delete_node.jstree", $.proxy(function (event, data) { + var s = this._get_settings().ui.select_prev_on_delete, + obj = this._get_node(data.rslt.obj), + clk = (obj && obj.length) ? obj.find("a.jstree-clicked") : [], + _this = this; + clk.each(function () { _this.deselect_node(this); }); + if(s && clk.length) { + data.rslt.prev.each(function () { + if(this.parentNode) { _this.select_node(this); return false; /* if return false is removed all prev nodes will be selected */} + }); + } + }, this)) + .bind("move_node.jstree", $.proxy(function (event, data) { + if(data.rslt.cy) { + data.rslt.oc.find("a.jstree-clicked").removeClass("jstree-clicked"); + } + }, this)); + }, + defaults : { + select_limit : -1, // 0, 1, 2 ... or -1 for unlimited + select_multiple_modifier : "ctrl", // on, or ctrl, shift, alt + select_range_modifier : "shift", + selected_parent_close : "select_parent", // false, "deselect", "select_parent" + selected_parent_open : true, + select_prev_on_delete : true, + disable_selecting_children : false, + initially_select : [] + }, + _fn : { + _get_node : function (obj, allow_multiple) { + if(typeof obj === "undefined" || obj === null) { return allow_multiple ? this.data.ui.selected : this.data.ui.last_selected; } + var $obj = $(obj, this.get_container()); + if($obj.is(".jstree") || obj == -1) { return -1; } + $obj = $obj.closest("li", this.get_container()); + return $obj.length ? $obj : false; + }, + _ui_notify : function (n, data) { + if(data.selected) { + this.select_node(n, false); + } + }, + save_selected : function () { + var _this = this; + this.data.ui.to_select = []; + this.data.ui.selected.each(function () { if(this.id) { _this.data.ui.to_select.push("#" + this.id.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:")); } }); + this.__callback(this.data.ui.to_select); + }, + reselect : function () { + var _this = this, + s = this.data.ui.to_select; + s = $.map($.makeArray(s), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); }); + // this.deselect_all(); WHY deselect, breaks plugin state notifier? + $.each(s, function (i, val) { if(val && val !== "#") { _this.select_node(val); } }); + this.data.ui.selected = this.data.ui.selected.filter(function () { return this.parentNode; }); + this.__callback(); + }, + refresh : function (obj) { + this.save_selected(); + return this.__call_old(); + }, + hover_node : function (obj) { + obj = this._get_node(obj); + if(!obj.length) { return false; } + //if(this.data.ui.hovered && obj.get(0) === this.data.ui.hovered.get(0)) { return; } + if(!obj.hasClass("jstree-hovered")) { this.dehover_node(); } + this.data.ui.hovered = obj.children("a").addClass("jstree-hovered").parent(); + this._fix_scroll(obj); + this.__callback({ "obj" : obj }); + }, + dehover_node : function () { + var obj = this.data.ui.hovered, p; + if(!obj || !obj.length) { return false; } + p = obj.children("a").removeClass("jstree-hovered").parent(); + if(this.data.ui.hovered[0] === p[0]) { this.data.ui.hovered = null; } + this.__callback({ "obj" : obj }); + }, + select_node : function (obj, check, e) { + obj = this._get_node(obj); + if(obj == -1 || !obj || !obj.length) { return false; } + var s = this._get_settings().ui, + is_multiple = (s.select_multiple_modifier == "on" || (s.select_multiple_modifier !== false && e && e[s.select_multiple_modifier + "Key"])), + is_range = (s.select_range_modifier !== false && e && e[s.select_range_modifier + "Key"] && this.data.ui.last_selected && this.data.ui.last_selected[0] !== obj[0] && this.data.ui.last_selected.parent()[0] === obj.parent()[0]), + is_selected = this.is_selected(obj), + proceed = true, + t = this; + if(check) { + if(s.disable_selecting_children && is_multiple && + ( + (obj.parentsUntil(".jstree","li").children("a.jstree-clicked").length) || + (obj.children("ul").find("a.jstree-clicked:eq(0)").length) + ) + ) { + return false; + } + proceed = false; + switch(!0) { + case (is_range): + this.data.ui.last_selected.addClass("jstree-last-selected"); + obj = obj[ obj.index() < this.data.ui.last_selected.index() ? "nextUntil" : "prevUntil" ](".jstree-last-selected").andSelf(); + if(s.select_limit == -1 || obj.length < s.select_limit) { + this.data.ui.last_selected.removeClass("jstree-last-selected"); + this.data.ui.selected.each(function () { + if(this !== t.data.ui.last_selected[0]) { t.deselect_node(this); } + }); + is_selected = false; + proceed = true; + } + else { + proceed = false; + } + break; + case (is_selected && !is_multiple): + this.deselect_all(); + is_selected = false; + proceed = true; + break; + case (!is_selected && !is_multiple): + if(s.select_limit == -1 || s.select_limit > 0) { + this.deselect_all(); + proceed = true; + } + break; + case (is_selected && is_multiple): + this.deselect_node(obj); + break; + case (!is_selected && is_multiple): + if(s.select_limit == -1 || this.data.ui.selected.length + 1 <= s.select_limit) { + proceed = true; + } + break; + } + } + if(proceed && !is_selected) { + if(!is_range) { this.data.ui.last_selected = obj; } + obj.children("a").addClass("jstree-clicked"); + if(s.selected_parent_open) { + obj.parents(".jstree-closed").each(function () { t.open_node(this, false, true); }); + } + this.data.ui.selected = this.data.ui.selected.add(obj); + this._fix_scroll(obj.eq(0)); + this.__callback({ "obj" : obj, "e" : e }); + } + }, + _fix_scroll : function (obj) { + var c = this.get_container()[0], t; + if(c.scrollHeight > c.offsetHeight) { + obj = this._get_node(obj); + if(!obj || obj === -1 || !obj.length || !obj.is(":visible")) { return; } + t = obj.offset().top - this.get_container().offset().top; + if(t < 0) { + c.scrollTop = c.scrollTop + t - 1; + } + if(t + this.data.core.li_height + (c.scrollWidth > c.offsetWidth ? scrollbar_width : 0) > c.offsetHeight) { + c.scrollTop = c.scrollTop + (t - c.offsetHeight + this.data.core.li_height + 1 + (c.scrollWidth > c.offsetWidth ? scrollbar_width : 0)); + } + } + }, + deselect_node : function (obj) { + obj = this._get_node(obj); + if(!obj.length) { return false; } + if(this.is_selected(obj)) { + obj.children("a").removeClass("jstree-clicked"); + this.data.ui.selected = this.data.ui.selected.not(obj); + if(this.data.ui.last_selected.get(0) === obj.get(0)) { this.data.ui.last_selected = this.data.ui.selected.eq(0); } + this.__callback({ "obj" : obj }); + } + }, + toggle_select : function (obj) { + obj = this._get_node(obj); + if(!obj.length) { return false; } + if(this.is_selected(obj)) { this.deselect_node(obj); } + else { this.select_node(obj); } + }, + is_selected : function (obj) { return this.data.ui.selected.index(this._get_node(obj)) >= 0; }, + get_selected : function (context) { + return context ? $(context).find("a.jstree-clicked").parent() : this.data.ui.selected; + }, + deselect_all : function (context) { + var ret = context ? $(context).find("a.jstree-clicked").parent() : this.get_container().find("a.jstree-clicked").parent(); + ret.children("a.jstree-clicked").removeClass("jstree-clicked"); + this.data.ui.selected = $([]); + this.data.ui.last_selected = false; + this.__callback({ "obj" : ret }); + } + } + }); + // include the selection plugin by default + $.jstree.defaults.plugins.push("ui"); +})(jQuery); +//*/ + +/* + * jsTree CRRM plugin + * Handles creating/renaming/removing/moving nodes by user interaction. + */ +(function ($) { + $.jstree.plugin("crrm", { + __init : function () { + this.get_container() + .bind("move_node.jstree", $.proxy(function (e, data) { + if(this._get_settings().crrm.move.open_onmove) { + var t = this; + data.rslt.np.parentsUntil(".jstree").andSelf().filter(".jstree-closed").each(function () { + t.open_node(this, false, true); + }); + } + }, this)); + }, + defaults : { + input_width_limit : 200, + move : { + always_copy : false, // false, true or "multitree" + open_onmove : true, + default_position : "last", + check_move : function (m) { return true; } + } + }, + _fn : { + _show_input : function (obj, callback) { + obj = this._get_node(obj); + var rtl = this._get_settings().core.rtl, + w = this._get_settings().crrm.input_width_limit, + w1 = obj.children("ins").width(), + w2 = obj.find("> a:visible > ins").width() * obj.find("> a:visible > ins").length, + t = this.get_text(obj), + h1 = $("
            ", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body"), + h2 = obj.css("position","relative").append( + $("", { + "value" : t, + "class" : "jstree-rename-input", + // "size" : t.length, + "css" : { + "padding" : "0", + "border" : "1px solid silver", + "position" : "absolute", + "left" : (rtl ? "auto" : (w1 + w2 + 4) + "px"), + "right" : (rtl ? (w1 + w2 + 4) + "px" : "auto"), + "top" : "0px", + "height" : (this.data.core.li_height - 2) + "px", + "lineHeight" : (this.data.core.li_height - 2) + "px", + "width" : "150px" // will be set a bit further down + }, + "blur" : $.proxy(function () { + var i = obj.children(".jstree-rename-input"), + v = i.val(); + if(v === "") { v = t; } + h1.remove(); + i.remove(); // rollback purposes + this.set_text(obj,t); // rollback purposes + this.rename_node(obj, v); + callback.call(this, obj, v, t); + obj.css("position",""); + }, this), + "keyup" : function (event) { + var key = event.keyCode || event.which; + if(key == 27) { this.value = t; this.blur(); return; } + else if(key == 13) { this.blur(); return; } + else { + h2.width(Math.min(h1.text("pW" + this.value).width(),w)); + } + }, + "keypress" : function(event) { + var key = event.keyCode || event.which; + if(key == 13) { return false; } + } + }) + ).children(".jstree-rename-input"); + this.set_text(obj, ""); + h1.css({ + fontFamily : h2.css('fontFamily') || '', + fontSize : h2.css('fontSize') || '', + fontWeight : h2.css('fontWeight') || '', + fontStyle : h2.css('fontStyle') || '', + fontStretch : h2.css('fontStretch') || '', + fontVariant : h2.css('fontVariant') || '', + letterSpacing : h2.css('letterSpacing') || '', + wordSpacing : h2.css('wordSpacing') || '' + }); + h2.width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select(); + }, + rename : function (obj) { + obj = this._get_node(obj); + this.__rollback(); + var f = this.__callback; + this._show_input(obj, function (obj, new_name, old_name) { + f.call(this, { "obj" : obj, "new_name" : new_name, "old_name" : old_name }); + }); + }, + create : function (obj, position, js, callback, skip_rename) { + var t, _this = this; + obj = this._get_node(obj); + if(!obj) { obj = -1; } + this.__rollback(); + t = this.create_node(obj, position, js, function (t) { + var p = this._get_parent(t), + pos = $(t).index(); + if(callback) { callback.call(this, t); } + if(p.length && p.hasClass("jstree-closed")) { this.open_node(p, false, true); } + if(!skip_rename) { + this._show_input(t, function (obj, new_name, old_name) { + _this.__callback({ "obj" : obj, "name" : new_name, "parent" : p, "position" : pos }); + }); + } + else { _this.__callback({ "obj" : t, "name" : this.get_text(t), "parent" : p, "position" : pos }); } + }); + return t; + }, + remove : function (obj) { + obj = this._get_node(obj, true); + var p = this._get_parent(obj), prev = this._get_prev(obj); + this.__rollback(); + obj = this.delete_node(obj); + if(obj !== false) { this.__callback({ "obj" : obj, "prev" : prev, "parent" : p }); } + }, + check_move : function () { + if(!this.__call_old()) { return false; } + var s = this._get_settings().crrm.move; + if(!s.check_move.call(this, this._get_move())) { return false; } + return true; + }, + move_node : function (obj, ref, position, is_copy, is_prepared, skip_check) { + var s = this._get_settings().crrm.move; + if(!is_prepared) { + if(typeof position === "undefined") { position = s.default_position; } + if(position === "inside" && !s.default_position.match(/^(before|after)$/)) { position = s.default_position; } + return this.__call_old(true, obj, ref, position, is_copy, false, skip_check); + } + // if the move is already prepared + if(s.always_copy === true || (s.always_copy === "multitree" && obj.rt.get_index() !== obj.ot.get_index() )) { + is_copy = true; + } + this.__call_old(true, obj, ref, position, is_copy, true, skip_check); + }, + + cut : function (obj) { + obj = this._get_node(obj, true); + if(!obj || !obj.length) { return false; } + this.data.crrm.cp_nodes = false; + this.data.crrm.ct_nodes = obj; + this.__callback({ "obj" : obj }); + }, + copy : function (obj) { + obj = this._get_node(obj, true); + if(!obj || !obj.length) { return false; } + this.data.crrm.ct_nodes = false; + this.data.crrm.cp_nodes = obj; + this.__callback({ "obj" : obj }); + }, + paste : function (obj) { + obj = this._get_node(obj); + if(!obj || !obj.length) { return false; } + var nodes = this.data.crrm.ct_nodes ? this.data.crrm.ct_nodes : this.data.crrm.cp_nodes; + if(!this.data.crrm.ct_nodes && !this.data.crrm.cp_nodes) { return false; } + if(this.data.crrm.ct_nodes) { this.move_node(this.data.crrm.ct_nodes, obj); this.data.crrm.ct_nodes = false; } + if(this.data.crrm.cp_nodes) { this.move_node(this.data.crrm.cp_nodes, obj, false, true); } + this.__callback({ "obj" : obj, "nodes" : nodes }); + } + } + }); + // include the crr plugin by default + // $.jstree.defaults.plugins.push("crrm"); +})(jQuery); +//*/ + +/* + * jsTree themes plugin + * Handles loading and setting themes, as well as detecting path to themes, etc. + */ +(function ($) { + var themes_loaded = []; + // this variable stores the path to the themes folder - if left as false - it will be autodetected + $.jstree._themes = false; + $.jstree.plugin("themes", { + __init : function () { + this.get_container() + .bind("init.jstree", $.proxy(function () { + var s = this._get_settings().themes; + this.data.themes.dots = s.dots; + this.data.themes.icons = s.icons; + this.set_theme(s.theme, s.url); + }, this)) + .bind("loaded.jstree", $.proxy(function () { + // bound here too, as simple HTML tree's won't honor dots & icons otherwise + if(!this.data.themes.dots) { this.hide_dots(); } + else { this.show_dots(); } + if(!this.data.themes.icons) { this.hide_icons(); } + else { this.show_icons(); } + }, this)); + }, + defaults : { + theme : "default", + url : false, + dots : true, + icons : true + }, + _fn : { + set_theme : function (theme_name, theme_url) { + if(!theme_name) { return false; } + if(!theme_url) { theme_url = $.jstree._themes + theme_name + '/style.css'; } + if($.inArray(theme_url, themes_loaded) == -1) { + $.vakata.css.add_sheet({ "url" : theme_url }); + themes_loaded.push(theme_url); + } + if(this.data.themes.theme != theme_name) { + this.get_container().removeClass('jstree-' + this.data.themes.theme); + this.data.themes.theme = theme_name; + } + this.get_container().addClass('jstree-' + theme_name); + if(!this.data.themes.dots) { this.hide_dots(); } + else { this.show_dots(); } + if(!this.data.themes.icons) { this.hide_icons(); } + else { this.show_icons(); } + this.__callback(); + }, + get_theme : function () { return this.data.themes.theme; }, + + show_dots : function () { this.data.themes.dots = true; this.get_container().children("ul").removeClass("jstree-no-dots"); }, + hide_dots : function () { this.data.themes.dots = false; this.get_container().children("ul").addClass("jstree-no-dots"); }, + toggle_dots : function () { if(this.data.themes.dots) { this.hide_dots(); } else { this.show_dots(); } }, + + show_icons : function () { this.data.themes.icons = true; this.get_container().children("ul").removeClass("jstree-no-icons"); }, + hide_icons : function () { this.data.themes.icons = false; this.get_container().children("ul").addClass("jstree-no-icons"); }, + toggle_icons: function () { if(this.data.themes.icons) { this.hide_icons(); } else { this.show_icons(); } } + } + }); + // autodetect themes path + $(function () { + if($.jstree._themes === false) { + $("script").each(function () { + if(this.src.toString().match(/jquery\.jstree[^\/]*?\.js(\?.*)?$/)) { + $.jstree._themes = this.src.toString().replace(/jquery\.jstree[^\/]*?\.js(\?.*)?$/, "") + 'themes/'; + return false; + } + }); + } + if($.jstree._themes === false) { $.jstree._themes = "themes/"; } + }); + // include the themes plugin by default + $.jstree.defaults.plugins.push("themes"); +})(jQuery); +//*/ + +/* + * jsTree hotkeys plugin + * Enables keyboard navigation for all tree instances + * Depends on the jstree ui & jquery hotkeys plugins + */ +(function ($) { + var bound = []; + function exec(i, event) { + var f = $.jstree._focused(), tmp; + if(f && f.data && f.data.hotkeys && f.data.hotkeys.enabled) { + tmp = f._get_settings().hotkeys[i]; + if(tmp) { return tmp.call(f, event); } + } + } + $.jstree.plugin("hotkeys", { + __init : function () { + if(typeof $.hotkeys === "undefined") { throw "jsTree hotkeys: jQuery hotkeys plugin not included."; } + if(!this.data.ui) { throw "jsTree hotkeys: jsTree UI plugin not included."; } + $.each(this._get_settings().hotkeys, function (i, v) { + if(v !== false && $.inArray(i, bound) == -1) { + $(document).bind("keydown", i, function (event) { return exec(i, event); }); + bound.push(i); + } + }); + this.get_container() + .bind("lock.jstree", $.proxy(function () { + if(this.data.hotkeys.enabled) { this.data.hotkeys.enabled = false; this.data.hotkeys.revert = true; } + }, this)) + .bind("unlock.jstree", $.proxy(function () { + if(this.data.hotkeys.revert) { this.data.hotkeys.enabled = true; } + }, this)); + this.enable_hotkeys(); + }, + defaults : { + "up" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected || -1; + this.hover_node(this._get_prev(o)); + return false; + }, + "ctrl+up" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected || -1; + this.hover_node(this._get_prev(o)); + return false; + }, + "shift+up" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected || -1; + this.hover_node(this._get_prev(o)); + return false; + }, + "down" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected || -1; + this.hover_node(this._get_next(o)); + return false; + }, + "ctrl+down" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected || -1; + this.hover_node(this._get_next(o)); + return false; + }, + "shift+down" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected || -1; + this.hover_node(this._get_next(o)); + return false; + }, + "left" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected; + if(o) { + if(o.hasClass("jstree-open")) { this.close_node(o); } + else { this.hover_node(this._get_prev(o)); } + } + return false; + }, + "ctrl+left" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected; + if(o) { + if(o.hasClass("jstree-open")) { this.close_node(o); } + else { this.hover_node(this._get_prev(o)); } + } + return false; + }, + "shift+left" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected; + if(o) { + if(o.hasClass("jstree-open")) { this.close_node(o); } + else { this.hover_node(this._get_prev(o)); } + } + return false; + }, + "right" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected; + if(o && o.length) { + if(o.hasClass("jstree-closed")) { this.open_node(o); } + else { this.hover_node(this._get_next(o)); } + } + return false; + }, + "ctrl+right" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected; + if(o && o.length) { + if(o.hasClass("jstree-closed")) { this.open_node(o); } + else { this.hover_node(this._get_next(o)); } + } + return false; + }, + "shift+right" : function () { + var o = this.data.ui.hovered || this.data.ui.last_selected; + if(o && o.length) { + if(o.hasClass("jstree-closed")) { this.open_node(o); } + else { this.hover_node(this._get_next(o)); } + } + return false; + }, + "space" : function () { + if(this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").click(); } + return false; + }, + "ctrl+space" : function (event) { + event.type = "click"; + if(this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").trigger(event); } + return false; + }, + "shift+space" : function (event) { + event.type = "click"; + if(this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").trigger(event); } + return false; + }, + "f2" : function () { this.rename(this.data.ui.hovered || this.data.ui.last_selected); }, + "del" : function () { this.remove(this.data.ui.hovered || this._get_node(null)); } + }, + _fn : { + enable_hotkeys : function () { + this.data.hotkeys.enabled = true; + }, + disable_hotkeys : function () { + this.data.hotkeys.enabled = false; + } + } + }); +})(jQuery); +//*/ + +/* + * jsTree JSON plugin + * The JSON data store. Datastores are build by overriding the `load_node` and `_is_loaded` functions. + */ +(function ($) { + $.jstree.plugin("json_data", { + __init : function() { + var s = this._get_settings().json_data; + if(s.progressive_unload) { + this.get_container().bind("after_close.jstree", function (e, data) { + data.rslt.obj.children("ul").remove(); + }); + } + }, + defaults : { + // `data` can be a function: + // * accepts two arguments - node being loaded and a callback to pass the result to + // * will be executed in the current tree's scope & ajax won't be supported + data : false, + ajax : false, + correct_state : true, + progressive_render : false, + progressive_unload : false + }, + _fn : { + load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_json(obj, function () { _this.__callback({ "obj" : _this._get_node(obj) }); s_call.call(this); }, e_call); }, + _is_loaded : function (obj) { + var s = this._get_settings().json_data; + obj = this._get_node(obj); + return obj == -1 || !obj || (!s.ajax && !s.progressive_render && !$.isFunction(s.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").length > 0; + }, + refresh : function (obj) { + obj = this._get_node(obj); + var s = this._get_settings().json_data; + if(obj && obj !== -1 && s.progressive_unload && ($.isFunction(s.data) || !!s.ajax)) { + obj.removeData("jstree-children"); + } + return this.__call_old(); + }, + load_node_json : function (obj, s_call, e_call) { + var s = this.get_settings().json_data, d, + error_func = function () {}, + success_func = function () {}; + obj = this._get_node(obj); + + if(obj && obj !== -1 && (s.progressive_render || s.progressive_unload) && !obj.is(".jstree-open, .jstree-leaf") && obj.children("ul").children("li").length === 0 && obj.data("jstree-children")) { + d = this._parse_json(obj.data("jstree-children"), obj); + if(d) { + obj.append(d); + if(!s.progressive_unload) { obj.removeData("jstree-children"); } + } + this.clean_node(obj); + if(s_call) { s_call.call(this); } + return; + } + + if(obj && obj !== -1) { + if(obj.data("jstree-is-loading")) { return; } + else { obj.data("jstree-is-loading",true); } + } + switch(!0) { + case (!s.data && !s.ajax): throw "Neither data nor ajax settings supplied."; + // function option added here for easier model integration (also supporting async - see callback) + case ($.isFunction(s.data)): + s.data.call(this, obj, $.proxy(function (d) { + d = this._parse_json(d, obj); + if(!d) { + if(obj === -1 || !obj) { + if(s.correct_state) { this.get_container().children("ul").empty(); } + } + else { + obj.children("a.jstree-loading").removeClass("jstree-loading"); + obj.removeData("jstree-is-loading"); + if(s.correct_state) { this.correct_state(obj); } + } + if(e_call) { e_call.call(this); } + } + else { + if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); } + else { obj.append(d).children("a.jstree-loading").removeClass("jstree-loading"); obj.removeData("jstree-is-loading"); } + this.clean_node(obj); + if(s_call) { s_call.call(this); } + } + }, this)); + break; + case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)): + if(!obj || obj == -1) { + d = this._parse_json(s.data, obj); + if(d) { + this.get_container().children("ul").empty().append(d.children()); + this.clean_node(); + } + else { + if(s.correct_state) { this.get_container().children("ul").empty(); } + } + } + if(s_call) { s_call.call(this); } + break; + case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1): + error_func = function (x, t, e) { + var ef = this.get_settings().json_data.ajax.error; + if(ef) { ef.call(this, x, t, e); } + if(obj != -1 && obj.length) { + obj.children("a.jstree-loading").removeClass("jstree-loading"); + obj.removeData("jstree-is-loading"); + if(t === "success" && s.correct_state) { this.correct_state(obj); } + } + else { + if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); } + } + if(e_call) { e_call.call(this); } + }; + success_func = function (d, t, x) { + var sf = this.get_settings().json_data.ajax.success; + if(sf) { d = sf.call(this,d,t,x) || d; } + if(d === "" || (d && d.toString && d.toString().replace(/^[\s\n]+$/,"") === "") || (!$.isArray(d) && !$.isPlainObject(d))) { + return error_func.call(this, x, t, ""); + } + d = this._parse_json(d, obj); + if(d) { + if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); } + else { obj.append(d).children("a.jstree-loading").removeClass("jstree-loading"); obj.removeData("jstree-is-loading"); } + this.clean_node(obj); + if(s_call) { s_call.call(this); } + } + else { + if(obj === -1 || !obj) { + if(s.correct_state) { + this.get_container().children("ul").empty(); + if(s_call) { s_call.call(this); } + } + } + else { + obj.children("a.jstree-loading").removeClass("jstree-loading"); + obj.removeData("jstree-is-loading"); + if(s.correct_state) { + this.correct_state(obj); + if(s_call) { s_call.call(this); } + } + } + } + }; + s.ajax.context = this; + s.ajax.error = error_func; + s.ajax.success = success_func; + if(!s.ajax.dataType) { s.ajax.dataType = "json"; } + if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); } + if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); } + $.ajax(s.ajax); + break; + } + }, + _parse_json : function (js, obj, is_callback) { + var d = false, + p = this._get_settings(), + s = p.json_data, + t = p.core.html_titles, + tmp, i, j, ul1, ul2; + + if(!js) { return d; } + if(s.progressive_unload && obj && obj !== -1) { + obj.data("jstree-children", d); + } + if($.isArray(js)) { + d = $(); + if(!js.length) { return false; } + for(i = 0, j = js.length; i < j; i++) { + tmp = this._parse_json(js[i], obj, true); + if(tmp.length) { d = d.add(tmp); } + } + } + else { + if(typeof js == "string") { js = { data : js }; } + if(!js.data && js.data !== "") { return d; } + d = $("
          • "); + if(js.attr) { d.attr(js.attr); } + if(js.metadata) { d.data(js.metadata); } + if(js.state) { d.addClass("jstree-" + js.state); } + if(!$.isArray(js.data)) { tmp = js.data; js.data = []; js.data.push(tmp); } + $.each(js.data, function (i, m) { + tmp = $(""); + if($.isFunction(m)) { m = m.call(this, js); } + if(typeof m == "string") { tmp.attr('href','#')[ t ? "html" : "text" ](m); } + else { + if(!m.attr) { m.attr = {}; } + if(!m.attr.href) { m.attr.href = '#'; } + tmp.attr(m.attr)[ t ? "html" : "text" ](m.title); + if(m.language) { tmp.addClass(m.language); } + } + tmp.prepend(" "); + if(!m.icon && js.icon) { m.icon = js.icon; } + if(m.icon) { + if(m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); } + else { tmp.children("ins").css("background","url('" + m.icon + "') center center no-repeat"); } + } + d.append(tmp); + }); + d.prepend(" "); + if(js.children) { + if(s.progressive_render && js.state !== "open") { + d.addClass("jstree-closed").data("jstree-children", js.children); + } + else { + if(s.progressive_unload) { d.data("jstree-children", js.children); } + if($.isArray(js.children) && js.children.length) { + tmp = this._parse_json(js.children, obj, true); + if(tmp.length) { + ul2 = $("
              "); + ul2.append(tmp); + d.append(ul2); + } + } + } + } + } + if(!is_callback) { + ul1 = $("
                "); + ul1.append(d); + d = ul1; + } + return d; + }, + get_json : function (obj, li_attr, a_attr, is_callback) { + var result = [], + s = this._get_settings(), + _this = this, + tmp1, tmp2, li, a, t, lang; + obj = this._get_node(obj); + if(!obj || obj === -1) { obj = this.get_container().find("> ul > li"); } + li_attr = $.isArray(li_attr) ? li_attr : [ "id", "class" ]; + if(!is_callback && this.data.types) { li_attr.push(s.types.type_attr); } + a_attr = $.isArray(a_attr) ? a_attr : [ ]; + + obj.each(function () { + li = $(this); + tmp1 = { data : [] }; + if(li_attr.length) { tmp1.attr = { }; } + $.each(li_attr, function (i, v) { + tmp2 = li.attr(v); + if(tmp2 && tmp2.length && tmp2.replace(/jstree[^ ]*/ig,'').length) { + tmp1.attr[v] = (" " + tmp2).replace(/ jstree[^ ]*/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,""); + } + }); + if(li.hasClass("jstree-open")) { tmp1.state = "open"; } + if(li.hasClass("jstree-closed")) { tmp1.state = "closed"; } + if(li.data()) { tmp1.metadata = li.data(); } + a = li.children("a"); + a.each(function () { + t = $(this); + if( + a_attr.length || + $.inArray("languages", s.plugins) !== -1 || + t.children("ins").get(0).style.backgroundImage.length || + (t.children("ins").get(0).className && t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').length) + ) { + lang = false; + if($.inArray("languages", s.plugins) !== -1 && $.isArray(s.languages) && s.languages.length) { + $.each(s.languages, function (l, lv) { + if(t.hasClass(lv)) { + lang = lv; + return false; + } + }); + } + tmp2 = { attr : { }, title : _this.get_text(t, lang) }; + $.each(a_attr, function (k, z) { + tmp2.attr[z] = (" " + (t.attr(z) || "")).replace(/ jstree[^ ]*/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,""); + }); + if($.inArray("languages", s.plugins) !== -1 && $.isArray(s.languages) && s.languages.length) { + $.each(s.languages, function (k, z) { + if(t.hasClass(z)) { tmp2.language = z; return true; } + }); + } + if(t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/^\s+$/ig,"").length) { + tmp2.icon = t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,""); + } + if(t.children("ins").get(0).style.backgroundImage.length) { + tmp2.icon = t.children("ins").get(0).style.backgroundImage.replace("url(","").replace(")",""); + } + } + else { + tmp2 = _this.get_text(t); + } + if(a.length > 1) { tmp1.data.push(tmp2); } + else { tmp1.data = tmp2; } + }); + li = li.find("> ul > li"); + if(li.length) { tmp1.children = _this.get_json(li, li_attr, a_attr, true); } + result.push(tmp1); + }); + return result; + } + } + }); +})(jQuery); +//*/ + +/* + * jsTree languages plugin + * Adds support for multiple language versions in one tree + * This basically allows for many titles coexisting in one node, but only one of them being visible at any given time + * This is useful for maintaining the same structure in many languages (hence the name of the plugin) + */ +(function ($) { + $.jstree.plugin("languages", { + __init : function () { this._load_css(); }, + defaults : [], + _fn : { + set_lang : function (i) { + var langs = this._get_settings().languages, + st = false, + selector = ".jstree-" + this.get_index() + ' a'; + if(!$.isArray(langs) || langs.length === 0) { return false; } + if($.inArray(i,langs) == -1) { + if(!!langs[i]) { i = langs[i]; } + else { return false; } + } + if(i == this.data.languages.current_language) { return true; } + st = $.vakata.css.get_css(selector + "." + this.data.languages.current_language, false, this.data.languages.language_css); + if(st !== false) { st.style.display = "none"; } + st = $.vakata.css.get_css(selector + "." + i, false, this.data.languages.language_css); + if(st !== false) { st.style.display = ""; } + this.data.languages.current_language = i; + this.__callback(i); + return true; + }, + get_lang : function () { + return this.data.languages.current_language; + }, + _get_string : function (key, lang) { + var langs = this._get_settings().languages, + s = this._get_settings().core.strings; + if($.isArray(langs) && langs.length) { + lang = (lang && $.inArray(lang,langs) != -1) ? lang : this.data.languages.current_language; + } + if(s[lang] && s[lang][key]) { return s[lang][key]; } + if(s[key]) { return s[key]; } + return key; + }, + get_text : function (obj, lang) { + obj = this._get_node(obj) || this.data.ui.last_selected; + if(!obj.size()) { return false; } + var langs = this._get_settings().languages, + s = this._get_settings().core.html_titles; + if($.isArray(langs) && langs.length) { + lang = (lang && $.inArray(lang,langs) != -1) ? lang : this.data.languages.current_language; + obj = obj.children("a." + lang); + } + else { obj = obj.children("a:eq(0)"); } + if(s) { + obj = obj.clone(); + obj.children("INS").remove(); + return obj.html(); + } + else { + obj = obj.contents().filter(function() { return this.nodeType == 3; })[0]; + return obj.nodeValue; + } + }, + set_text : function (obj, val, lang) { + obj = this._get_node(obj) || this.data.ui.last_selected; + if(!obj.size()) { return false; } + var langs = this._get_settings().languages, + s = this._get_settings().core.html_titles, + tmp; + if($.isArray(langs) && langs.length) { + lang = (lang && $.inArray(lang,langs) != -1) ? lang : this.data.languages.current_language; + obj = obj.children("a." + lang); + } + else { obj = obj.children("a:eq(0)"); } + if(s) { + tmp = obj.children("INS").clone(); + obj.html(val).prepend(tmp); + this.__callback({ "obj" : obj, "name" : val, "lang" : lang }); + return true; + } + else { + obj = obj.contents().filter(function() { return this.nodeType == 3; })[0]; + this.__callback({ "obj" : obj, "name" : val, "lang" : lang }); + return (obj.nodeValue = val); + } + }, + _load_css : function () { + var langs = this._get_settings().languages, + str = "/* languages css */", + selector = ".jstree-" + this.get_index() + ' a', + ln; + if($.isArray(langs) && langs.length) { + this.data.languages.current_language = langs[0]; + for(ln = 0; ln < langs.length; ln++) { + str += selector + "." + langs[ln] + " {"; + if(langs[ln] != this.data.languages.current_language) { str += " display:none; "; } + str += " } "; + } + this.data.languages.language_css = $.vakata.css.add_sheet({ 'str' : str, 'title' : "jstree-languages" }); + } + }, + create_node : function (obj, position, js, callback) { + var t = this.__call_old(true, obj, position, js, function (t) { + var langs = this._get_settings().languages, + a = t.children("a"), + ln; + if($.isArray(langs) && langs.length) { + for(ln = 0; ln < langs.length; ln++) { + if(!a.is("." + langs[ln])) { + t.append(a.eq(0).clone().removeClass(langs.join(" ")).addClass(langs[ln])); + } + } + a.not("." + langs.join(", .")).remove(); + } + if(callback) { callback.call(this, t); } + }); + return t; + } + } + }); +})(jQuery); +//*/ + +/* + * jsTree cookies plugin + * Stores the currently opened/selected nodes in a cookie and then restores them + * Depends on the jquery.cookie plugin + */ +(function ($) { + $.jstree.plugin("cookies", { + __init : function () { + if(typeof $.cookie === "undefined") { throw "jsTree cookie: jQuery cookie plugin not included."; } + + var s = this._get_settings().cookies, + tmp; + if(!!s.save_loaded) { + tmp = $.cookie(s.save_loaded); + if(tmp && tmp.length) { this.data.core.to_load = tmp.split(","); } + } + if(!!s.save_opened) { + tmp = $.cookie(s.save_opened); + if(tmp && tmp.length) { this.data.core.to_open = tmp.split(","); } + } + if(!!s.save_selected) { + tmp = $.cookie(s.save_selected); + if(tmp && tmp.length && this.data.ui) { this.data.ui.to_select = tmp.split(","); } + } + this.get_container() + .one( ( this.data.ui ? "reselect" : "reopen" ) + ".jstree", $.proxy(function () { + this.get_container() + .bind("open_node.jstree close_node.jstree select_node.jstree deselect_node.jstree", $.proxy(function (e) { + if(this._get_settings().cookies.auto_save) { this.save_cookie((e.handleObj.namespace + e.handleObj.type).replace("jstree","")); } + }, this)); + }, this)); + }, + defaults : { + save_loaded : "jstree_load", + save_opened : "jstree_open", + save_selected : "jstree_select", + auto_save : true, + cookie_options : {} + }, + _fn : { + save_cookie : function (c) { + if(this.data.core.refreshing) { return; } + var s = this._get_settings().cookies; + if(!c) { // if called manually and not by event + if(s.save_loaded) { + this.save_loaded(); + $.cookie(s.save_loaded, this.data.core.to_load.join(","), s.cookie_options); + } + if(s.save_opened) { + this.save_opened(); + $.cookie(s.save_opened, this.data.core.to_open.join(","), s.cookie_options); + } + if(s.save_selected && this.data.ui) { + this.save_selected(); + $.cookie(s.save_selected, this.data.ui.to_select.join(","), s.cookie_options); + } + return; + } + switch(c) { + case "open_node": + case "close_node": + if(!!s.save_opened) { + this.save_opened(); + $.cookie(s.save_opened, this.data.core.to_open.join(","), s.cookie_options); + } + if(!!s.save_loaded) { + this.save_loaded(); + $.cookie(s.save_loaded, this.data.core.to_load.join(","), s.cookie_options); + } + break; + case "select_node": + case "deselect_node": + if(!!s.save_selected && this.data.ui) { + this.save_selected(); + $.cookie(s.save_selected, this.data.ui.to_select.join(","), s.cookie_options); + } + break; + } + } + } + }); + // include cookies by default + // $.jstree.defaults.plugins.push("cookies"); +})(jQuery); +//*/ + +/* + * jsTree sort plugin + * Sorts items alphabetically (or using any other function) + */ +(function ($) { + $.jstree.plugin("sort", { + __init : function () { + this.get_container() + .bind("load_node.jstree", $.proxy(function (e, data) { + var obj = this._get_node(data.rslt.obj); + obj = obj === -1 ? this.get_container().children("ul") : obj.children("ul"); + this.sort(obj); + }, this)) + .bind("rename_node.jstree create_node.jstree create.jstree", $.proxy(function (e, data) { + this.sort(data.rslt.obj.parent()); + }, this)) + .bind("move_node.jstree", $.proxy(function (e, data) { + var m = data.rslt.np == -1 ? this.get_container() : data.rslt.np; + this.sort(m.children("ul")); + }, this)); + }, + defaults : function (a, b) { return this.get_text(a) > this.get_text(b) ? 1 : -1; }, + _fn : { + sort : function (obj) { + var s = this._get_settings().sort, + t = this; + obj.append($.makeArray(obj.children("li")).sort($.proxy(s, t))); + obj.find("> li > ul").each(function() { t.sort($(this)); }); + this.clean_node(obj); + } + } + }); +})(jQuery); +//*/ + +/* + * jsTree DND plugin + * Drag and drop plugin for moving/copying nodes + */ +(function ($) { + var o = false, + r = false, + m = false, + ml = false, + sli = false, + sti = false, + dir1 = false, + dir2 = false, + last_pos = false; + $.vakata.dnd = { + is_down : false, + is_drag : false, + helper : false, + scroll_spd : 10, + init_x : 0, + init_y : 0, + threshold : 5, + helper_left : 5, + helper_top : 10, + user_data : {}, + + drag_start : function (e, data, html) { + if($.vakata.dnd.is_drag) { $.vakata.drag_stop({}); } + try { + e.currentTarget.unselectable = "on"; + e.currentTarget.onselectstart = function() { return false; }; + if(e.currentTarget.style) { e.currentTarget.style.MozUserSelect = "none"; } + } catch(err) { } + $.vakata.dnd.init_x = e.pageX; + $.vakata.dnd.init_y = e.pageY; + $.vakata.dnd.user_data = data; + $.vakata.dnd.is_down = true; + $.vakata.dnd.helper = $("
                ").html(html); //.fadeTo(10,0.25); + $(document).bind("mousemove", $.vakata.dnd.drag); + $(document).bind("mouseup", $.vakata.dnd.drag_stop); + return false; + }, + drag : function (e) { + if(!$.vakata.dnd.is_down) { return; } + if(!$.vakata.dnd.is_drag) { + if(Math.abs(e.pageX - $.vakata.dnd.init_x) > 5 || Math.abs(e.pageY - $.vakata.dnd.init_y) > 5) { + $.vakata.dnd.helper.appendTo("body"); + $.vakata.dnd.is_drag = true; + $(document).triggerHandler("drag_start.vakata", { "event" : e, "data" : $.vakata.dnd.user_data }); + } + else { return; } + } + + // maybe use a scrolling parent element instead of document? + if(e.type === "mousemove") { // thought of adding scroll in order to move the helper, but mouse poisition is n/a + var d = $(document), t = d.scrollTop(), l = d.scrollLeft(); + if(e.pageY - t < 20) { + if(sti && dir1 === "down") { clearInterval(sti); sti = false; } + if(!sti) { dir1 = "up"; sti = setInterval(function () { $(document).scrollTop($(document).scrollTop() - $.vakata.dnd.scroll_spd); }, 150); } + } + else { + if(sti && dir1 === "up") { clearInterval(sti); sti = false; } + } + if($(window).height() - (e.pageY - t) < 20) { + if(sti && dir1 === "up") { clearInterval(sti); sti = false; } + if(!sti) { dir1 = "down"; sti = setInterval(function () { $(document).scrollTop($(document).scrollTop() + $.vakata.dnd.scroll_spd); }, 150); } + } + else { + if(sti && dir1 === "down") { clearInterval(sti); sti = false; } + } + + if(e.pageX - l < 20) { + if(sli && dir2 === "right") { clearInterval(sli); sli = false; } + if(!sli) { dir2 = "left"; sli = setInterval(function () { $(document).scrollLeft($(document).scrollLeft() - $.vakata.dnd.scroll_spd); }, 150); } + } + else { + if(sli && dir2 === "left") { clearInterval(sli); sli = false; } + } + if($(window).width() - (e.pageX - l) < 20) { + if(sli && dir2 === "left") { clearInterval(sli); sli = false; } + if(!sli) { dir2 = "right"; sli = setInterval(function () { $(document).scrollLeft($(document).scrollLeft() + $.vakata.dnd.scroll_spd); }, 150); } + } + else { + if(sli && dir2 === "right") { clearInterval(sli); sli = false; } + } + } + + $.vakata.dnd.helper.css({ left : (e.pageX + $.vakata.dnd.helper_left) + "px", top : (e.pageY + $.vakata.dnd.helper_top) + "px" }); + $(document).triggerHandler("drag.vakata", { "event" : e, "data" : $.vakata.dnd.user_data }); + }, + drag_stop : function (e) { + if(sli) { clearInterval(sli); } + if(sti) { clearInterval(sti); } + $(document).unbind("mousemove", $.vakata.dnd.drag); + $(document).unbind("mouseup", $.vakata.dnd.drag_stop); + $(document).triggerHandler("drag_stop.vakata", { "event" : e, "data" : $.vakata.dnd.user_data }); + $.vakata.dnd.helper.remove(); + $.vakata.dnd.init_x = 0; + $.vakata.dnd.init_y = 0; + $.vakata.dnd.user_data = {}; + $.vakata.dnd.is_down = false; + $.vakata.dnd.is_drag = false; + } + }; + $(function() { + var css_string = '#vakata-dragged { display:block; margin:0 0 0 0; padding:4px 4px 4px 24px; position:absolute; top:-2000px; line-height:16px; z-index:10000; } '; + $.vakata.css.add_sheet({ str : css_string, title : "vakata" }); + }); + + $.jstree.plugin("dnd", { + __init : function () { + this.data.dnd = { + active : false, + after : false, + inside : false, + before : false, + off : false, + prepared : false, + w : 0, + to1 : false, + to2 : false, + cof : false, + cw : false, + ch : false, + i1 : false, + i2 : false, + mto : false + }; + this.get_container() + .bind("mouseenter.jstree", $.proxy(function (e) { + if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) { + if(this.data.themes) { + m.attr("class", "jstree-" + this.data.themes.theme); + if(ml) { ml.attr("class", "jstree-" + this.data.themes.theme); } + $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme); + } + //if($(e.currentTarget).find("> ul > li").length === 0) { + if(e.currentTarget === e.target && $.vakata.dnd.user_data.obj && $($.vakata.dnd.user_data.obj).length && $($.vakata.dnd.user_data.obj).parents(".jstree:eq(0)")[0] !== e.target) { // node should not be from the same tree + var tr = $.jstree._reference(e.target), dc; + if(tr.data.dnd.foreign) { + dc = tr._get_settings().dnd.drag_check.call(this, { "o" : o, "r" : tr.get_container(), is_root : true }); + if(dc === true || dc.inside === true || dc.before === true || dc.after === true) { + $.vakata.dnd.helper.children("ins").attr("class","jstree-ok"); + } + } + else { + tr.prepare_move(o, tr.get_container(), "last"); + if(tr.check_move()) { + $.vakata.dnd.helper.children("ins").attr("class","jstree-ok"); + } + } + } + } + }, this)) + .bind("mouseup.jstree", $.proxy(function (e) { + //if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && $(e.currentTarget).find("> ul > li").length === 0) { + if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && e.currentTarget === e.target && $.vakata.dnd.user_data.obj && $($.vakata.dnd.user_data.obj).length && $($.vakata.dnd.user_data.obj).parents(".jstree:eq(0)")[0] !== e.target) { // node should not be from the same tree + var tr = $.jstree._reference(e.currentTarget), dc; + if(tr.data.dnd.foreign) { + dc = tr._get_settings().dnd.drag_check.call(this, { "o" : o, "r" : tr.get_container(), is_root : true }); + if(dc === true || dc.inside === true || dc.before === true || dc.after === true) { + tr._get_settings().dnd.drag_finish.call(this, { "o" : o, "r" : tr.get_container(), is_root : true }); + } + } + else { + tr.move_node(o, tr.get_container(), "last", e[tr._get_settings().dnd.copy_modifier + "Key"]); + } + } + }, this)) + .bind("mouseleave.jstree", $.proxy(function (e) { + if(e.relatedTarget && e.relatedTarget.id && e.relatedTarget.id === "jstree-marker-line") { + return false; + } + if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) { + if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); } + if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); } + if(this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); } + if(this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); } + if($.vakata.dnd.helper.children("ins").hasClass("jstree-ok")) { + $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid"); + } + } + }, this)) + .bind("mousemove.jstree", $.proxy(function (e) { + if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) { + var cnt = this.get_container()[0]; + + // Horizontal scroll + if(e.pageX + 24 > this.data.dnd.cof.left + this.data.dnd.cw) { + if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); } + this.data.dnd.i1 = setInterval($.proxy(function () { this.scrollLeft += $.vakata.dnd.scroll_spd; }, cnt), 100); + } + else if(e.pageX - 24 < this.data.dnd.cof.left) { + if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); } + this.data.dnd.i1 = setInterval($.proxy(function () { this.scrollLeft -= $.vakata.dnd.scroll_spd; }, cnt), 100); + } + else { + if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); } + } + + // Vertical scroll + if(e.pageY + 24 > this.data.dnd.cof.top + this.data.dnd.ch) { + if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); } + this.data.dnd.i2 = setInterval($.proxy(function () { this.scrollTop += $.vakata.dnd.scroll_spd; }, cnt), 100); + } + else if(e.pageY - 24 < this.data.dnd.cof.top) { + if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); } + this.data.dnd.i2 = setInterval($.proxy(function () { this.scrollTop -= $.vakata.dnd.scroll_spd; }, cnt), 100); + } + else { + if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); } + } + + } + }, this)) + .bind("scroll.jstree", $.proxy(function (e) { + if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && m && ml) { + m.hide(); + ml.hide(); + } + }, this)) + .delegate("a", "mousedown.jstree", $.proxy(function (e) { + if(e.which === 1) { + this.start_drag(e.currentTarget, e); + return false; + } + }, this)) + .delegate("a", "mouseenter.jstree", $.proxy(function (e) { + if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) { + this.dnd_enter(e.currentTarget); + } + }, this)) + .delegate("a", "mousemove.jstree", $.proxy(function (e) { + if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) { + if(!r || !r.length || r.children("a")[0] !== e.currentTarget) { + this.dnd_enter(e.currentTarget); + } + if(typeof this.data.dnd.off.top === "undefined") { this.data.dnd.off = $(e.target).offset(); } + this.data.dnd.w = (e.pageY - (this.data.dnd.off.top || 0)) % this.data.core.li_height; + if(this.data.dnd.w < 0) { this.data.dnd.w += this.data.core.li_height; } + this.dnd_show(); + } + }, this)) + .delegate("a", "mouseleave.jstree", $.proxy(function (e) { + if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) { + if(e.relatedTarget && e.relatedTarget.id && e.relatedTarget.id === "jstree-marker-line") { + return false; + } + if(m) { m.hide(); } + if(ml) { ml.hide(); } + /* + var ec = $(e.currentTarget).closest("li"), + er = $(e.relatedTarget).closest("li"); + if(er[0] !== ec.prev()[0] && er[0] !== ec.next()[0]) { + if(m) { m.hide(); } + if(ml) { ml.hide(); } + } + */ + this.data.dnd.mto = setTimeout( + (function (t) { return function () { t.dnd_leave(e); }; })(this), + 0); + } + }, this)) + .delegate("a", "mouseup.jstree", $.proxy(function (e) { + if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) { + this.dnd_finish(e); + } + }, this)); + + $(document) + .bind("drag_stop.vakata", $.proxy(function () { + if(this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); } + if(this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); } + if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); } + if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); } + this.data.dnd.after = false; + this.data.dnd.before = false; + this.data.dnd.inside = false; + this.data.dnd.off = false; + this.data.dnd.prepared = false; + this.data.dnd.w = false; + this.data.dnd.to1 = false; + this.data.dnd.to2 = false; + this.data.dnd.i1 = false; + this.data.dnd.i2 = false; + this.data.dnd.active = false; + this.data.dnd.foreign = false; + if(m) { m.css({ "top" : "-2000px" }); } + if(ml) { ml.css({ "top" : "-2000px" }); } + }, this)) + .bind("drag_start.vakata", $.proxy(function (e, data) { + if(data.data.jstree) { + var et = $(data.event.target); + if(et.closest(".jstree").hasClass("jstree-" + this.get_index())) { + this.dnd_enter(et); + } + } + }, this)); + /* + .bind("keydown.jstree-" + this.get_index() + " keyup.jstree-" + this.get_index(), $.proxy(function(e) { + if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && !this.data.dnd.foreign) { + var h = $.vakata.dnd.helper.children("ins"); + if(e[this._get_settings().dnd.copy_modifier + "Key"] && h.hasClass("jstree-ok")) { + h.parent().html(h.parent().html().replace(/ \(Copy\)$/, "") + " (Copy)"); + } + else { + h.parent().html(h.parent().html().replace(/ \(Copy\)$/, "")); + } + } + }, this)); */ + + + + var s = this._get_settings().dnd; + if(s.drag_target) { + $(document) + .delegate(s.drag_target, "mousedown.jstree-" + this.get_index(), $.proxy(function (e) { + o = e.target; + $.vakata.dnd.drag_start(e, { jstree : true, obj : e.target }, "" + $(e.target).text() ); + if(this.data.themes) { + if(m) { m.attr("class", "jstree-" + this.data.themes.theme); } + if(ml) { ml.attr("class", "jstree-" + this.data.themes.theme); } + $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme); + } + $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid"); + var cnt = this.get_container(); + this.data.dnd.cof = cnt.offset(); + this.data.dnd.cw = parseInt(cnt.width(),10); + this.data.dnd.ch = parseInt(cnt.height(),10); + this.data.dnd.foreign = true; + e.preventDefault(); + }, this)); + } + if(s.drop_target) { + $(document) + .delegate(s.drop_target, "mouseenter.jstree-" + this.get_index(), $.proxy(function (e) { + if(this.data.dnd.active && this._get_settings().dnd.drop_check.call(this, { "o" : o, "r" : $(e.target), "e" : e })) { + $.vakata.dnd.helper.children("ins").attr("class","jstree-ok"); + } + }, this)) + .delegate(s.drop_target, "mouseleave.jstree-" + this.get_index(), $.proxy(function (e) { + if(this.data.dnd.active) { + $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid"); + } + }, this)) + .delegate(s.drop_target, "mouseup.jstree-" + this.get_index(), $.proxy(function (e) { + if(this.data.dnd.active && $.vakata.dnd.helper.children("ins").hasClass("jstree-ok")) { + this._get_settings().dnd.drop_finish.call(this, { "o" : o, "r" : $(e.target), "e" : e }); + } + }, this)); + } + }, + defaults : { + copy_modifier : "ctrl", + check_timeout : 100, + open_timeout : 500, + drop_target : ".jstree-drop", + drop_check : function (data) { return true; }, + drop_finish : $.noop, + drag_target : ".jstree-draggable", + drag_finish : $.noop, + drag_check : function (data) { return { after : false, before : false, inside : true }; } + }, + _fn : { + dnd_prepare : function () { + if(!r || !r.length) { return; } + this.data.dnd.off = r.offset(); + if(this._get_settings().core.rtl) { + this.data.dnd.off.right = this.data.dnd.off.left + r.width(); + } + if(this.data.dnd.foreign) { + var a = this._get_settings().dnd.drag_check.call(this, { "o" : o, "r" : r }); + this.data.dnd.after = a.after; + this.data.dnd.before = a.before; + this.data.dnd.inside = a.inside; + this.data.dnd.prepared = true; + return this.dnd_show(); + } + this.prepare_move(o, r, "before"); + this.data.dnd.before = this.check_move(); + this.prepare_move(o, r, "after"); + this.data.dnd.after = this.check_move(); + if(this._is_loaded(r)) { + this.prepare_move(o, r, "inside"); + this.data.dnd.inside = this.check_move(); + } + else { + this.data.dnd.inside = false; + } + this.data.dnd.prepared = true; + return this.dnd_show(); + }, + dnd_show : function () { + if(!this.data.dnd.prepared) { return; } + var o = ["before","inside","after"], + r = false, + rtl = this._get_settings().core.rtl, + pos; + if(this.data.dnd.w < this.data.core.li_height/3) { o = ["before","inside","after"]; } + else if(this.data.dnd.w <= this.data.core.li_height*2/3) { + o = this.data.dnd.w < this.data.core.li_height/2 ? ["inside","before","after"] : ["inside","after","before"]; + } + else { o = ["after","inside","before"]; } + $.each(o, $.proxy(function (i, val) { + if(this.data.dnd[val]) { + $.vakata.dnd.helper.children("ins").attr("class","jstree-ok"); + r = val; + return false; + } + }, this)); + if(r === false) { $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid"); } + + pos = rtl ? (this.data.dnd.off.right - 18) : (this.data.dnd.off.left + 10); + switch(r) { + case "before": + m.css({ "left" : pos + "px", "top" : (this.data.dnd.off.top - 6) + "px" }).show(); + if(ml) { ml.css({ "left" : (pos + 8) + "px", "top" : (this.data.dnd.off.top - 1) + "px" }).show(); } + break; + case "after": + m.css({ "left" : pos + "px", "top" : (this.data.dnd.off.top + this.data.core.li_height - 6) + "px" }).show(); + if(ml) { ml.css({ "left" : (pos + 8) + "px", "top" : (this.data.dnd.off.top + this.data.core.li_height - 1) + "px" }).show(); } + break; + case "inside": + m.css({ "left" : pos + ( rtl ? -4 : 4) + "px", "top" : (this.data.dnd.off.top + this.data.core.li_height/2 - 5) + "px" }).show(); + if(ml) { ml.hide(); } + break; + default: + m.hide(); + if(ml) { ml.hide(); } + break; + } + last_pos = r; + return r; + }, + dnd_open : function () { + this.data.dnd.to2 = false; + this.open_node(r, $.proxy(this.dnd_prepare,this), true); + }, + dnd_finish : function (e) { + if(this.data.dnd.foreign) { + if(this.data.dnd.after || this.data.dnd.before || this.data.dnd.inside) { + this._get_settings().dnd.drag_finish.call(this, { "o" : o, "r" : r, "p" : last_pos }); + } + } + else { + this.dnd_prepare(); + this.move_node(o, r, last_pos, e[this._get_settings().dnd.copy_modifier + "Key"]); + } + o = false; + r = false; + m.hide(); + if(ml) { ml.hide(); } + }, + dnd_enter : function (obj) { + if(this.data.dnd.mto) { + clearTimeout(this.data.dnd.mto); + this.data.dnd.mto = false; + } + var s = this._get_settings().dnd; + this.data.dnd.prepared = false; + r = this._get_node(obj); + if(s.check_timeout) { + // do the calculations after a minimal timeout (users tend to drag quickly to the desired location) + if(this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); } + this.data.dnd.to1 = setTimeout($.proxy(this.dnd_prepare, this), s.check_timeout); + } + else { + this.dnd_prepare(); + } + if(s.open_timeout) { + if(this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); } + if(r && r.length && r.hasClass("jstree-closed")) { + // if the node is closed - open it, then recalculate + this.data.dnd.to2 = setTimeout($.proxy(this.dnd_open, this), s.open_timeout); + } + } + else { + if(r && r.length && r.hasClass("jstree-closed")) { + this.dnd_open(); + } + } + }, + dnd_leave : function (e) { + this.data.dnd.after = false; + this.data.dnd.before = false; + this.data.dnd.inside = false; + $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid"); + m.hide(); + if(ml) { ml.hide(); } + if(r && r[0] === e.target.parentNode) { + if(this.data.dnd.to1) { + clearTimeout(this.data.dnd.to1); + this.data.dnd.to1 = false; + } + if(this.data.dnd.to2) { + clearTimeout(this.data.dnd.to2); + this.data.dnd.to2 = false; + } + } + }, + start_drag : function (obj, e) { + o = this._get_node(obj); + if(this.data.ui && this.is_selected(o)) { o = this._get_node(null, true); } + var dt = o.length > 1 ? this._get_string("multiple_selection") : this.get_text(o), + cnt = this.get_container(); + if(!this._get_settings().core.html_titles) { dt = dt.replace(//ig,">"); } + $.vakata.dnd.drag_start(e, { jstree : true, obj : o }, "" + dt ); + if(this.data.themes) { + if(m) { m.attr("class", "jstree-" + this.data.themes.theme); } + if(ml) { ml.attr("class", "jstree-" + this.data.themes.theme); } + $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme); + } + this.data.dnd.cof = cnt.offset(); + this.data.dnd.cw = parseInt(cnt.width(),10); + this.data.dnd.ch = parseInt(cnt.height(),10); + this.data.dnd.active = true; + } + } + }); + $(function() { + var css_string = '' + + '#vakata-dragged ins { display:block; text-decoration:none; width:16px; height:16px; margin:0 0 0 0; padding:0; position:absolute; top:4px; left:4px; ' + + ' -moz-border-radius:4px; border-radius:4px; -webkit-border-radius:4px; ' + + '} ' + + '#vakata-dragged .jstree-ok { background:green; } ' + + '#vakata-dragged .jstree-invalid { background:red; } ' + + '#jstree-marker { padding:0; margin:0; font-size:12px; overflow:hidden; height:12px; width:8px; position:absolute; top:-30px; z-index:10001; background-repeat:no-repeat; display:none; background-color:transparent; text-shadow:1px 1px 1px white; color:black; line-height:10px; } ' + + '#jstree-marker-line { padding:0; margin:0; line-height:0%; font-size:1px; overflow:hidden; height:1px; width:100px; position:absolute; top:-30px; z-index:10000; background-repeat:no-repeat; display:none; background-color:#456c43; ' + + ' cursor:pointer; border:1px solid #eeeeee; border-left:0; -moz-box-shadow: 0px 0px 2px #666; -webkit-box-shadow: 0px 0px 2px #666; box-shadow: 0px 0px 2px #666; ' + + ' -moz-border-radius:1px; border-radius:1px; -webkit-border-radius:1px; ' + + '}' + + ''; + $.vakata.css.add_sheet({ str : css_string, title : "jstree" }); + m = $("
                ").attr({ id : "jstree-marker" }).hide().html("»") + .bind("mouseleave mouseenter", function (e) { + m.hide(); + ml.hide(); + e.preventDefault(); + e.stopImmediatePropagation(); + return false; + }) + .appendTo("body"); + ml = $("
                ").attr({ id : "jstree-marker-line" }).hide() + .bind("mouseup", function (e) { + if(r && r.length) { + r.children("a").trigger(e); + e.preventDefault(); + e.stopImmediatePropagation(); + return false; + } + }) + .bind("mouseleave", function (e) { + var rt = $(e.relatedTarget); + if(rt.is(".jstree") || rt.closest(".jstree").length === 0) { + if(r && r.length) { + r.children("a").trigger(e); + m.hide(); + ml.hide(); + e.preventDefault(); + e.stopImmediatePropagation(); + return false; + } + } + }) + .appendTo("body"); + $(document).bind("drag_start.vakata", function (e, data) { + if(data.data.jstree) { m.show(); if(ml) { ml.show(); } } + }); + $(document).bind("drag_stop.vakata", function (e, data) { + if(data.data.jstree) { m.hide(); if(ml) { ml.hide(); } } + }); + }); +})(jQuery); +//*/ + +/* + * jsTree checkbox plugin + * Inserts checkboxes in front of every node + * Depends on the ui plugin + * DOES NOT WORK NICELY WITH MULTITREE DRAG'N'DROP + */ +(function ($) { + $.jstree.plugin("checkbox", { + __init : function () { + this.data.checkbox.noui = this._get_settings().checkbox.override_ui; + if(this.data.ui && this.data.checkbox.noui) { + this.select_node = this.deselect_node = this.deselect_all = $.noop; + this.get_selected = this.get_checked; + } + + this.get_container() + .bind("open_node.jstree create_node.jstree clean_node.jstree refresh.jstree", $.proxy(function (e, data) { + this._prepare_checkboxes(data.rslt.obj); + }, this)) + .bind("loaded.jstree", $.proxy(function (e) { + this._prepare_checkboxes(); + }, this)) + .delegate( (this.data.ui && this.data.checkbox.noui ? "a" : "ins.jstree-checkbox") , "click.jstree", $.proxy(function (e) { + e.preventDefault(); + if(this._get_node(e.target).hasClass("jstree-checked")) { this.uncheck_node(e.target); } + else { this.check_node(e.target); } + if(this.data.ui && this.data.checkbox.noui) { + this.save_selected(); + if(this.data.cookies) { this.save_cookie("select_node"); } + } + else { + e.stopImmediatePropagation(); + return false; + } + }, this)); + }, + defaults : { + override_ui : false, + two_state : false, + real_checkboxes : false, + checked_parent_open : true, + real_checkboxes_names : function (n) { return [ ("check_" + (n[0].id || Math.ceil(Math.random() * 10000))) , 1]; } + }, + __destroy : function () { + this.get_container() + .find("input.jstree-real-checkbox").removeClass("jstree-real-checkbox").end() + .find("ins.jstree-checkbox").remove(); + }, + _fn : { + _checkbox_notify : function (n, data) { + if(data.checked) { + this.check_node(n, false); + } + }, + _prepare_checkboxes : function (obj) { + obj = !obj || obj == -1 ? this.get_container().find("> ul > li") : this._get_node(obj); + if(obj === false) { return; } // added for removing root nodes + var c, _this = this, t, ts = this._get_settings().checkbox.two_state, rc = this._get_settings().checkbox.real_checkboxes, rcn = this._get_settings().checkbox.real_checkboxes_names; + obj.each(function () { + t = $(this); + c = t.is("li") && (t.hasClass("jstree-checked") || (rc && t.children(":checked").length)) ? "jstree-checked" : "jstree-unchecked"; + t.find("li").andSelf().each(function () { + var $t = $(this), nm; + $t.children("a" + (_this.data.languages ? "" : ":eq(0)") ).not(":has(.jstree-checkbox)").prepend(" ").parent().not(".jstree-checked, .jstree-unchecked").addClass( ts ? "jstree-unchecked" : c ); + if(rc) { + if(!$t.children(":checkbox").length) { + nm = rcn.call(_this, $t); + $t.prepend(""); + } + else { + $t.children(":checkbox").addClass("jstree-real-checkbox"); + } + if(c === "jstree-checked") { + $t.children(":checkbox").attr("checked","checked"); + } + } + if(c === "jstree-checked" && !ts) { + $t.find("li").addClass("jstree-checked"); + } + }); + }); + if(!ts) { + if(obj.length === 1 && obj.is("li")) { this._repair_state(obj); } + if(obj.is("li")) { obj.each(function () { _this._repair_state(this); }); } + else { obj.find("> ul > li").each(function () { _this._repair_state(this); }); } + obj.find(".jstree-checked").parent().parent().each(function () { _this._repair_state(this); }); + } + }, + change_state : function (obj, state) { + obj = this._get_node(obj); + var coll = false, rc = this._get_settings().checkbox.real_checkboxes; + if(!obj || obj === -1) { return false; } + state = (state === false || state === true) ? state : obj.hasClass("jstree-checked"); + if(this._get_settings().checkbox.two_state) { + if(state) { + obj.removeClass("jstree-checked").addClass("jstree-unchecked"); + if(rc) { obj.children(":checkbox").removeAttr("checked"); } + } + else { + obj.removeClass("jstree-unchecked").addClass("jstree-checked"); + if(rc) { obj.children(":checkbox").attr("checked","checked"); } + } + } + else { + if(state) { + coll = obj.find("li").andSelf(); + if(!coll.filter(".jstree-checked, .jstree-undetermined").length) { return false; } + coll.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked"); + if(rc) { coll.children(":checkbox").removeAttr("checked"); } + } + else { + coll = obj.find("li").andSelf(); + if(!coll.filter(".jstree-unchecked, .jstree-undetermined").length) { return false; } + coll.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked"); + if(rc) { coll.children(":checkbox").attr("checked","checked"); } + if(this.data.ui) { this.data.ui.last_selected = obj; } + this.data.checkbox.last_selected = obj; + } + obj.parentsUntil(".jstree", "li").each(function () { + var $this = $(this); + if(state) { + if($this.children("ul").children("li.jstree-checked, li.jstree-undetermined").length) { + $this.parentsUntil(".jstree", "li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined"); + if(rc) { $this.parentsUntil(".jstree", "li").andSelf().children(":checkbox").removeAttr("checked"); } + return false; + } + else { + $this.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked"); + if(rc) { $this.children(":checkbox").removeAttr("checked"); } + } + } + else { + if($this.children("ul").children("li.jstree-unchecked, li.jstree-undetermined").length) { + $this.parentsUntil(".jstree", "li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined"); + if(rc) { $this.parentsUntil(".jstree", "li").andSelf().children(":checkbox").removeAttr("checked"); } + return false; + } + else { + $this.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked"); + if(rc) { $this.children(":checkbox").attr("checked","checked"); } + } + } + }); + } + if(this.data.ui && this.data.checkbox.noui) { this.data.ui.selected = this.get_checked(); } + this.__callback(obj); + return true; + }, + check_node : function (obj) { + if(this.change_state(obj, false)) { + obj = this._get_node(obj); + if(this._get_settings().checkbox.checked_parent_open) { + var t = this; + obj.parents(".jstree-closed").each(function () { t.open_node(this, false, true); }); + } + this.__callback({ "obj" : obj }); + } + }, + uncheck_node : function (obj) { + if(this.change_state(obj, true)) { this.__callback({ "obj" : this._get_node(obj) }); } + }, + check_all : function () { + var _this = this, + coll = this._get_settings().checkbox.two_state ? this.get_container_ul().find("li") : this.get_container_ul().children("li"); + coll.each(function () { + _this.change_state(this, false); + }); + this.__callback(); + }, + uncheck_all : function () { + var _this = this, + coll = this._get_settings().checkbox.two_state ? this.get_container_ul().find("li") : this.get_container_ul().children("li"); + coll.each(function () { + _this.change_state(this, true); + }); + this.__callback(); + }, + + is_checked : function(obj) { + obj = this._get_node(obj); + return obj.length ? obj.is(".jstree-checked") : false; + }, + get_checked : function (obj, get_all) { + obj = !obj || obj === -1 ? this.get_container() : this._get_node(obj); + return get_all || this._get_settings().checkbox.two_state ? obj.find(".jstree-checked") : obj.find("> ul > .jstree-checked, .jstree-undetermined > ul > .jstree-checked"); + }, + get_unchecked : function (obj, get_all) { + obj = !obj || obj === -1 ? this.get_container() : this._get_node(obj); + return get_all || this._get_settings().checkbox.two_state ? obj.find(".jstree-unchecked") : obj.find("> ul > .jstree-unchecked, .jstree-undetermined > ul > .jstree-unchecked"); + }, + + show_checkboxes : function () { this.get_container().children("ul").removeClass("jstree-no-checkboxes"); }, + hide_checkboxes : function () { this.get_container().children("ul").addClass("jstree-no-checkboxes"); }, + + _repair_state : function (obj) { + obj = this._get_node(obj); + if(!obj.length) { return; } + var rc = this._get_settings().checkbox.real_checkboxes, + a = obj.find("> ul > .jstree-checked").length, + b = obj.find("> ul > .jstree-undetermined").length, + c = obj.find("> ul > li").length; + if(c === 0) { if(obj.hasClass("jstree-undetermined")) { this.change_state(obj, false); } } + else if(a === 0 && b === 0) { this.change_state(obj, true); } + else if(a === c) { this.change_state(obj, false); } + else { + obj.parentsUntil(".jstree","li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined"); + if(rc) { obj.parentsUntil(".jstree", "li").andSelf().children(":checkbox").removeAttr("checked"); } + } + }, + reselect : function () { + if(this.data.ui && this.data.checkbox.noui) { + var _this = this, + s = this.data.ui.to_select; + s = $.map($.makeArray(s), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); }); + this.deselect_all(); + $.each(s, function (i, val) { _this.check_node(val); }); + this.__callback(); + } + else { + this.__call_old(); + } + }, + save_loaded : function () { + var _this = this; + this.data.core.to_load = []; + this.get_container_ul().find("li.jstree-closed.jstree-undetermined").each(function () { + if(this.id) { _this.data.core.to_load.push("#" + this.id); } + }); + } + } + }); + $(function() { + var css_string = '.jstree .jstree-real-checkbox { display:none; } '; + $.vakata.css.add_sheet({ str : css_string, title : "jstree" }); + }); +})(jQuery); +//*/ + +/* + * jsTree XML plugin + * The XML data store. Datastores are build by overriding the `load_node` and `_is_loaded` functions. + */ +(function ($) { + $.vakata.xslt = function (xml, xsl, callback) { + var rs = "", xm, xs, processor, support; + // TODO: IE9 no XSLTProcessor, no document.recalc + if(document.recalc) { + xm = document.createElement('xml'); + xs = document.createElement('xml'); + xm.innerHTML = xml; + xs.innerHTML = xsl; + $("body").append(xm).append(xs); + setTimeout( (function (xm, xs, callback) { + return function () { + callback.call(null, xm.transformNode(xs.XMLDocument)); + setTimeout( (function (xm, xs) { return function () { $(xm).remove(); $(xs).remove(); }; })(xm, xs), 200); + }; + })(xm, xs, callback), 100); + return true; + } + if(typeof window.DOMParser !== "undefined" && typeof window.XMLHttpRequest !== "undefined" && typeof window.XSLTProcessor === "undefined") { + xml = new DOMParser().parseFromString(xml, "text/xml"); + xsl = new DOMParser().parseFromString(xsl, "text/xml"); + // alert(xml.transformNode()); + // callback.call(null, new XMLSerializer().serializeToString(rs)); + + } + if(typeof window.DOMParser !== "undefined" && typeof window.XMLHttpRequest !== "undefined" && typeof window.XSLTProcessor !== "undefined") { + processor = new XSLTProcessor(); + support = $.isFunction(processor.transformDocument) ? (typeof window.XMLSerializer !== "undefined") : true; + if(!support) { return false; } + xml = new DOMParser().parseFromString(xml, "text/xml"); + xsl = new DOMParser().parseFromString(xsl, "text/xml"); + if($.isFunction(processor.transformDocument)) { + rs = document.implementation.createDocument("", "", null); + processor.transformDocument(xml, xsl, rs, null); + callback.call(null, new XMLSerializer().serializeToString(rs)); + return true; + } + else { + processor.importStylesheet(xsl); + rs = processor.transformToFragment(xml, document); + callback.call(null, $("
                ").append(rs).html()); + return true; + } + } + return false; + }; + var xsl = { + 'nest' : '<' + '?xml version="1.0" encoding="utf-8" ?>' + + '' + + '' + + '' + + ' ' + + ' ' + + ' ' + + '' + + '' + + ' ' + + ' ' + + '' + + '', + + 'flat' : '<' + '?xml version="1.0" encoding="utf-8" ?>' + + '' + + '' + + '' + + '
                  ' + + ' ' + /* the last `or` may be removed */ + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + '
                ' + + '
                ' + + '' + + ' ' + + ' ' + + ' ' + + '
              • ' + + ' ' + + ' jstree-last ' + + ' ' + + ' jstree-open ' + + ' jstree-closed ' + + ' jstree-leaf ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + '  ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' #' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' jstree-icon ' + + ' ' + + ' ' + + ' background:url() center center no-repeat;' + + '  ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + '
                  ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + '
                ' + + '
                ' + + '
              • ' + + '' + + '' + }, + escape_xml = function(string) { + return string + .toString() + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + }; + $.jstree.plugin("xml_data", { + defaults : { + data : false, + ajax : false, + xsl : "flat", + clean_node : false, + correct_state : true, + get_skip_empty : false, + get_include_preamble : true + }, + _fn : { + load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_xml(obj, function () { _this.__callback({ "obj" : _this._get_node(obj) }); s_call.call(this); }, e_call); }, + _is_loaded : function (obj) { + var s = this._get_settings().xml_data; + obj = this._get_node(obj); + return obj == -1 || !obj || (!s.ajax && !$.isFunction(s.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0; + }, + load_node_xml : function (obj, s_call, e_call) { + var s = this.get_settings().xml_data, + error_func = function () {}, + success_func = function () {}; + + obj = this._get_node(obj); + if(obj && obj !== -1) { + if(obj.data("jstree-is-loading")) { return; } + else { obj.data("jstree-is-loading",true); } + } + switch(!0) { + case (!s.data && !s.ajax): throw "Neither data nor ajax settings supplied."; + case ($.isFunction(s.data)): + s.data.call(this, obj, $.proxy(function (d) { + this.parse_xml(d, $.proxy(function (d) { + if(d) { + d = d.replace(/ ?xmlns="[^"]*"/ig, ""); + if(d.length > 10) { + d = $(d); + if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); } + else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d); obj.removeData("jstree-is-loading"); } + if(s.clean_node) { this.clean_node(obj); } + if(s_call) { s_call.call(this); } + } + else { + if(obj && obj !== -1) { + obj.children("a.jstree-loading").removeClass("jstree-loading"); + obj.removeData("jstree-is-loading"); + if(s.correct_state) { + this.correct_state(obj); + if(s_call) { s_call.call(this); } + } + } + else { + if(s.correct_state) { + this.get_container().children("ul").empty(); + if(s_call) { s_call.call(this); } + } + } + } + } + }, this)); + }, this)); + break; + case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)): + if(!obj || obj == -1) { + this.parse_xml(s.data, $.proxy(function (d) { + if(d) { + d = d.replace(/ ?xmlns="[^"]*"/ig, ""); + if(d.length > 10) { + d = $(d); + this.get_container().children("ul").empty().append(d.children()); + if(s.clean_node) { this.clean_node(obj); } + if(s_call) { s_call.call(this); } + } + } + else { + if(s.correct_state) { + this.get_container().children("ul").empty(); + if(s_call) { s_call.call(this); } + } + } + }, this)); + } + break; + case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1): + error_func = function (x, t, e) { + var ef = this.get_settings().xml_data.ajax.error; + if(ef) { ef.call(this, x, t, e); } + if(obj !== -1 && obj.length) { + obj.children("a.jstree-loading").removeClass("jstree-loading"); + obj.removeData("jstree-is-loading"); + if(t === "success" && s.correct_state) { this.correct_state(obj); } + } + else { + if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); } + } + if(e_call) { e_call.call(this); } + }; + success_func = function (d, t, x) { + d = x.responseText; + var sf = this.get_settings().xml_data.ajax.success; + if(sf) { d = sf.call(this,d,t,x) || d; } + if(d === "" || (d && d.toString && d.toString().replace(/^[\s\n]+$/,"") === "")) { + return error_func.call(this, x, t, ""); + } + this.parse_xml(d, $.proxy(function (d) { + if(d) { + d = d.replace(/ ?xmlns="[^"]*"/ig, ""); + if(d.length > 10) { + d = $(d); + if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); } + else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d); obj.removeData("jstree-is-loading"); } + if(s.clean_node) { this.clean_node(obj); } + if(s_call) { s_call.call(this); } + } + else { + if(obj && obj !== -1) { + obj.children("a.jstree-loading").removeClass("jstree-loading"); + obj.removeData("jstree-is-loading"); + if(s.correct_state) { + this.correct_state(obj); + if(s_call) { s_call.call(this); } + } + } + else { + if(s.correct_state) { + this.get_container().children("ul").empty(); + if(s_call) { s_call.call(this); } + } + } + } + } + }, this)); + }; + s.ajax.context = this; + s.ajax.error = error_func; + s.ajax.success = success_func; + if(!s.ajax.dataType) { s.ajax.dataType = "xml"; } + if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); } + if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); } + $.ajax(s.ajax); + break; + } + }, + parse_xml : function (xml, callback) { + var s = this._get_settings().xml_data; + $.vakata.xslt(xml, xsl[s.xsl], callback); + }, + get_xml : function (tp, obj, li_attr, a_attr, is_callback) { + var result = "", + s = this._get_settings(), + _this = this, + tmp1, tmp2, li, a, lang; + if(!tp) { tp = "flat"; } + if(!is_callback) { is_callback = 0; } + obj = this._get_node(obj); + if(!obj || obj === -1) { obj = this.get_container().find("> ul > li"); } + li_attr = $.isArray(li_attr) ? li_attr : [ "id", "class" ]; + if(!is_callback && this.data.types && $.inArray(s.types.type_attr, li_attr) === -1) { li_attr.push(s.types.type_attr); } + + a_attr = $.isArray(a_attr) ? a_attr : [ ]; + + if(!is_callback) { + if(s.xml_data.get_include_preamble) { + result += '<' + '?xml version="1.0" encoding="UTF-8"?' + '>'; + } + result += ""; + } + obj.each(function () { + result += ""; + result += ""; + }); + result += ""; + tmp2 = li[0].id || true; + li = li.find("> ul > li"); + if(li.length) { tmp2 = _this.get_xml(tp, li, li_attr, a_attr, tmp2); } + else { tmp2 = ""; } + if(tp == "nest") { result += tmp2; } + result += ""; + if(tp == "flat") { result += tmp2; } + }); + if(!is_callback) { result += ""; } + return result; + } + } + }); +})(jQuery); +//*/ + +/* + * jsTree search plugin + * Enables both sync and async search on the tree + * DOES NOT WORK WITH JSON PROGRESSIVE RENDER + */ +(function ($) { + $.expr[':'].jstree_contains = function(a,i,m){ + return (a.textContent || a.innerText || "").toLowerCase().indexOf(m[3].toLowerCase())>=0; + }; + $.expr[':'].jstree_title_contains = function(a,i,m) { + return (a.getAttribute("title") || "").toLowerCase().indexOf(m[3].toLowerCase())>=0; + }; + $.jstree.plugin("search", { + __init : function () { + this.data.search.str = ""; + this.data.search.result = $(); + if(this._get_settings().search.show_only_matches) { + this.get_container() + .bind("search.jstree", function (e, data) { + $(this).children("ul").find("li").hide().removeClass("jstree-last"); + data.rslt.nodes.parentsUntil(".jstree").andSelf().show() + .filter("ul").each(function () { $(this).children("li:visible").eq(-1).addClass("jstree-last"); }); + }) + .bind("clear_search.jstree", function () { + $(this).children("ul").find("li").css("display","").end().end().jstree("clean_node", -1); + }); + } + }, + defaults : { + ajax : false, + search_method : "jstree_contains", // for case insensitive - jstree_contains + show_only_matches : false + }, + _fn : { + search : function (str, skip_async) { + if($.trim(str) === "") { this.clear_search(); return; } + var s = this.get_settings().search, + t = this, + error_func = function () { }, + success_func = function () { }; + this.data.search.str = str; + + if(!skip_async && s.ajax !== false && this.get_container_ul().find("li.jstree-closed:not(:has(ul)):eq(0)").length > 0) { + this.search.supress_callback = true; + error_func = function () { }; + success_func = function (d, t, x) { + var sf = this.get_settings().search.ajax.success; + if(sf) { d = sf.call(this,d,t,x) || d; } + this.data.search.to_open = d; + this._search_open(); + }; + s.ajax.context = this; + s.ajax.error = error_func; + s.ajax.success = success_func; + if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, str); } + if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, str); } + if(!s.ajax.data) { s.ajax.data = { "search_string" : str }; } + if(!s.ajax.dataType || /^json/.exec(s.ajax.dataType)) { s.ajax.dataType = "json"; } + $.ajax(s.ajax); + return; + } + if(this.data.search.result.length) { this.clear_search(); } + this.data.search.result = this.get_container().find("a" + (this.data.languages ? "." + this.get_lang() : "" ) + ":" + (s.search_method) + "(" + this.data.search.str + ")"); + this.data.search.result.addClass("jstree-search").parent().parents(".jstree-closed").each(function () { + t.open_node(this, false, true); + }); + this.__callback({ nodes : this.data.search.result, str : str }); + }, + clear_search : function (str) { + this.data.search.result.removeClass("jstree-search"); + this.__callback(this.data.search.result); + this.data.search.result = $(); + }, + _search_open : function (is_callback) { + var _this = this, + done = true, + current = [], + remaining = []; + if(this.data.search.to_open.length) { + $.each(this.data.search.to_open, function (i, val) { + if(val == "#") { return true; } + if($(val).length && $(val).is(".jstree-closed")) { current.push(val); } + else { remaining.push(val); } + }); + if(current.length) { + this.data.search.to_open = remaining; + $.each(current, function (i, val) { + _this.open_node(val, function () { _this._search_open(true); }); + }); + done = false; + } + } + if(done) { this.search(this.data.search.str, true); } + } + } + }); +})(jQuery); +//*/ + +/* + * jsTree contextmenu plugin + */ +(function ($) { + $.vakata.context = { + hide_on_mouseleave : false, + + cnt : $("
                "), + vis : false, + tgt : false, + par : false, + func : false, + data : false, + rtl : false, + show : function (s, t, x, y, d, p, rtl) { + $.vakata.context.rtl = !!rtl; + var html = $.vakata.context.parse(s), h, w; + if(!html) { return; } + $.vakata.context.vis = true; + $.vakata.context.tgt = t; + $.vakata.context.par = p || t || null; + $.vakata.context.data = d || null; + $.vakata.context.cnt + .html(html) + .css({ "visibility" : "hidden", "display" : "block", "left" : 0, "top" : 0 }); + + if($.vakata.context.hide_on_mouseleave) { + $.vakata.context.cnt + .one("mouseleave", function(e) { $.vakata.context.hide(); }); + } + + h = $.vakata.context.cnt.height(); + w = $.vakata.context.cnt.width(); + if(x + w > $(document).width()) { + x = $(document).width() - (w + 5); + $.vakata.context.cnt.find("li > ul").addClass("right"); + } + if(y + h > $(document).height()) { + y = y - (h + t[0].offsetHeight); + $.vakata.context.cnt.find("li > ul").addClass("bottom"); + } + + $.vakata.context.cnt + .css({ "left" : x, "top" : y }) + .find("li:has(ul)") + .bind("mouseenter", function (e) { + var w = $(document).width(), + h = $(document).height(), + ul = $(this).children("ul").show(); + if(w !== $(document).width()) { ul.toggleClass("right"); } + if(h !== $(document).height()) { ul.toggleClass("bottom"); } + }) + .bind("mouseleave", function (e) { + $(this).children("ul").hide(); + }) + .end() + .css({ "visibility" : "visible" }) + .show(); + $(document).triggerHandler("context_show.vakata"); + }, + hide : function () { + $.vakata.context.vis = false; + $.vakata.context.cnt.attr("class","").css({ "visibility" : "hidden" }); + $(document).triggerHandler("context_hide.vakata"); + }, + parse : function (s, is_callback) { + if(!s) { return false; } + var str = "", + tmp = false, + was_sep = true; + if(!is_callback) { $.vakata.context.func = {}; } + str += ""; + $(document).triggerHandler("context_parse.vakata"); + return str.length > 10 ? str : false; + }, + exec : function (i) { + if($.isFunction($.vakata.context.func[i])) { + // if is string - eval and call it! + $.vakata.context.func[i].call($.vakata.context.data, $.vakata.context.par); + return true; + } + else { return false; } + } + }; + $(function () { + var css_string = '' + + '#vakata-contextmenu { display:block; visibility:hidden; left:0; top:-200px; position:absolute; margin:0; padding:0; min-width:180px; background:#ebebeb; border:1px solid silver; z-index:10000; *width:180px; } ' + + '#vakata-contextmenu ul { min-width:180px; *width:180px; } ' + + '#vakata-contextmenu ul, #vakata-contextmenu li { margin:0; padding:0; list-style-type:none; display:block; } ' + + '#vakata-contextmenu li { line-height:20px; min-height:20px; position:relative; padding:0px; } ' + + '#vakata-contextmenu li a { padding:1px 6px; line-height:17px; display:block; text-decoration:none; margin:1px 1px 0 1px; } ' + + '#vakata-contextmenu li ins { float:left; width:16px; height:16px; text-decoration:none; margin-right:2px; } ' + + '#vakata-contextmenu li a:hover, #vakata-contextmenu li.vakata-hover > a { background:gray; color:white; } ' + + '#vakata-contextmenu li ul { display:none; position:absolute; top:-2px; left:100%; background:#ebebeb; border:1px solid gray; } ' + + '#vakata-contextmenu .right { right:100%; left:auto; } ' + + '#vakata-contextmenu .bottom { bottom:-1px; top:auto; } ' + + '#vakata-contextmenu li.vakata-separator { min-height:0; height:1px; line-height:1px; font-size:1px; overflow:hidden; margin:0 2px; background:silver; /* border-top:1px solid #fefefe; */ padding:0; } '; + $.vakata.css.add_sheet({ str : css_string, title : "vakata" }); + $.vakata.context.cnt + .delegate("a","click", function (e) { e.preventDefault(); }) + .delegate("a","mouseup", function (e) { + if(!$(this).parent().hasClass("jstree-contextmenu-disabled") && $.vakata.context.exec($(this).attr("rel"))) { + $.vakata.context.hide(); + } + else { $(this).blur(); } + }) + .delegate("a","mouseover", function () { + $.vakata.context.cnt.find(".vakata-hover").removeClass("vakata-hover"); + }) + .appendTo("body"); + $(document).bind("mousedown", function (e) { if($.vakata.context.vis && !$.contains($.vakata.context.cnt[0], e.target)) { $.vakata.context.hide(); } }); + if(typeof $.hotkeys !== "undefined") { + $(document) + .bind("keydown", "up", function (e) { + if($.vakata.context.vis) { + var o = $.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").prevAll("li:not(.vakata-separator)").first(); + if(!o.length) { o = $.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").last(); } + o.addClass("vakata-hover"); + e.stopImmediatePropagation(); + e.preventDefault(); + } + }) + .bind("keydown", "down", function (e) { + if($.vakata.context.vis) { + var o = $.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").nextAll("li:not(.vakata-separator)").first(); + if(!o.length) { o = $.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").first(); } + o.addClass("vakata-hover"); + e.stopImmediatePropagation(); + e.preventDefault(); + } + }) + .bind("keydown", "right", function (e) { + if($.vakata.context.vis) { + $.vakata.context.cnt.find(".vakata-hover").children("ul").show().children("li:not(.vakata-separator)").removeClass("vakata-hover").first().addClass("vakata-hover"); + e.stopImmediatePropagation(); + e.preventDefault(); + } + }) + .bind("keydown", "left", function (e) { + if($.vakata.context.vis) { + $.vakata.context.cnt.find(".vakata-hover").children("ul").hide().children(".vakata-separator").removeClass("vakata-hover"); + e.stopImmediatePropagation(); + e.preventDefault(); + } + }) + .bind("keydown", "esc", function (e) { + $.vakata.context.hide(); + e.preventDefault(); + }) + .bind("keydown", "space", function (e) { + $.vakata.context.cnt.find(".vakata-hover").last().children("a").click(); + e.preventDefault(); + }); + } + }); + + $.jstree.plugin("contextmenu", { + __init : function () { + this.get_container() + .delegate("a", "contextmenu.jstree", $.proxy(function (e) { + e.preventDefault(); + if(!$(e.currentTarget).hasClass("jstree-loading")) { + this.show_contextmenu(e.currentTarget, e.pageX, e.pageY); + } + }, this)) + .delegate("a", "click.jstree", $.proxy(function (e) { + if(this.data.contextmenu) { + $.vakata.context.hide(); + } + }, this)) + .bind("destroy.jstree", $.proxy(function () { + // TODO: move this to descruct method + if(this.data.contextmenu) { + $.vakata.context.hide(); + } + }, this)); + $(document).bind("context_hide.vakata", $.proxy(function () { this.data.contextmenu = false; }, this)); + }, + defaults : { + select_node : false, // requires UI plugin + show_at_node : true, + items : { // Could be a function that should return an object like this one + "create" : { + "separator_before" : false, + "separator_after" : true, + "label" : "Create", + "action" : function (obj) { this.create(obj); } + }, + "rename" : { + "separator_before" : false, + "separator_after" : false, + "label" : "Rename", + "action" : function (obj) { this.rename(obj); } + }, + "remove" : { + "separator_before" : false, + "icon" : false, + "separator_after" : false, + "label" : "Delete", + "action" : function (obj) { if(this.is_selected(obj)) { this.remove(); } else { this.remove(obj); } } + }, + "ccp" : { + "separator_before" : true, + "icon" : false, + "separator_after" : false, + "label" : "Edit", + "action" : false, + "submenu" : { + "cut" : { + "separator_before" : false, + "separator_after" : false, + "label" : "Cut", + "action" : function (obj) { this.cut(obj); } + }, + "copy" : { + "separator_before" : false, + "icon" : false, + "separator_after" : false, + "label" : "Copy", + "action" : function (obj) { this.copy(obj); } + }, + "paste" : { + "separator_before" : false, + "icon" : false, + "separator_after" : false, + "label" : "Paste", + "action" : function (obj) { this.paste(obj); } + } + } + } + } + }, + _fn : { + show_contextmenu : function (obj, x, y) { + obj = this._get_node(obj); + var s = this.get_settings().contextmenu, + a = obj.children("a:visible:eq(0)"), + o = false, + i = false; + if(s.select_node && this.data.ui && !this.is_selected(obj)) { + this.deselect_all(); + this.select_node(obj, true); + } + if(s.show_at_node || typeof x === "undefined" || typeof y === "undefined") { + o = a.offset(); + x = o.left; + y = o.top + this.data.core.li_height; + } + i = obj.data("jstree") && obj.data("jstree").contextmenu ? obj.data("jstree").contextmenu : s.items; + if($.isFunction(i)) { i = i.call(this, obj); } + this.data.contextmenu = true; + $.vakata.context.show(i, a, x, y, this, obj, this._get_settings().core.rtl); + if(this.data.themes) { $.vakata.context.cnt.attr("class", "jstree-" + this.data.themes.theme + "-context"); } + } + } + }); +})(jQuery); +//*/ + +/* + * jsTree types plugin + * Adds support types of nodes + * You can set an attribute on each li node, that represents its type. + * According to the type setting the node may get custom icon/validation rules + */ +(function ($) { + $.jstree.plugin("types", { + __init : function () { + var s = this._get_settings().types; + this.data.types.attach_to = []; + this.get_container() + .bind("init.jstree", $.proxy(function () { + var types = s.types, + attr = s.type_attr, + icons_css = "", + _this = this; + + $.each(types, function (i, tp) { + $.each(tp, function (k, v) { + if(!/^(max_depth|max_children|icon|valid_children)$/.test(k)) { _this.data.types.attach_to.push(k); } + }); + if(!tp.icon) { return true; } + if( tp.icon.image || tp.icon.position) { + if(i == "default") { icons_css += '.jstree-' + _this.get_index() + ' a > .jstree-icon { '; } + else { icons_css += '.jstree-' + _this.get_index() + ' li[' + attr + '="' + i + '"] > a > .jstree-icon { '; } + if(tp.icon.image) { icons_css += ' background-image:url(' + tp.icon.image + '); '; } + if(tp.icon.position){ icons_css += ' background-position:' + tp.icon.position + '; '; } + else { icons_css += ' background-position:0 0; '; } + icons_css += '} '; + } + }); + if(icons_css !== "") { $.vakata.css.add_sheet({ 'str' : icons_css, title : "jstree-types" }); } + }, this)) + .bind("before.jstree", $.proxy(function (e, data) { + var s, t, + o = this._get_settings().types.use_data ? this._get_node(data.args[0]) : false, + d = o && o !== -1 && o.length ? o.data("jstree") : false; + if(d && d.types && d.types[data.func] === false) { e.stopImmediatePropagation(); return false; } + if($.inArray(data.func, this.data.types.attach_to) !== -1) { + if(!data.args[0] || (!data.args[0].tagName && !data.args[0].jquery)) { return; } + s = this._get_settings().types.types; + t = this._get_type(data.args[0]); + if( + ( + (s[t] && typeof s[t][data.func] !== "undefined") || + (s["default"] && typeof s["default"][data.func] !== "undefined") + ) && this._check(data.func, data.args[0]) === false + ) { + e.stopImmediatePropagation(); + return false; + } + } + }, this)); + if(is_ie6) { + this.get_container() + .bind("load_node.jstree set_type.jstree", $.proxy(function (e, data) { + var r = data && data.rslt && data.rslt.obj && data.rslt.obj !== -1 ? this._get_node(data.rslt.obj).parent() : this.get_container_ul(), + c = false, + s = this._get_settings().types; + $.each(s.types, function (i, tp) { + if(tp.icon && (tp.icon.image || tp.icon.position)) { + c = i === "default" ? r.find("li > a > .jstree-icon") : r.find("li[" + s.type_attr + "='" + i + "'] > a > .jstree-icon"); + if(tp.icon.image) { c.css("backgroundImage","url(" + tp.icon.image + ")"); } + c.css("backgroundPosition", tp.icon.position || "0 0"); + } + }); + }, this)); + } + }, + defaults : { + // defines maximum number of root nodes (-1 means unlimited, -2 means disable max_children checking) + max_children : -1, + // defines the maximum depth of the tree (-1 means unlimited, -2 means disable max_depth checking) + max_depth : -1, + // defines valid node types for the root nodes + valid_children : "all", + + // whether to use $.data + use_data : false, + // where is the type stores (the rel attribute of the LI element) + type_attr : "rel", + // a list of types + types : { + // the default type + "default" : { + "max_children" : -1, + "max_depth" : -1, + "valid_children": "all" + + // Bound functions - you can bind any other function here (using boolean or function) + //"select_node" : true + } + } + }, + _fn : { + _types_notify : function (n, data) { + if(data.type && this._get_settings().types.use_data) { + this.set_type(data.type, n); + } + }, + _get_type : function (obj) { + obj = this._get_node(obj); + return (!obj || !obj.length) ? false : obj.attr(this._get_settings().types.type_attr) || "default"; + }, + set_type : function (str, obj) { + obj = this._get_node(obj); + var ret = (!obj.length || !str) ? false : obj.attr(this._get_settings().types.type_attr, str); + if(ret) { this.__callback({ obj : obj, type : str}); } + return ret; + }, + _check : function (rule, obj, opts) { + obj = this._get_node(obj); + var v = false, t = this._get_type(obj), d = 0, _this = this, s = this._get_settings().types, data = false; + if(obj === -1) { + if(!!s[rule]) { v = s[rule]; } + else { return; } + } + else { + if(t === false) { return; } + data = s.use_data ? obj.data("jstree") : false; + if(data && data.types && typeof data.types[rule] !== "undefined") { v = data.types[rule]; } + else if(!!s.types[t] && typeof s.types[t][rule] !== "undefined") { v = s.types[t][rule]; } + else if(!!s.types["default"] && typeof s.types["default"][rule] !== "undefined") { v = s.types["default"][rule]; } + } + if($.isFunction(v)) { v = v.call(this, obj); } + if(rule === "max_depth" && obj !== -1 && opts !== false && s.max_depth !== -2 && v !== 0) { + // also include the node itself - otherwise if root node it is not checked + obj.children("a:eq(0)").parentsUntil(".jstree","li").each(function (i) { + // check if current depth already exceeds global tree depth + if(s.max_depth !== -1 && s.max_depth - (i + 1) <= 0) { v = 0; return false; } + d = (i === 0) ? v : _this._check(rule, this, false); + // check if current node max depth is already matched or exceeded + if(d !== -1 && d - (i + 1) <= 0) { v = 0; return false; } + // otherwise - set the max depth to the current value minus current depth + if(d >= 0 && (d - (i + 1) < v || v < 0) ) { v = d - (i + 1); } + // if the global tree depth exists and it minus the nodes calculated so far is less than `v` or `v` is unlimited + if(s.max_depth >= 0 && (s.max_depth - (i + 1) < v || v < 0) ) { v = s.max_depth - (i + 1); } + }); + } + return v; + }, + check_move : function () { + if(!this.__call_old()) { return false; } + var m = this._get_move(), + s = m.rt._get_settings().types, + mc = m.rt._check("max_children", m.cr), + md = m.rt._check("max_depth", m.cr), + vc = m.rt._check("valid_children", m.cr), + ch = 0, d = 1, t; + + if(vc === "none") { return false; } + if($.isArray(vc) && m.ot && m.ot._get_type) { + m.o.each(function () { + if($.inArray(m.ot._get_type(this), vc) === -1) { d = false; return false; } + }); + if(d === false) { return false; } + } + if(s.max_children !== -2 && mc !== -1) { + ch = m.cr === -1 ? this.get_container().find("> ul > li").not(m.o).length : m.cr.find("> ul > li").not(m.o).length; + if(ch + m.o.length > mc) { return false; } + } + if(s.max_depth !== -2 && md !== -1) { + d = 0; + if(md === 0) { return false; } + if(typeof m.o.d === "undefined") { + // TODO: deal with progressive rendering and async when checking max_depth (how to know the depth of the moved node) + t = m.o; + while(t.length > 0) { + t = t.find("> ul > li"); + d ++; + } + m.o.d = d; + } + if(md - m.o.d < 0) { return false; } + } + return true; + }, + create_node : function (obj, position, js, callback, is_loaded, skip_check) { + if(!skip_check && (is_loaded || this._is_loaded(obj))) { + var p = (typeof position == "string" && position.match(/^before|after$/i) && obj !== -1) ? this._get_parent(obj) : this._get_node(obj), + s = this._get_settings().types, + mc = this._check("max_children", p), + md = this._check("max_depth", p), + vc = this._check("valid_children", p), + ch; + if(typeof js === "string") { js = { data : js }; } + if(!js) { js = {}; } + if(vc === "none") { return false; } + if($.isArray(vc)) { + if(!js.attr || !js.attr[s.type_attr]) { + if(!js.attr) { js.attr = {}; } + js.attr[s.type_attr] = vc[0]; + } + else { + if($.inArray(js.attr[s.type_attr], vc) === -1) { return false; } + } + } + if(s.max_children !== -2 && mc !== -1) { + ch = p === -1 ? this.get_container().find("> ul > li").length : p.find("> ul > li").length; + if(ch + 1 > mc) { return false; } + } + if(s.max_depth !== -2 && md !== -1 && (md - 1) < 0) { return false; } + } + return this.__call_old(true, obj, position, js, callback, is_loaded, skip_check); + } + } + }); +})(jQuery); +//*/ + +/* + * jsTree HTML plugin + * The HTML data store. Datastores are build by replacing the `load_node` and `_is_loaded` functions. + */ +(function ($) { + $.jstree.plugin("html_data", { + __init : function () { + // this used to use html() and clean the whitespace, but this way any attached data was lost + this.data.html_data.original_container_html = this.get_container().find(" > ul > li").clone(true); + // remove white space from LI node - otherwise nodes appear a bit to the right + this.data.html_data.original_container_html.find("li").andSelf().contents().filter(function() { return this.nodeType == 3; }).remove(); + }, + defaults : { + data : false, + ajax : false, + correct_state : true + }, + _fn : { + load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_html(obj, function () { _this.__callback({ "obj" : _this._get_node(obj) }); s_call.call(this); }, e_call); }, + _is_loaded : function (obj) { + obj = this._get_node(obj); + return obj == -1 || !obj || (!this._get_settings().html_data.ajax && !$.isFunction(this._get_settings().html_data.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0; + }, + load_node_html : function (obj, s_call, e_call) { + var d, + s = this.get_settings().html_data, + error_func = function () {}, + success_func = function () {}; + obj = this._get_node(obj); + if(obj && obj !== -1) { + if(obj.data("jstree-is-loading")) { return; } + else { obj.data("jstree-is-loading",true); } + } + switch(!0) { + case ($.isFunction(s.data)): + s.data.call(this, obj, $.proxy(function (d) { + if(d && d !== "" && d.toString && d.toString().replace(/^[\s\n]+$/,"") !== "") { + d = $(d); + if(!d.is("ul")) { d = $("
                  ").append(d); } + if(obj == -1 || !obj) { this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); } + else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); obj.removeData("jstree-is-loading"); } + this.clean_node(obj); + if(s_call) { s_call.call(this); } + } + else { + if(obj && obj !== -1) { + obj.children("a.jstree-loading").removeClass("jstree-loading"); + obj.removeData("jstree-is-loading"); + if(s.correct_state) { + this.correct_state(obj); + if(s_call) { s_call.call(this); } + } + } + else { + if(s.correct_state) { + this.get_container().children("ul").empty(); + if(s_call) { s_call.call(this); } + } + } + } + }, this)); + break; + case (!s.data && !s.ajax): + if(!obj || obj == -1) { + this.get_container() + .children("ul").empty() + .append(this.data.html_data.original_container_html) + .find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end() + .filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); + this.clean_node(); + } + if(s_call) { s_call.call(this); } + break; + case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)): + if(!obj || obj == -1) { + d = $(s.data); + if(!d.is("ul")) { d = $("
                    ").append(d); } + this.get_container() + .children("ul").empty().append(d.children()) + .find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end() + .filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); + this.clean_node(); + } + if(s_call) { s_call.call(this); } + break; + case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1): + obj = this._get_node(obj); + error_func = function (x, t, e) { + var ef = this.get_settings().html_data.ajax.error; + if(ef) { ef.call(this, x, t, e); } + if(obj != -1 && obj.length) { + obj.children("a.jstree-loading").removeClass("jstree-loading"); + obj.removeData("jstree-is-loading"); + if(t === "success" && s.correct_state) { this.correct_state(obj); } + } + else { + if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); } + } + if(e_call) { e_call.call(this); } + }; + success_func = function (d, t, x) { + var sf = this.get_settings().html_data.ajax.success; + if(sf) { d = sf.call(this,d,t,x) || d; } + if(d === "" || (d && d.toString && d.toString().replace(/^[\s\n]+$/,"") === "")) { + return error_func.call(this, x, t, ""); + } + if(d) { + d = $(d); + if(!d.is("ul")) { d = $("
                      ").append(d); } + if(obj == -1 || !obj) { this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); } + else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); obj.removeData("jstree-is-loading"); } + this.clean_node(obj); + if(s_call) { s_call.call(this); } + } + else { + if(obj && obj !== -1) { + obj.children("a.jstree-loading").removeClass("jstree-loading"); + obj.removeData("jstree-is-loading"); + if(s.correct_state) { + this.correct_state(obj); + if(s_call) { s_call.call(this); } + } + } + else { + if(s.correct_state) { + this.get_container().children("ul").empty(); + if(s_call) { s_call.call(this); } + } + } + } + }; + s.ajax.context = this; + s.ajax.error = error_func; + s.ajax.success = success_func; + if(!s.ajax.dataType) { s.ajax.dataType = "html"; } + if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); } + if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); } + $.ajax(s.ajax); + break; + } + } + } + }); + // include the HTML data plugin by default + $.jstree.defaults.plugins.push("html_data"); +})(jQuery); +//*/ + +/* + * jsTree themeroller plugin + * Adds support for jQuery UI themes. Include this at the end of your plugins list, also make sure "themes" is not included. + */ +(function ($) { + $.jstree.plugin("themeroller", { + __init : function () { + var s = this._get_settings().themeroller; + this.get_container() + .addClass("ui-widget-content") + .addClass("jstree-themeroller") + .delegate("a","mouseenter.jstree", function (e) { + if(!$(e.currentTarget).hasClass("jstree-loading")) { + $(this).addClass(s.item_h); + } + }) + .delegate("a","mouseleave.jstree", function () { + $(this).removeClass(s.item_h); + }) + .bind("init.jstree", $.proxy(function (e, data) { + data.inst.get_container().find("> ul > li > .jstree-loading > ins").addClass("ui-icon-refresh"); + this._themeroller(data.inst.get_container().find("> ul > li")); + }, this)) + .bind("open_node.jstree create_node.jstree", $.proxy(function (e, data) { + this._themeroller(data.rslt.obj); + }, this)) + .bind("loaded.jstree refresh.jstree", $.proxy(function (e) { + this._themeroller(); + }, this)) + .bind("close_node.jstree", $.proxy(function (e, data) { + this._themeroller(data.rslt.obj); + }, this)) + .bind("delete_node.jstree", $.proxy(function (e, data) { + this._themeroller(data.rslt.parent); + }, this)) + .bind("correct_state.jstree", $.proxy(function (e, data) { + data.rslt.obj + .children("ins.jstree-icon").removeClass(s.opened + " " + s.closed + " ui-icon").end() + .find("> a > ins.ui-icon") + .filter(function() { + return this.className.toString() + .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"") + .indexOf("ui-icon-") === -1; + }).removeClass(s.item_open + " " + s.item_clsd).addClass(s.item_leaf || "jstree-no-icon"); + }, this)) + .bind("select_node.jstree", $.proxy(function (e, data) { + data.rslt.obj.children("a").addClass(s.item_a); + }, this)) + .bind("deselect_node.jstree deselect_all.jstree", $.proxy(function (e, data) { + this.get_container() + .find("a." + s.item_a).removeClass(s.item_a).end() + .find("a.jstree-clicked").addClass(s.item_a); + }, this)) + .bind("dehover_node.jstree", $.proxy(function (e, data) { + data.rslt.obj.children("a").removeClass(s.item_h); + }, this)) + .bind("hover_node.jstree", $.proxy(function (e, data) { + this.get_container() + .find("a." + s.item_h).not(data.rslt.obj).removeClass(s.item_h); + data.rslt.obj.children("a").addClass(s.item_h); + }, this)) + .bind("move_node.jstree", $.proxy(function (e, data) { + this._themeroller(data.rslt.o); + this._themeroller(data.rslt.op); + }, this)); + }, + __destroy : function () { + var s = this._get_settings().themeroller, + c = [ "ui-icon" ]; + $.each(s, function (i, v) { + v = v.split(" "); + if(v.length) { c = c.concat(v); } + }); + this.get_container() + .removeClass("ui-widget-content") + .find("." + c.join(", .")).removeClass(c.join(" ")); + }, + _fn : { + _themeroller : function (obj) { + var s = this._get_settings().themeroller; + obj = !obj || obj == -1 ? this.get_container_ul() : this._get_node(obj).parent(); + obj + .find("li.jstree-closed") + .children("ins.jstree-icon").removeClass(s.opened).addClass("ui-icon " + s.closed).end() + .children("a").addClass(s.item) + .children("ins.jstree-icon").addClass("ui-icon") + .filter(function() { + return this.className.toString() + .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"") + .indexOf("ui-icon-") === -1; + }).removeClass(s.item_leaf + " " + s.item_open).addClass(s.item_clsd || "jstree-no-icon") + .end() + .end() + .end() + .end() + .find("li.jstree-open") + .children("ins.jstree-icon").removeClass(s.closed).addClass("ui-icon " + s.opened).end() + .children("a").addClass(s.item) + .children("ins.jstree-icon").addClass("ui-icon") + .filter(function() { + return this.className.toString() + .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"") + .indexOf("ui-icon-") === -1; + }).removeClass(s.item_leaf + " " + s.item_clsd).addClass(s.item_open || "jstree-no-icon") + .end() + .end() + .end() + .end() + .find("li.jstree-leaf") + .children("ins.jstree-icon").removeClass(s.closed + " ui-icon " + s.opened).end() + .children("a").addClass(s.item) + .children("ins.jstree-icon").addClass("ui-icon") + .filter(function() { + return this.className.toString() + .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"") + .indexOf("ui-icon-") === -1; + }).removeClass(s.item_clsd + " " + s.item_open).addClass(s.item_leaf || "jstree-no-icon"); + } + }, + defaults : { + "opened" : "ui-icon-triangle-1-se", + "closed" : "ui-icon-triangle-1-e", + "item" : "ui-state-default", + "item_h" : "ui-state-hover", + "item_a" : "ui-state-active", + "item_open" : "ui-icon-folder-open", + "item_clsd" : "ui-icon-folder-collapsed", + "item_leaf" : "ui-icon-document" + } + }); + $(function() { + var css_string = '' + + '.jstree-themeroller .ui-icon { overflow:visible; } ' + + '.jstree-themeroller a { padding:0 2px; } ' + + '.jstree-themeroller .jstree-no-icon { display:none; }'; + $.vakata.css.add_sheet({ str : css_string, title : "jstree" }); + }); +})(jQuery); +//*/ + +/* + * jsTree unique plugin + * Forces different names amongst siblings (still a bit experimental) + * NOTE: does not check language versions (it will not be possible to have nodes with the same title, even in different languages) + */ +(function ($) { + $.jstree.plugin("unique", { + __init : function () { + this.get_container() + .bind("before.jstree", $.proxy(function (e, data) { + var nms = [], res = true, p, t; + if(data.func == "move_node") { + // obj, ref, position, is_copy, is_prepared, skip_check + if(data.args[4] === true) { + if(data.args[0].o && data.args[0].o.length) { + data.args[0].o.children("a").each(function () { nms.push($(this).text().replace(/^\s+/g,"")); }); + res = this._check_unique(nms, data.args[0].np.find("> ul > li").not(data.args[0].o), "move_node"); + } + } + } + if(data.func == "create_node") { + // obj, position, js, callback, is_loaded + if(data.args[4] || this._is_loaded(data.args[0])) { + p = this._get_node(data.args[0]); + if(data.args[1] && (data.args[1] === "before" || data.args[1] === "after")) { + p = this._get_parent(data.args[0]); + if(!p || p === -1) { p = this.get_container(); } + } + if(typeof data.args[2] === "string") { nms.push(data.args[2]); } + else if(!data.args[2] || !data.args[2].data) { nms.push(this._get_string("new_node")); } + else { nms.push(data.args[2].data); } + res = this._check_unique(nms, p.find("> ul > li"), "create_node"); + } + } + if(data.func == "rename_node") { + // obj, val + nms.push(data.args[1]); + t = this._get_node(data.args[0]); + p = this._get_parent(t); + if(!p || p === -1) { p = this.get_container(); } + res = this._check_unique(nms, p.find("> ul > li").not(t), "rename_node"); + } + if(!res) { + e.stopPropagation(); + return false; + } + }, this)); + }, + defaults : { + error_callback : $.noop + }, + _fn : { + _check_unique : function (nms, p, func) { + var cnms = []; + p.children("a").each(function () { cnms.push($(this).text().replace(/^\s+/g,"")); }); + if(!cnms.length || !nms.length) { return true; } + cnms = cnms.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(","); + if((cnms.length + nms.length) != cnms.concat(nms).sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",").length) { + this._get_settings().unique.error_callback.call(null, nms, p, func); + return false; + } + return true; + }, + check_move : function () { + if(!this.__call_old()) { return false; } + var p = this._get_move(), nms = []; + if(p.o && p.o.length) { + p.o.children("a").each(function () { nms.push($(this).text().replace(/^\s+/g,"")); }); + return this._check_unique(nms, p.np.find("> ul > li").not(p.o), "check_move"); + } + return true; + } + } + }); +})(jQuery); +//*/ + +/* + * jsTree wholerow plugin + * Makes select and hover work on the entire width of the node + * MAY BE HEAVY IN LARGE DOM + */ +(function ($) { + $.jstree.plugin("wholerow", { + __init : function () { + if(!this.data.ui) { throw "jsTree wholerow: jsTree UI plugin not included."; } + this.data.wholerow.html = false; + this.data.wholerow.to = false; + this.get_container() + .bind("init.jstree", $.proxy(function (e, data) { + this._get_settings().core.animation = 0; + }, this)) + .bind("open_node.jstree create_node.jstree clean_node.jstree loaded.jstree", $.proxy(function (e, data) { + this._prepare_wholerow_span( data && data.rslt && data.rslt.obj ? data.rslt.obj : -1 ); + }, this)) + .bind("search.jstree clear_search.jstree reopen.jstree after_open.jstree after_close.jstree create_node.jstree delete_node.jstree clean_node.jstree", $.proxy(function (e, data) { + if(this.data.to) { clearTimeout(this.data.to); } + this.data.to = setTimeout( (function (t, o) { return function() { t._prepare_wholerow_ul(o); }; })(this, data && data.rslt && data.rslt.obj ? data.rslt.obj : -1), 0); + }, this)) + .bind("deselect_all.jstree", $.proxy(function (e, data) { + this.get_container().find(" > .jstree-wholerow .jstree-clicked").removeClass("jstree-clicked " + (this.data.themeroller ? this._get_settings().themeroller.item_a : "" )); + }, this)) + .bind("select_node.jstree deselect_node.jstree ", $.proxy(function (e, data) { + data.rslt.obj.each(function () { + var ref = data.inst.get_container().find(" > .jstree-wholerow li:visible:eq(" + ( parseInt((($(this).offset().top - data.inst.get_container().offset().top + data.inst.get_container()[0].scrollTop) / data.inst.data.core.li_height),10)) + ")"); + // ref.children("a")[e.type === "select_node" ? "addClass" : "removeClass"]("jstree-clicked"); + ref.children("a").attr("class",data.rslt.obj.children("a").attr("class")); + }); + }, this)) + .bind("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) { + this.get_container().find(" > .jstree-wholerow .jstree-hovered").removeClass("jstree-hovered " + (this.data.themeroller ? this._get_settings().themeroller.item_h : "" )); + if(e.type === "hover_node") { + var ref = this.get_container().find(" > .jstree-wholerow li:visible:eq(" + ( parseInt(((data.rslt.obj.offset().top - this.get_container().offset().top + this.get_container()[0].scrollTop) / this.data.core.li_height),10)) + ")"); + // ref.children("a").addClass("jstree-hovered"); + ref.children("a").attr("class",data.rslt.obj.children(".jstree-hovered").attr("class")); + } + }, this)) + .delegate(".jstree-wholerow-span, ins.jstree-icon, li", "click.jstree", function (e) { + var n = $(e.currentTarget); + if(e.target.tagName === "A" || (e.target.tagName === "INS" && n.closest("li").is(".jstree-open, .jstree-closed"))) { return; } + n.closest("li").children("a:visible:eq(0)").click(); + e.stopImmediatePropagation(); + }) + .delegate("li", "mouseover.jstree", $.proxy(function (e) { + e.stopImmediatePropagation(); + if($(e.currentTarget).children(".jstree-hovered, .jstree-clicked").length) { return false; } + this.hover_node(e.currentTarget); + return false; + }, this)) + .delegate("li", "mouseleave.jstree", $.proxy(function (e) { + if($(e.currentTarget).children("a").hasClass("jstree-hovered").length) { return; } + this.dehover_node(e.currentTarget); + }, this)); + if(is_ie7 || is_ie6) { + $.vakata.css.add_sheet({ str : ".jstree-" + this.get_index() + " { position:relative; } ", title : "jstree" }); + } + }, + defaults : { + }, + __destroy : function () { + this.get_container().children(".jstree-wholerow").remove(); + this.get_container().find(".jstree-wholerow-span").remove(); + }, + _fn : { + _prepare_wholerow_span : function (obj) { + obj = !obj || obj == -1 ? this.get_container().find("> ul > li") : this._get_node(obj); + if(obj === false) { return; } // added for removing root nodes + obj.each(function () { + $(this).find("li").andSelf().each(function () { + var $t = $(this); + if($t.children(".jstree-wholerow-span").length) { return true; } + $t.prepend(" "); + }); + }); + }, + _prepare_wholerow_ul : function () { + var o = this.get_container().children("ul").eq(0), h = o.html(); + o.addClass("jstree-wholerow-real"); + if(this.data.wholerow.last_html !== h) { + this.data.wholerow.last_html = h; + this.get_container().children(".jstree-wholerow").remove(); + this.get_container().append( + o.clone().removeClass("jstree-wholerow-real") + .wrapAll("
                      ").parent() + .width(o.parent()[0].scrollWidth) + .css("top", (o.height() + ( is_ie7 ? 5 : 0)) * -1 ) + .find("li[id]").each(function () { this.removeAttribute("id"); }).end() + ); + } + } + } + }); + $(function() { + var css_string = '' + + '.jstree .jstree-wholerow-real { position:relative; z-index:1; } ' + + '.jstree .jstree-wholerow-real li { cursor:pointer; } ' + + '.jstree .jstree-wholerow-real a { border-left-color:transparent !important; border-right-color:transparent !important; } ' + + '.jstree .jstree-wholerow { position:relative; z-index:0; height:0; } ' + + '.jstree .jstree-wholerow ul, .jstree .jstree-wholerow li { width:100%; } ' + + '.jstree .jstree-wholerow, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow li, .jstree .jstree-wholerow a { margin:0 !important; padding:0 !important; } ' + + '.jstree .jstree-wholerow, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow li { background:transparent !important; }' + + '.jstree .jstree-wholerow ins, .jstree .jstree-wholerow span, .jstree .jstree-wholerow input { display:none !important; }' + + '.jstree .jstree-wholerow a, .jstree .jstree-wholerow a:hover { text-indent:-9999px; !important; width:100%; padding:0 !important; border-right-width:0px !important; border-left-width:0px !important; } ' + + '.jstree .jstree-wholerow-span { position:absolute; left:0; margin:0px; padding:0; height:18px; border-width:0; padding:0; z-index:0; }'; + if(is_ff2) { + css_string += '' + + '.jstree .jstree-wholerow a { display:block; height:18px; margin:0; padding:0; border:0; } ' + + '.jstree .jstree-wholerow-real a { border-color:transparent !important; } '; + } + if(is_ie7 || is_ie6) { + css_string += '' + + '.jstree .jstree-wholerow, .jstree .jstree-wholerow li, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow a { margin:0; padding:0; line-height:18px; } ' + + '.jstree .jstree-wholerow a { display:block; height:18px; line-height:18px; overflow:hidden; } '; + } + $.vakata.css.add_sheet({ str : css_string, title : "jstree" }); + }); +})(jQuery); +//*/ + +/* +* jsTree model plugin +* This plugin gets jstree to use a class model to retrieve data, creating great dynamism +*/ +(function ($) { + var nodeInterface = ["getChildren","getChildrenCount","getAttr","getName","getProps"], + validateInterface = function(obj, inter) { + var valid = true; + obj = obj || {}; + inter = [].concat(inter); + $.each(inter, function (i, v) { + if(!$.isFunction(obj[v])) { valid = false; return false; } + }); + return valid; + }; + $.jstree.plugin("model", { + __init : function () { + if(!this.data.json_data) { throw "jsTree model: jsTree json_data plugin not included."; } + this._get_settings().json_data.data = function (n, b) { + var obj = (n == -1) ? this._get_settings().model.object : n.data("jstree_model"); + if(!validateInterface(obj, nodeInterface)) { return b.call(null, false); } + if(this._get_settings().model.async) { + obj.getChildren($.proxy(function (data) { + this.model_done(data, b); + }, this)); + } + else { + this.model_done(obj.getChildren(), b); + } + }; + }, + defaults : { + object : false, + id_prefix : false, + async : false + }, + _fn : { + model_done : function (data, callback) { + var ret = [], + s = this._get_settings(), + _this = this; + + if(!$.isArray(data)) { data = [data]; } + $.each(data, function (i, nd) { + var r = nd.getProps() || {}; + r.attr = nd.getAttr() || {}; + if(nd.getChildrenCount()) { r.state = "closed"; } + r.data = nd.getName(); + if(!$.isArray(r.data)) { r.data = [r.data]; } + if(_this.data.types && $.isFunction(nd.getType)) { + r.attr[s.types.type_attr] = nd.getType(); + } + if(r.attr.id && s.model.id_prefix) { r.attr.id = s.model.id_prefix + r.attr.id; } + if(!r.metadata) { r.metadata = { }; } + r.metadata.jstree_model = nd; + ret.push(r); + }); + callback.call(null, ret); + } + } + }); +})(jQuery); +//*/ + +})(); \ No newline at end of file diff --git a/support/3rd_party/vlc/lua/http/js/ui.js b/support/3rd_party/vlc/lua/http/js/ui.js new file mode 100644 index 0000000..0bfd6ec --- /dev/null +++ b/support/3rd_party/vlc/lua/http/js/ui.js @@ -0,0 +1,115 @@ +$(function () { + $("#seekSlider").slider({ + range: "min", + value: 0, + min: 0, + max: 100, + start: function (event, ui) { + $("#seekSlider").data( 'clicked', true ); + }, + stop: function (event, ui) { + $("#currentTime").empty().append(format_time(Math.round((ui.value / 100) * $('#seekSlider').attr('totalLength')))); + switch (current_que) { + case 'main': + sendCommand({ + 'command': 'seek', + 'val': (ui.value) + '%' + }); + break; + case 'stream': + sendVLMCmd('control Current seek ' + ui.value); + break; + } + $("#seekSlider").data( 'clicked', false ); + } + }); + $("#volumeSlider").slider({ + range: "min", + value: 50, + min: 0, + max: 100, + start: function (event, ui) { + $("#volumeSlider").data( 'clicked', true ); + }, + stop: function (event, ui) { + $("#currentVolume").empty().append(ui.value * 2 + "%"); + sendCommand({ + 'command': 'volume', + 'val': Math.round(ui.value * 5.12) + }) + $("#volumeSlider").data( 'clicked', false ); + } + }); + /* To ensure that updateStatus() doesn't interfere while the user + * slides the controls. */ + $("#seekSlider").data( 'clicked', false ); + $("#volumeSlider").data( 'clicked', false ); + $('#buttonStop').click(function () { + switch (current_que) { + case 'main': + sendCommand({ + 'command': 'pl_stop' + }) + break; + case 'stream': + sendVLMCmd('control Current stop'); + break; + } + return false; + }); + $('#buttonPlay').click(function () { + if ($(this).attr('state') == 'stopped') { + switch (current_que) { + case 'main': + var id = $('.jstree-clicked', '#libraryTree').length > 0 ? $('.jstree-clicked', '#libraryTree').first().parents().first().attr('id').substr(5) : current_playlist_id; + sendCommand({ + 'command': 'pl_play', + 'id': id + }); + break; + case 'stream': + sendVLMCmd('control Current play'); + flowplayer("player", "https://releases.flowplayer.org/swf/flowplayer-3.2.7.swf"); + break; + } + } else { + switch (current_que) { + case 'main': + sendCommand({ + 'command': 'pl_pause' + }); + break; + case 'stream': + sendVLMCmd('control Current pause'); + break; + } + } + return false; + }); + $('#buttonFull').click(function () { + sendCommand({ + 'command': 'fullscreen' + }); + return false; + }); + $('#stream_host').val(stream_server); + $('#mobileintflink').click(function () { + if ( ( window.location.hostname == 'localhost' ) + || ( window.location.hostname == '127.0.0.1' ) + || ( window.location.hostname == '[::1]' ) ) + { + return true; + } + $('#qrCodeConfirm').dialog('open'); + return false; + }); + + $('.buttonszone').each(function(i){ + $(this).mouseover(function(){ + $(this).addClass('buttonszone_active'); + }).mouseleave(function () { + $(this).removeClass('buttonszone_active'); + }); + }); + +}) diff --git a/support/3rd_party/vlc/lua/http/mobile.html b/support/3rd_party/vlc/lua/http/mobile.html new file mode 100644 index 0000000..31e096e --- /dev/null +++ b/support/3rd_party/vlc/lua/http/mobile.html @@ -0,0 +1,112 @@ + + + + VLC media player - Web Interface + + + + + + + + + + + + + + + + + + +
                      +
                      + +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      00:00:00
                      +
                      00:00:00
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + volume +
                      +
                      + +
                      + + diff --git a/support/3rd_party/vlc/lua/http/mobile_browse.html b/support/3rd_party/vlc/lua/http/mobile_browse.html new file mode 100644 index 0000000..c3929ef --- /dev/null +++ b/support/3rd_party/vlc/lua/http/mobile_browse.html @@ -0,0 +1,53 @@ + + + + <?vlc gettext("VLC media player - Web Interface") ?> + + + + + + + + + + + + + + +
                      "> +
                      +
                        +
                      1. +
                      +
                      +
                      + + diff --git a/support/3rd_party/vlc/lua/http/mobile_equalizer.html b/support/3rd_party/vlc/lua/http/mobile_equalizer.html new file mode 100644 index 0000000..1ff0a07 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/mobile_equalizer.html @@ -0,0 +1,69 @@ + + + + <?vlc gettext("VLC media player - Web Interface") ?> + + + + + + + + + + + + + + +
                      "> +
                      +
                      0dB
                      +
                      +
                      +
                      +
                      +
                      + + diff --git a/support/3rd_party/vlc/lua/http/mobile_view.html b/support/3rd_party/vlc/lua/http/mobile_view.html new file mode 100644 index 0000000..0c9fd84 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/mobile_view.html @@ -0,0 +1,56 @@ + + + + <?vlc gettext("VLC media player - Web Interface") ?> + + + + + + + + + + + + + + + +
                      + +
                      + + + diff --git a/support/3rd_party/vlc/lua/http/requests/README.txt b/support/3rd_party/vlc/lua/http/requests/README.txt new file mode 100644 index 0000000..6a87c09 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/requests/README.txt @@ -0,0 +1,206 @@ + +This file describes commands available through the requests/ file: + +Lines starting with < describe what the page sends back +Lines starting with > describe what you can send to the page + +All parameters need to be URL encoded. +Examples: + # -> %23 + % -> %25 + + -> %2B + space -> + + ... + + +Deprecation Notice: +--- +The entire interface is moving to using for input and output parameters and attributes +pl_play and in_enqueue previously accepted paths. This is still supported, but from 1.3 will be required +where path attributes are provided in output, these should be ignored in favour of uri attributes +path support is scheduled to be removed entirely from 1.3 +--- + + (/) +=========== + + +> Get album art for current input: + /art (NB: not /requests/art) + +> Get album art for any playlist input (available from API version 3): + /art?item=123 (NB: not /requests/art) + + +status.xml or status.json +=========== + + +< Get VLC status information, current item info and meta. +< Get VLC version, and http api version + +> add to playlist and start playback: + ?command=in_play&input=&option=
                      +> get 's filelist + +vlm.xml: +======== +< get the full list of VLM elements + +vlm_cmd.xml: +============ +< execute VLM command + ?command= +> get the error message from + diff --git a/support/3rd_party/vlc/lua/http/requests/browse.json b/support/3rd_party/vlc/lua/http/requests/browse.json new file mode 100644 index 0000000..ddcddae --- /dev/null +++ b/support/3rd_party/vlc/lua/http/requests/browse.json @@ -0,0 +1,38 @@ + +< status.xml: VLC media player web interface +< this should mirror the content and function of status.json +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > +< Copyright (C) 2005-2009 the VideoLAN team +< +< Authors: Rob Jonson +< +< This program is free software; you can redistribute it and/or modify +< it under the terms of the GNU General Public License as published by +< the Free Software Foundation; either version 2 of the License, or +< (at your option) any later version. +< +< This program is distributed in the hope that it will be useful, +< but WITHOUT ANY WARRANTY; without even the implied warranty of +< MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +< GNU General Public License for more details. +< +< You should have received a copy of the GNU General Public License +< along with this program; if not, write to the Free Software +< Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> +]]?> + diff --git a/support/3rd_party/vlc/lua/http/requests/browse.xml b/support/3rd_party/vlc/lua/http/requests/browse.xml new file mode 100644 index 0000000..87e80f3 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/requests/browse.xml @@ -0,0 +1,55 @@ + + +< browse.xml: VLC media player web interface +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > +< Copyright (C) 2005-2006 the VideoLAN team +< +< Authors: Antoine Cellerier +< +< This program is free software; you can redistribute it and/or modify +< it under the terms of the GNU General Public License as published by +< the Free Software Foundation; either version 2 of the License, or +< (at your option) any later version. +< +< This program is distributed in the hope that it will be useful, +< but WITHOUT ANY WARRANTY; without even the implied warranty of +< MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +< GNU General Public License for more details. +< +< You should have received a copy of the GNU General Public License +< along with this program; if not, write to the Free Software +< Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> +]] ?> + +\n') + +--httprequests.printTableAsJson(browseTable.element._array,0) + + +for i,e in ipairs(browseTable.element._array) do + print('\n') +end + + +print('\n') + +?> + diff --git a/support/3rd_party/vlc/lua/http/requests/playlist.json b/support/3rd_party/vlc/lua/http/requests/playlist.json new file mode 100644 index 0000000..03e6ea9 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/requests/playlist.json @@ -0,0 +1,35 @@ + +< playlist.json: VLC media player web interface +< this should mirror the content of playlist.xml +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > +< Copyright (C) 2005-2006 the VideoLAN team +< +< Authors: Rob Jonson +< +< This program is free software; you can redistribute it and/or modify +< it under the terms of the GNU General Public License as published by +< the Free Software Foundation; either version 2 of the License, or +< (at your option) any later version. +< +< This program is distributed in the hope that it will be useful, +< but WITHOUT ANY WARRANTY; without even the implied warranty of +< MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +< GNU General Public License for more details. +< +< You should have received a copy of the GNU General Public License +< along with this program; if not, write to the Free Software +< Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> +]] ?> + diff --git a/support/3rd_party/vlc/lua/http/requests/playlist.xml b/support/3rd_party/vlc/lua/http/requests/playlist.xml new file mode 100644 index 0000000..71cf29c --- /dev/null +++ b/support/3rd_party/vlc/lua/http/requests/playlist.xml @@ -0,0 +1,91 @@ + + +< playlist.xml: VLC media player web interface +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > +< Copyright (C) 2005-2006 the VideoLAN team +< +< Authors: Antoine Cellerier +< Authors: Rob Jonson +< +< This program is free software; you can redistribute it and/or modify +< it under the terms of the GNU General Public License as published by +< the Free Software Foundation; either version 2 of the License, or +< (at your option) any later version. +< +< This program is distributed in the hope that it will be useful, +< but WITHOUT ANY WARRANTY; without even the implied warranty of +< MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +< GNU General Public License for more details. +< +< You should have received a copy of the GNU General Public License +< along with this program; if not, write to the Free Software +< Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> +]] ?> + +") +end + +local printnode = function(item) + local children=NULL + + print ("\n") + + return children +end + +printitem = function(item) + local children=NULL + + if item.type=="node" then + children=printnode(item) + if (children) then + for i,v in ipairs(children) do + printitem(v) + end + end + print ("") + else + printleaf(item) + end + +end + +httprequests.processcommands() + +local pt=httprequests.playlisttable() + +printitem(pt) + + +?> diff --git a/support/3rd_party/vlc/lua/http/requests/playlist_jstree.xml b/support/3rd_party/vlc/lua/http/requests/playlist_jstree.xml new file mode 100644 index 0000000..66cb91b --- /dev/null +++ b/support/3rd_party/vlc/lua/http/requests/playlist_jstree.xml @@ -0,0 +1,86 @@ + + +< playlist.xml: VLC media player web interface +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > +< Copyright (C) 2005-2006 the VideoLAN team +< +< Authors: Antoine Cellerier +< +< This program is free software; you can redistribute it and/or modify +< it under the terms of the GNU General Public License as published by +< the Free Software Foundation; either version 2 of the License, or +< (at your option) any later version. +< +< This program is distributed in the hope that it will be useful, +< but WITHOUT ANY WARRANTY; without even the implied warranty of +< MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +< GNU General Public License for more details. +< +< You should have received a copy of the GNU General Public License +< along with this program; if not, write to the Free Software +< Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> +]] ?> + +' ..name.. '') + for _, child in ipairs(item.children) do + print_playlist(child) + end + print('') + else + for _, child in ipairs(item.children) do + print_playlist(child) + end + end + else + local name, path = vlc.strings.convert_xml_special_chars(item.name or "", item.path or "") + name = name or "" + local current_item_id = vlc.playlist.current() + local current = "" + -- Is the item the one currently played + if(current_item_id ~= nil) then + if(current_item_id == item.id) then + current = 'current="current"' + end + end + print('' ..name.. '') + end +end + +local p +if _GET["search"] then + if _GET["search"] ~= "" then + _G.search_key = _GET["search"] + else + _G.search_key = nil + end + local key = vlc.strings.decode_uri(_GET["search"]) + p = vlc.playlist.search(key) +else + p = vlc.playlist.get() +end +--a(p) --Uncomment to debug +print_playlist(p) +?> + diff --git a/support/3rd_party/vlc/lua/http/requests/status.json b/support/3rd_party/vlc/lua/http/requests/status.json new file mode 100644 index 0000000..6139985 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/requests/status.json @@ -0,0 +1,37 @@ + +< status.xml: VLC media player web interface +< this should mirror the content and function of status.json +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > +< Copyright (C) 2005-2009 the VideoLAN team +< +< Authors: Rob Jonson +< +< This program is free software; you can redistribute it and/or modify +< it under the terms of the GNU General Public License as published by +< the Free Software Foundation; either version 2 of the License, or +< (at your option) any later version. +< +< This program is distributed in the hope that it will be useful, +< but WITHOUT ANY WARRANTY; without even the implied warranty of +< MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +< GNU General Public License for more details. +< +< You should have received a copy of the GNU General Public License +< along with this program; if not, write to the Free Software +< Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> +]]?> + diff --git a/support/3rd_party/vlc/lua/http/requests/status.xml b/support/3rd_party/vlc/lua/http/requests/status.xml new file mode 100644 index 0000000..7ad968e --- /dev/null +++ b/support/3rd_party/vlc/lua/http/requests/status.xml @@ -0,0 +1,81 @@ + + +< status.xml: VLC media player web interface +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > +< Copyright (C) 2005-2009 the VideoLAN team +< +< Authors: Antoine Cellerier +< Rob Jonson +< +< This program is free software; you can redistribute it and/or modify +< it under the terms of the GNU General Public License as published by +< the Free Software Foundation; either version 2 of the License, or +< (at your option) any later version. +< +< This program is distributed in the hope that it will be useful, +< but WITHOUT ANY WARRANTY; without even the implied warranty of +< MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +< GNU General Public License for more details. +< +< You should have received a copy of the GNU General Public License +< along with this program; if not, write to the Free Software +< Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> +]]?> + +\n') +httprequests.printTableAsXml(statusTable,0) + +local item = vlc.input.item() + +--data in the information section is presented in a non-standard way to keep compatibility. + +?> + + + "..metadataContent.."") + end + end + ?> + + ") + for k2, v2 in pairs(v) do + print(""..httprequests.xmlString(v2).."") + end + print("") + end + end + ?> + + + "..httprequests.xmlString(v).."\n") + end + end + ?> + + diff --git a/support/3rd_party/vlc/lua/http/requests/vlm.xml b/support/3rd_party/vlc/lua/http/requests/vlm.xml new file mode 100644 index 0000000..449fe6c --- /dev/null +++ b/support/3rd_party/vlc/lua/http/requests/vlm.xml @@ -0,0 +1,149 @@ + + +< vlm.xml: VLC media player web interface +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > +< Copyright (C) 2005-2006 the VideoLAN team +< +< Authors: Antoine Cellerier +< +< This program is free software; you can redistribute it and/or modify +< it under the terms of the GNU General Public License as published by +< the Free Software Foundation; either version 2 of the License, or +< (at your option) any later version. +< +< This program is distributed in the hope that it will be useful, +< but WITHOUT ANY WARRANTY; without even the implied warranty of +< MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +< GNU General Public License for more details. +< +< You should have received a copy of the GNU General Public License +< along with this program; if not, write to the Free Software +< Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> +]] + +local function insert_children(c,t) + if c.children then + for _, d in ipairs(c.children) do + table.insert(t,d.value or d.name) + end + end +end +local function print_table(name,t) + print("<"..name.."s>") + if #t ~= 0 then + for _,v in ipairs(t) do + print("<"..name..">") + print(vlc.strings.convert_xml_special_chars(v)) + print("") + end + end + print("") +end +local function print_media(m) + local name = m.name + local type_, enabled, output + local loop = "" + local inputs = {} + local options = {} + local instances = {} + for _,c in ipairs(m.children) do + if c.name=="type" then + type_ = c.value + elseif c.name=="enabled" then + enabled = c.value + elseif c.name=="loop" then + loop = c.value + elseif c.name=="output" then + output = c.value + elseif c.name=="inputs" then + insert_children(c,inputs) + elseif c.name=="options" then + insert_children(c,options) + elseif c.name=="instances" then + if c.children then + for _, d in ipairs(c.children) do + local instance = "" + table.insert(instances,instance) + end + end + end + end + print("<"..type_.." name=\""..vlc.strings.convert_xml_special_chars(name).."\" enabled=\""..vlc.strings.convert_xml_special_chars(enabled).."\" loop=\""..vlc.strings.convert_xml_special_chars(loop).."\">\n") + print(""..vlc.strings.convert_xml_special_chars(output).."\n") + print_table("input",inputs) + print_table("option",options) + print "\n" + if #instances ~= 0 then + print(table.concat(instances)) + end + print "\n" + print("\n") +end + +local function print_schedule(m) + local name = m.name + local enabled, date, period, repeat_ = "", "", "", "" + local commands = {} + for _,c in ipairs(m.children) do + if c.name=="enabled" then + enabled = c.value + elseif c.name=="date" then + date = c.value + elseif c.name=="period" then + period = c.value + elseif c.name=="repeat" then + repeat_ = c.value + elseif c.name=="commands" then + insert_children(c,commands) + end + end + print("\n") + print_table("command",commands) + print("\n") +end + +local function print_xml(m) + print "" + if m then + for _, c in ipairs(m.children) do + if c.name=="media" and c.children then + for _, d in ipairs(c.children) do + print_media(d) + end + elseif c.name=="schedule" and c.children then + for _, d in ipairs(c.children) do + print_schedule(d) + end + end + end + else + print "oops" + end + print "" +end + +local function print_msg(m) + if not m then return end + print("<"..m.name..">\n") + if m.children then + for _, child in ipairs(m.children) do + print_msg(child) + end + elseif m.value then + print(m.value) + end + print("\n") +end + +local msg = vlm:execute_command("show") +print_xml(msg) +--print_msg(msg) + +?> diff --git a/support/3rd_party/vlc/lua/http/requests/vlm_cmd.xml b/support/3rd_party/vlc/lua/http/requests/vlm_cmd.xml new file mode 100644 index 0000000..6a1092c --- /dev/null +++ b/support/3rd_party/vlc/lua/http/requests/vlm_cmd.xml @@ -0,0 +1,35 @@ + + +< vlm_cmd.xml: VLC media player web interface +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > +< Copyright (C) 2005-2006 the VideoLAN team +< +< Authors: Antoine Cellerier +< +< This program is free software; you can redistribute it and/or modify +< it under the terms of the GNU General Public License as published by +< the Free Software Foundation; either version 2 of the License, or +< (at your option) any later version. +< +< This program is distributed in the hope that it will be useful, +< but WITHOUT ANY WARRANTY; without even the implied warranty of +< MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +< GNU General Public License for more details. +< +< You should have received a copy of the GNU General Public License +< along with this program; if not, write to the Free Software +< Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. +< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> +]]?> +No command + diff --git a/support/3rd_party/vlc/lua/http/view.html b/support/3rd_party/vlc/lua/http/view.html new file mode 100644 index 0000000..cbb1465 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/view.html @@ -0,0 +1,82 @@ + + + + + <?vlc gettext("VLC media player - Flash Viewer") ?> + + + + + + + + + + + + + + +
                      +

                      +
                      +
                      " opendialog="window_stream_config">
                      +
                      +
                      +
                      +
                       
                      +
                      + +
                      + + + diff --git a/support/3rd_party/vlc/lua/http/vlm.html b/support/3rd_party/vlc/lua/http/vlm.html new file mode 100644 index 0000000..f897f6f --- /dev/null +++ b/support/3rd_party/vlc/lua/http/vlm.html @@ -0,0 +1,47 @@ + + + + + + + + VLC media player - Web Interface - VLM + + + + + + + + + + + + + + + diff --git a/support/3rd_party/vlc/lua/http/vlm_export.html b/support/3rd_party/vlc/lua/http/vlm_export.html new file mode 100644 index 0000000..b90e5b7 --- /dev/null +++ b/support/3rd_party/vlc/lua/http/vlm_export.html @@ -0,0 +1,12 @@ +##
                      +##
                      +## VLM HTTP interface
                      +## This file can be loaded as is in VLM.
                      +## Comments starting with "##" were added by the HTTP interface.
                      +## You can remove them if you want to.
                      +##
                      +
                      +
                      +##
                      +## end of export
                      +## 
                      diff --git a/support/3rd_party/vlc/lua/intf/cli.luac b/support/3rd_party/vlc/lua/intf/cli.luac new file mode 100644 index 0000000..9433d49 Binary files /dev/null and b/support/3rd_party/vlc/lua/intf/cli.luac differ diff --git a/support/3rd_party/vlc/lua/intf/dummy.luac b/support/3rd_party/vlc/lua/intf/dummy.luac new file mode 100644 index 0000000..f91b756 Binary files /dev/null and b/support/3rd_party/vlc/lua/intf/dummy.luac differ diff --git a/support/3rd_party/vlc/lua/intf/dumpmeta.luac b/support/3rd_party/vlc/lua/intf/dumpmeta.luac new file mode 100644 index 0000000..f5b8e72 Binary files /dev/null and b/support/3rd_party/vlc/lua/intf/dumpmeta.luac differ diff --git a/support/3rd_party/vlc/lua/intf/http.luac b/support/3rd_party/vlc/lua/intf/http.luac new file mode 100644 index 0000000..a7dc54d Binary files /dev/null and b/support/3rd_party/vlc/lua/intf/http.luac differ diff --git a/support/3rd_party/vlc/lua/intf/luac.luac b/support/3rd_party/vlc/lua/intf/luac.luac new file mode 100644 index 0000000..9aaed84 Binary files /dev/null and b/support/3rd_party/vlc/lua/intf/luac.luac differ diff --git a/support/3rd_party/vlc/lua/intf/modules/host.luac b/support/3rd_party/vlc/lua/intf/modules/host.luac new file mode 100644 index 0000000..f6c1654 Binary files /dev/null and b/support/3rd_party/vlc/lua/intf/modules/host.luac differ diff --git a/support/3rd_party/vlc/lua/intf/modules/httprequests.luac b/support/3rd_party/vlc/lua/intf/modules/httprequests.luac new file mode 100644 index 0000000..6fa7192 Binary files /dev/null and b/support/3rd_party/vlc/lua/intf/modules/httprequests.luac differ diff --git a/support/3rd_party/vlc/lua/intf/telnet.luac b/support/3rd_party/vlc/lua/intf/telnet.luac new file mode 100644 index 0000000..dc3ce33 Binary files /dev/null and b/support/3rd_party/vlc/lua/intf/telnet.luac differ diff --git a/support/3rd_party/vlc/lua/meta/art/00_musicbrainz.luac b/support/3rd_party/vlc/lua/meta/art/00_musicbrainz.luac new file mode 100644 index 0000000..c66a434 Binary files /dev/null and b/support/3rd_party/vlc/lua/meta/art/00_musicbrainz.luac differ diff --git a/support/3rd_party/vlc/lua/meta/art/01_googleimage.luac b/support/3rd_party/vlc/lua/meta/art/01_googleimage.luac new file mode 100644 index 0000000..72057c5 Binary files /dev/null and b/support/3rd_party/vlc/lua/meta/art/01_googleimage.luac differ diff --git a/support/3rd_party/vlc/lua/meta/art/02_frenchtv.luac b/support/3rd_party/vlc/lua/meta/art/02_frenchtv.luac new file mode 100644 index 0000000..5ee7a99 Binary files /dev/null and b/support/3rd_party/vlc/lua/meta/art/02_frenchtv.luac differ diff --git a/support/3rd_party/vlc/lua/meta/art/03_lastfm.luac b/support/3rd_party/vlc/lua/meta/art/03_lastfm.luac new file mode 100644 index 0000000..bef3095 Binary files /dev/null and b/support/3rd_party/vlc/lua/meta/art/03_lastfm.luac differ diff --git a/support/3rd_party/vlc/lua/meta/reader/filename.luac b/support/3rd_party/vlc/lua/meta/reader/filename.luac new file mode 100644 index 0000000..d5d917e Binary files /dev/null and b/support/3rd_party/vlc/lua/meta/reader/filename.luac differ diff --git a/support/3rd_party/vlc/lua/modules/common.luac b/support/3rd_party/vlc/lua/modules/common.luac new file mode 100644 index 0000000..3743062 Binary files /dev/null and b/support/3rd_party/vlc/lua/modules/common.luac differ diff --git a/support/3rd_party/vlc/lua/modules/dkjson.luac b/support/3rd_party/vlc/lua/modules/dkjson.luac new file mode 100644 index 0000000..f8e4308 Binary files /dev/null and b/support/3rd_party/vlc/lua/modules/dkjson.luac differ diff --git a/support/3rd_party/vlc/lua/modules/sandbox.luac b/support/3rd_party/vlc/lua/modules/sandbox.luac new file mode 100644 index 0000000..8f25b49 Binary files /dev/null and b/support/3rd_party/vlc/lua/modules/sandbox.luac differ diff --git a/support/3rd_party/vlc/lua/modules/simplexml.luac b/support/3rd_party/vlc/lua/modules/simplexml.luac new file mode 100644 index 0000000..7bc54ae Binary files /dev/null and b/support/3rd_party/vlc/lua/modules/simplexml.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/anevia_streams.luac b/support/3rd_party/vlc/lua/playlist/anevia_streams.luac new file mode 100644 index 0000000..8699e87 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/anevia_streams.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/anevia_xml.luac b/support/3rd_party/vlc/lua/playlist/anevia_xml.luac new file mode 100644 index 0000000..f7b4836 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/anevia_xml.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/appletrailers.luac b/support/3rd_party/vlc/lua/playlist/appletrailers.luac new file mode 100644 index 0000000..2b98973 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/appletrailers.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/bbc_co_uk.luac b/support/3rd_party/vlc/lua/playlist/bbc_co_uk.luac new file mode 100644 index 0000000..1b129eb Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/bbc_co_uk.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/cue.luac b/support/3rd_party/vlc/lua/playlist/cue.luac new file mode 100644 index 0000000..78f0d8e Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/cue.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/dailymotion.luac b/support/3rd_party/vlc/lua/playlist/dailymotion.luac new file mode 100644 index 0000000..6e936a4 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/dailymotion.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/jamendo.luac b/support/3rd_party/vlc/lua/playlist/jamendo.luac new file mode 100644 index 0000000..14324b3 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/jamendo.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/koreus.luac b/support/3rd_party/vlc/lua/playlist/koreus.luac new file mode 100644 index 0000000..69dd7d8 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/koreus.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/liveleak.luac b/support/3rd_party/vlc/lua/playlist/liveleak.luac new file mode 100644 index 0000000..cead218 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/liveleak.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/newgrounds.luac b/support/3rd_party/vlc/lua/playlist/newgrounds.luac new file mode 100644 index 0000000..ca7172f Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/newgrounds.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/rockbox_fm_presets.luac b/support/3rd_party/vlc/lua/playlist/rockbox_fm_presets.luac new file mode 100644 index 0000000..60df980 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/rockbox_fm_presets.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/soundcloud.luac b/support/3rd_party/vlc/lua/playlist/soundcloud.luac new file mode 100644 index 0000000..04ea519 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/soundcloud.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/twitch.luac b/support/3rd_party/vlc/lua/playlist/twitch.luac new file mode 100644 index 0000000..55e425d Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/twitch.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/vimeo.luac b/support/3rd_party/vlc/lua/playlist/vimeo.luac new file mode 100644 index 0000000..a8e7f64 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/vimeo.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/vocaroo.luac b/support/3rd_party/vlc/lua/playlist/vocaroo.luac new file mode 100644 index 0000000..c89a186 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/vocaroo.luac differ diff --git a/support/3rd_party/vlc/lua/playlist/youtube.luac b/support/3rd_party/vlc/lua/playlist/youtube.luac new file mode 100644 index 0000000..d915d10 Binary files /dev/null and b/support/3rd_party/vlc/lua/playlist/youtube.luac differ diff --git a/support/3rd_party/vlc/lua/sd/icecast.luac b/support/3rd_party/vlc/lua/sd/icecast.luac new file mode 100644 index 0000000..8f9ec75 Binary files /dev/null and b/support/3rd_party/vlc/lua/sd/icecast.luac differ diff --git a/support/3rd_party/vlc/lua/sd/jamendo.luac b/support/3rd_party/vlc/lua/sd/jamendo.luac new file mode 100644 index 0000000..c63d186 Binary files /dev/null and b/support/3rd_party/vlc/lua/sd/jamendo.luac differ diff --git a/support/3rd_party/vlc/msi/LICENSE.rtf b/support/3rd_party/vlc/msi/LICENSE.rtf new file mode 100644 index 0000000..ecdc4de --- /dev/null +++ b/support/3rd_party/vlc/msi/LICENSE.rtf @@ -0,0 +1,65 @@ +{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1036{\fonttbl{\f0\fnil\fcharset0 Arial;}{\f1\fnil\fcharset0 Courier;}} +{\colortbl ;\red0\green0\blue255;} +{\*\generator Riched20 6.2.9200}\viewkind4\uc1 +\pard\sa200\sl276\slmult1\qc\b\fs28\lang12 GNU GENERAL PUBLIC LICENSE\par + +\pard\sa200\sl276\slmult1\fs22 Version 2, June 1991\b0\par +\i Copyright (C) 1989, 1991 Free Software Foundation, Inc. \line 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\par +\i0 Everyone is permitted to copy and distribute verbatim copies\line of this license document, but changing it is not allowed.\par +\fs36 Preamble\par +\fs22 The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.\par +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.\par +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.\par +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.\par +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.\par +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.\par +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.\par +The precise terms and conditions for copying, distribution and modification follow.\par +\fs36 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\fs22\par +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".\par +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.\par +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.\par +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.\par +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:\par +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.\par +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.\par +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)\par +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.\par +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.\par +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.\par +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:\par +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,\par +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,\par +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)\par +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.\par +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.\par +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.\par +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.\par +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.\par +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.\par +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.\par +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.\par +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.\par +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.\par +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\par +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.\par +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.\par +\fs36 NO WARRANTY\fs22\par +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\par +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\tab\par +END OF TERMS AND CONDITIONS\fs36\par +How to Apply These Terms to Your New Programs\fs22\par +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.\par +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the \ldblquote copyright\rdblquote line and a pointer to where the full notice is found.\par + \f1 \line Copyright (C) \par + This program is free software: you can redistribute it and/or modify\line it under the terms of the GNU General Public License as published by\line the Free Software Foundation, either version 3 of the License, or\line (at your option) any later version.\par + This program is distributed in the hope that it will be useful,\line but WITHOUT ANY WARRANTY; without even the implied warranty of\line MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\line GNU General Public License for more details.\par + You should have received a copy of the GNU General Public License\line along with this program. If not, see <{{\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/"}}{\fldrslt{http://www.gnu.org/licenses/\ul0\cf0}}}}\f1\fs22 >.\par +\f0 Also add information on how to contact you by electronic and paper mail.\par +If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:\par + \f1 Copyright (C) \line This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\line This is free software, and you are welcome to redistribute it\line under certain conditions; type `show c' for details.\par +\f0 The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an \ldblquote about box\rdblquote .\par +You should also get your employer (if you work as a programmer) or school, if any, to sign a \ldblquote copyright disclaimer\rdblquote for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <{{\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/"}}{\fldrslt{http://www.gnu.org/licenses/\ul0\cf0}}}}\f0\fs22 >.\par +The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <{{\field{\*\fldinst{HYPERLINK "http://www.gnu.org/philosophy/why-not-lgpl.html"}}{\fldrslt{http://www.gnu.org/philosophy/why-not-lgpl.html\ul0\cf0}}}}\f0\fs22 >.\fs36\par +} + \ No newline at end of file diff --git a/support/3rd_party/vlc/msi/axvlc.wxs b/support/3rd_party/vlc/msi/axvlc.wxs new file mode 100644 index 0000000..a00d58b --- /dev/null +++ b/support/3rd_party/vlc/msi/axvlc.wxs @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/support/3rd_party/vlc/msi/bannrbmp.bmp b/support/3rd_party/vlc/msi/bannrbmp.bmp new file mode 100644 index 0000000..7ad8309 Binary files /dev/null and b/support/3rd_party/vlc/msi/bannrbmp.bmp differ diff --git a/support/3rd_party/vlc/msi/config.wxi b/support/3rd_party/vlc/msi/config.wxi new file mode 100644 index 0000000..52b994b --- /dev/null +++ b/support/3rd_party/vlc/msi/config.wxi @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/support/3rd_party/vlc/msi/extensions.wxs b/support/3rd_party/vlc/msi/extensions.wxs new file mode 100644 index 0000000..608781d --- /dev/null +++ b/support/3rd_party/vlc/msi/extensions.wxs @@ -0,0 +1,877 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/support/3rd_party/vlc/msi/product.wxs b/support/3rd_party/vlc/msi/product.wxs new file mode 100644 index 0000000..dde15ca --- /dev/null +++ b/support/3rd_party/vlc/msi/product.wxs @@ -0,0 +1,410 @@ + + + + + + + + + = 501)]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NSISLOCATION AND NOT Installed + REINSTALL OR NOT Installed + REINSTALL OR NOT Installed + + + + + + + + + + + + + + + + WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed + + Generating modules cache... + + + + + diff --git a/support/3rd_party/vlc/npvlc.dll b/support/3rd_party/vlc/npvlc.dll new file mode 100644 index 0000000..597a826 Binary files /dev/null and b/support/3rd_party/vlc/npvlc.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libaccess_concat_plugin.dll b/support/3rd_party/vlc/plugins/access/libaccess_concat_plugin.dll new file mode 100644 index 0000000..74ec187 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libaccess_concat_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libaccess_imem_plugin.dll b/support/3rd_party/vlc/plugins/access/libaccess_imem_plugin.dll new file mode 100644 index 0000000..610cd04 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libaccess_imem_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libaccess_mms_plugin.dll b/support/3rd_party/vlc/plugins/access/libaccess_mms_plugin.dll new file mode 100644 index 0000000..e1e17bd Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libaccess_mms_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libaccess_realrtsp_plugin.dll b/support/3rd_party/vlc/plugins/access/libaccess_realrtsp_plugin.dll new file mode 100644 index 0000000..d261c9b Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libaccess_realrtsp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libaccess_srt_plugin.dll b/support/3rd_party/vlc/plugins/access/libaccess_srt_plugin.dll new file mode 100644 index 0000000..7c783fe Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libaccess_srt_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libaccess_wasapi_plugin.dll b/support/3rd_party/vlc/plugins/access/libaccess_wasapi_plugin.dll new file mode 100644 index 0000000..bc0714f Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libaccess_wasapi_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libattachment_plugin.dll b/support/3rd_party/vlc/plugins/access/libattachment_plugin.dll new file mode 100644 index 0000000..1d1d69a Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libattachment_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libbluray-awt-j2se-1.3.2.jar b/support/3rd_party/vlc/plugins/access/libbluray-awt-j2se-1.3.2.jar new file mode 100644 index 0000000..b0f785b Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libbluray-awt-j2se-1.3.2.jar differ diff --git a/support/3rd_party/vlc/plugins/access/libbluray-j2se-1.3.2.jar b/support/3rd_party/vlc/plugins/access/libbluray-j2se-1.3.2.jar new file mode 100644 index 0000000..fc08e9f Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libbluray-j2se-1.3.2.jar differ diff --git a/support/3rd_party/vlc/plugins/access/libcdda_plugin.dll b/support/3rd_party/vlc/plugins/access/libcdda_plugin.dll new file mode 100644 index 0000000..ae38312 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libcdda_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libdcp_plugin.dll b/support/3rd_party/vlc/plugins/access/libdcp_plugin.dll new file mode 100644 index 0000000..8707963 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libdcp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libdshow_plugin.dll b/support/3rd_party/vlc/plugins/access/libdshow_plugin.dll new file mode 100644 index 0000000..1f03111 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libdshow_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libdtv_plugin.dll b/support/3rd_party/vlc/plugins/access/libdtv_plugin.dll new file mode 100644 index 0000000..dbcb2ef Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libdtv_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libdvdnav_plugin.dll b/support/3rd_party/vlc/plugins/access/libdvdnav_plugin.dll new file mode 100644 index 0000000..2a38287 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libdvdnav_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libdvdread_plugin.dll b/support/3rd_party/vlc/plugins/access/libdvdread_plugin.dll new file mode 100644 index 0000000..e730ace Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libdvdread_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libfilesystem_plugin.dll b/support/3rd_party/vlc/plugins/access/libfilesystem_plugin.dll new file mode 100644 index 0000000..b3a8bbe Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libfilesystem_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libftp_plugin.dll b/support/3rd_party/vlc/plugins/access/libftp_plugin.dll new file mode 100644 index 0000000..0af2384 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libftp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libhttp_plugin.dll b/support/3rd_party/vlc/plugins/access/libhttp_plugin.dll new file mode 100644 index 0000000..224f781 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libhttp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libhttps_plugin.dll b/support/3rd_party/vlc/plugins/access/libhttps_plugin.dll new file mode 100644 index 0000000..ae45da7 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libhttps_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libidummy_plugin.dll b/support/3rd_party/vlc/plugins/access/libidummy_plugin.dll new file mode 100644 index 0000000..376cb42 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libidummy_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libimem_plugin.dll b/support/3rd_party/vlc/plugins/access/libimem_plugin.dll new file mode 100644 index 0000000..defadca Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libimem_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/liblibbluray_plugin.dll b/support/3rd_party/vlc/plugins/access/liblibbluray_plugin.dll new file mode 100644 index 0000000..69c665b Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/liblibbluray_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/liblive555_plugin.dll b/support/3rd_party/vlc/plugins/access/liblive555_plugin.dll new file mode 100644 index 0000000..2f9383f Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/liblive555_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libnfs_plugin.dll b/support/3rd_party/vlc/plugins/access/libnfs_plugin.dll new file mode 100644 index 0000000..29a4cd9 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libnfs_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/librist_plugin.dll b/support/3rd_party/vlc/plugins/access/librist_plugin.dll new file mode 100644 index 0000000..cf056e1 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/librist_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/librtp_plugin.dll b/support/3rd_party/vlc/plugins/access/librtp_plugin.dll new file mode 100644 index 0000000..f071827 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/librtp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libsatip_plugin.dll b/support/3rd_party/vlc/plugins/access/libsatip_plugin.dll new file mode 100644 index 0000000..54c2c99 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libsatip_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libscreen_plugin.dll b/support/3rd_party/vlc/plugins/access/libscreen_plugin.dll new file mode 100644 index 0000000..db06af3 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libscreen_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libsdp_plugin.dll b/support/3rd_party/vlc/plugins/access/libsdp_plugin.dll new file mode 100644 index 0000000..d016874 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libsdp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libsftp_plugin.dll b/support/3rd_party/vlc/plugins/access/libsftp_plugin.dll new file mode 100644 index 0000000..a2adf4c Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libsftp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libshm_plugin.dll b/support/3rd_party/vlc/plugins/access/libshm_plugin.dll new file mode 100644 index 0000000..dd0fd4c Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libshm_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libsmb_plugin.dll b/support/3rd_party/vlc/plugins/access/libsmb_plugin.dll new file mode 100644 index 0000000..9174f7c Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libsmb_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libtcp_plugin.dll b/support/3rd_party/vlc/plugins/access/libtcp_plugin.dll new file mode 100644 index 0000000..f6ac35e Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libtcp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libtimecode_plugin.dll b/support/3rd_party/vlc/plugins/access/libtimecode_plugin.dll new file mode 100644 index 0000000..8fc416f Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libtimecode_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libudp_plugin.dll b/support/3rd_party/vlc/plugins/access/libudp_plugin.dll new file mode 100644 index 0000000..7d9bb79 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libudp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libvcd_plugin.dll b/support/3rd_party/vlc/plugins/access/libvcd_plugin.dll new file mode 100644 index 0000000..869c053 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libvcd_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libvdr_plugin.dll b/support/3rd_party/vlc/plugins/access/libvdr_plugin.dll new file mode 100644 index 0000000..e7e60c6 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libvdr_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access/libvnc_plugin.dll b/support/3rd_party/vlc/plugins/access/libvnc_plugin.dll new file mode 100644 index 0000000..96cf656 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access/libvnc_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access_output/libaccess_output_dummy_plugin.dll b/support/3rd_party/vlc/plugins/access_output/libaccess_output_dummy_plugin.dll new file mode 100644 index 0000000..9ae1364 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access_output/libaccess_output_dummy_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access_output/libaccess_output_file_plugin.dll b/support/3rd_party/vlc/plugins/access_output/libaccess_output_file_plugin.dll new file mode 100644 index 0000000..93dca28 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access_output/libaccess_output_file_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access_output/libaccess_output_http_plugin.dll b/support/3rd_party/vlc/plugins/access_output/libaccess_output_http_plugin.dll new file mode 100644 index 0000000..13a8f3e Binary files /dev/null and b/support/3rd_party/vlc/plugins/access_output/libaccess_output_http_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access_output/libaccess_output_livehttp_plugin.dll b/support/3rd_party/vlc/plugins/access_output/libaccess_output_livehttp_plugin.dll new file mode 100644 index 0000000..5b449e3 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access_output/libaccess_output_livehttp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access_output/libaccess_output_rist_plugin.dll b/support/3rd_party/vlc/plugins/access_output/libaccess_output_rist_plugin.dll new file mode 100644 index 0000000..48f865c Binary files /dev/null and b/support/3rd_party/vlc/plugins/access_output/libaccess_output_rist_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access_output/libaccess_output_shout_plugin.dll b/support/3rd_party/vlc/plugins/access_output/libaccess_output_shout_plugin.dll new file mode 100644 index 0000000..3b1511e Binary files /dev/null and b/support/3rd_party/vlc/plugins/access_output/libaccess_output_shout_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access_output/libaccess_output_srt_plugin.dll b/support/3rd_party/vlc/plugins/access_output/libaccess_output_srt_plugin.dll new file mode 100644 index 0000000..38a6c2f Binary files /dev/null and b/support/3rd_party/vlc/plugins/access_output/libaccess_output_srt_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/access_output/libaccess_output_udp_plugin.dll b/support/3rd_party/vlc/plugins/access_output/libaccess_output_udp_plugin.dll new file mode 100644 index 0000000..15f2b02 Binary files /dev/null and b/support/3rd_party/vlc/plugins/access_output/libaccess_output_udp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libaudio_format_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libaudio_format_plugin.dll new file mode 100644 index 0000000..73e3f4a Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libaudio_format_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libaudiobargraph_a_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libaudiobargraph_a_plugin.dll new file mode 100644 index 0000000..f420a4c Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libaudiobargraph_a_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libchorus_flanger_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libchorus_flanger_plugin.dll new file mode 100644 index 0000000..ccdbef9 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libchorus_flanger_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libcompressor_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libcompressor_plugin.dll new file mode 100644 index 0000000..1534836 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libcompressor_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libdolby_surround_decoder_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libdolby_surround_decoder_plugin.dll new file mode 100644 index 0000000..fc2ef56 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libdolby_surround_decoder_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libequalizer_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libequalizer_plugin.dll new file mode 100644 index 0000000..381ac39 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libequalizer_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libgain_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libgain_plugin.dll new file mode 100644 index 0000000..b9b1e7e Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libgain_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libheadphone_channel_mixer_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libheadphone_channel_mixer_plugin.dll new file mode 100644 index 0000000..ef0d791 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libheadphone_channel_mixer_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libkaraoke_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libkaraoke_plugin.dll new file mode 100644 index 0000000..b6a6855 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libkaraoke_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libmad_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libmad_plugin.dll new file mode 100644 index 0000000..5792bf8 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libmad_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libmono_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libmono_plugin.dll new file mode 100644 index 0000000..b3515bb Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libmono_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libnormvol_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libnormvol_plugin.dll new file mode 100644 index 0000000..a3b5874 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libnormvol_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libparam_eq_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libparam_eq_plugin.dll new file mode 100644 index 0000000..6bd1d20 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libparam_eq_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libremap_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libremap_plugin.dll new file mode 100644 index 0000000..2e0ab1b Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libremap_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libsamplerate_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libsamplerate_plugin.dll new file mode 100644 index 0000000..f1e42e7 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libsamplerate_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libscaletempo_pitch_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libscaletempo_pitch_plugin.dll new file mode 100644 index 0000000..ca4b758 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libscaletempo_pitch_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libscaletempo_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libscaletempo_plugin.dll new file mode 100644 index 0000000..3b13143 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libscaletempo_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libsimple_channel_mixer_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libsimple_channel_mixer_plugin.dll new file mode 100644 index 0000000..6f43556 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libsimple_channel_mixer_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libspatialaudio_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libspatialaudio_plugin.dll new file mode 100644 index 0000000..e22fc33 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libspatialaudio_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libspatializer_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libspatializer_plugin.dll new file mode 100644 index 0000000..3037188 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libspatializer_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libspeex_resampler_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libspeex_resampler_plugin.dll new file mode 100644 index 0000000..febd781 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libspeex_resampler_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libstereo_widen_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libstereo_widen_plugin.dll new file mode 100644 index 0000000..d4fe01c Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libstereo_widen_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libtospdif_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libtospdif_plugin.dll new file mode 100644 index 0000000..08b4a22 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libtospdif_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libtrivial_channel_mixer_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libtrivial_channel_mixer_plugin.dll new file mode 100644 index 0000000..8188365 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libtrivial_channel_mixer_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_filter/libugly_resampler_plugin.dll b/support/3rd_party/vlc/plugins/audio_filter/libugly_resampler_plugin.dll new file mode 100644 index 0000000..b7e1634 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_filter/libugly_resampler_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_mixer/libfloat_mixer_plugin.dll b/support/3rd_party/vlc/plugins/audio_mixer/libfloat_mixer_plugin.dll new file mode 100644 index 0000000..3dfd731 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_mixer/libfloat_mixer_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_mixer/libinteger_mixer_plugin.dll b/support/3rd_party/vlc/plugins/audio_mixer/libinteger_mixer_plugin.dll new file mode 100644 index 0000000..3d71243 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_mixer/libinteger_mixer_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_output/libadummy_plugin.dll b/support/3rd_party/vlc/plugins/audio_output/libadummy_plugin.dll new file mode 100644 index 0000000..994cadc Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_output/libadummy_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_output/libafile_plugin.dll b/support/3rd_party/vlc/plugins/audio_output/libafile_plugin.dll new file mode 100644 index 0000000..89469c1 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_output/libafile_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_output/libamem_plugin.dll b/support/3rd_party/vlc/plugins/audio_output/libamem_plugin.dll new file mode 100644 index 0000000..c86567b Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_output/libamem_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_output/libdirectsound_plugin.dll b/support/3rd_party/vlc/plugins/audio_output/libdirectsound_plugin.dll new file mode 100644 index 0000000..bfb06c8 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_output/libdirectsound_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_output/libmmdevice_plugin.dll b/support/3rd_party/vlc/plugins/audio_output/libmmdevice_plugin.dll new file mode 100644 index 0000000..c4d9975 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_output/libmmdevice_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_output/libwasapi_plugin.dll b/support/3rd_party/vlc/plugins/audio_output/libwasapi_plugin.dll new file mode 100644 index 0000000..0f25fc7 Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_output/libwasapi_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/audio_output/libwaveout_plugin.dll b/support/3rd_party/vlc/plugins/audio_output/libwaveout_plugin.dll new file mode 100644 index 0000000..1e12def Binary files /dev/null and b/support/3rd_party/vlc/plugins/audio_output/libwaveout_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/liba52_plugin.dll b/support/3rd_party/vlc/plugins/codec/liba52_plugin.dll new file mode 100644 index 0000000..1768e6e Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/liba52_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libadpcm_plugin.dll b/support/3rd_party/vlc/plugins/codec/libadpcm_plugin.dll new file mode 100644 index 0000000..e1a9d56 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libadpcm_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libaes3_plugin.dll b/support/3rd_party/vlc/plugins/codec/libaes3_plugin.dll new file mode 100644 index 0000000..c140768 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libaes3_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libaom_plugin.dll b/support/3rd_party/vlc/plugins/codec/libaom_plugin.dll new file mode 100644 index 0000000..d9fb0ee Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libaom_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libaraw_plugin.dll b/support/3rd_party/vlc/plugins/codec/libaraw_plugin.dll new file mode 100644 index 0000000..c9a4253 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libaraw_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libaribsub_plugin.dll b/support/3rd_party/vlc/plugins/codec/libaribsub_plugin.dll new file mode 100644 index 0000000..f4ab196 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libaribsub_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libavcodec_plugin.dll b/support/3rd_party/vlc/plugins/codec/libavcodec_plugin.dll new file mode 100644 index 0000000..c28dccf Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libavcodec_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libcc_plugin.dll b/support/3rd_party/vlc/plugins/codec/libcc_plugin.dll new file mode 100644 index 0000000..876b8f8 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libcc_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libcdg_plugin.dll b/support/3rd_party/vlc/plugins/codec/libcdg_plugin.dll new file mode 100644 index 0000000..b41e671 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libcdg_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libcrystalhd_plugin.dll b/support/3rd_party/vlc/plugins/codec/libcrystalhd_plugin.dll new file mode 100644 index 0000000..d3d1c25 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libcrystalhd_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libcvdsub_plugin.dll b/support/3rd_party/vlc/plugins/codec/libcvdsub_plugin.dll new file mode 100644 index 0000000..6b94e01 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libcvdsub_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libd3d11va_plugin.dll b/support/3rd_party/vlc/plugins/codec/libd3d11va_plugin.dll new file mode 100644 index 0000000..385379b Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libd3d11va_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libdav1d_plugin.dll b/support/3rd_party/vlc/plugins/codec/libdav1d_plugin.dll new file mode 100644 index 0000000..24389a3 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libdav1d_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libdca_plugin.dll b/support/3rd_party/vlc/plugins/codec/libdca_plugin.dll new file mode 100644 index 0000000..99b9085 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libdca_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libddummy_plugin.dll b/support/3rd_party/vlc/plugins/codec/libddummy_plugin.dll new file mode 100644 index 0000000..a89b0f7 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libddummy_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libdmo_plugin.dll b/support/3rd_party/vlc/plugins/codec/libdmo_plugin.dll new file mode 100644 index 0000000..2750d4c Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libdmo_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libdvbsub_plugin.dll b/support/3rd_party/vlc/plugins/codec/libdvbsub_plugin.dll new file mode 100644 index 0000000..0507b46 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libdvbsub_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libdxva2_plugin.dll b/support/3rd_party/vlc/plugins/codec/libdxva2_plugin.dll new file mode 100644 index 0000000..0972a35 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libdxva2_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libedummy_plugin.dll b/support/3rd_party/vlc/plugins/codec/libedummy_plugin.dll new file mode 100644 index 0000000..6903ecd Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libedummy_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libfaad_plugin.dll b/support/3rd_party/vlc/plugins/codec/libfaad_plugin.dll new file mode 100644 index 0000000..ff72650 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libfaad_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libflac_plugin.dll b/support/3rd_party/vlc/plugins/codec/libflac_plugin.dll new file mode 100644 index 0000000..eae7c5e Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libflac_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libfluidsynth_plugin.dll b/support/3rd_party/vlc/plugins/codec/libfluidsynth_plugin.dll new file mode 100644 index 0000000..454bcd1 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libfluidsynth_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libg711_plugin.dll b/support/3rd_party/vlc/plugins/codec/libg711_plugin.dll new file mode 100644 index 0000000..3129703 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libg711_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libjpeg_plugin.dll b/support/3rd_party/vlc/plugins/codec/libjpeg_plugin.dll new file mode 100644 index 0000000..9a76a09 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libjpeg_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libkate_plugin.dll b/support/3rd_party/vlc/plugins/codec/libkate_plugin.dll new file mode 100644 index 0000000..dc51ae7 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libkate_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/liblibass_plugin.dll b/support/3rd_party/vlc/plugins/codec/liblibass_plugin.dll new file mode 100644 index 0000000..9caf584 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/liblibass_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/liblibmpeg2_plugin.dll b/support/3rd_party/vlc/plugins/codec/liblibmpeg2_plugin.dll new file mode 100644 index 0000000..356a6c9 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/liblibmpeg2_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/liblpcm_plugin.dll b/support/3rd_party/vlc/plugins/codec/liblpcm_plugin.dll new file mode 100644 index 0000000..7605f3f Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/liblpcm_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libmft_plugin.dll b/support/3rd_party/vlc/plugins/codec/libmft_plugin.dll new file mode 100644 index 0000000..a3be2c4 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libmft_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libmpg123_plugin.dll b/support/3rd_party/vlc/plugins/codec/libmpg123_plugin.dll new file mode 100644 index 0000000..d6457b7 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libmpg123_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/liboggspots_plugin.dll b/support/3rd_party/vlc/plugins/codec/liboggspots_plugin.dll new file mode 100644 index 0000000..2d014f1 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/liboggspots_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libopus_plugin.dll b/support/3rd_party/vlc/plugins/codec/libopus_plugin.dll new file mode 100644 index 0000000..3d8992a Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libopus_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libpng_plugin.dll b/support/3rd_party/vlc/plugins/codec/libpng_plugin.dll new file mode 100644 index 0000000..7ac5c72 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libpng_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libqsv_plugin.dll b/support/3rd_party/vlc/plugins/codec/libqsv_plugin.dll new file mode 100644 index 0000000..e6e5052 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libqsv_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/librawvideo_plugin.dll b/support/3rd_party/vlc/plugins/codec/librawvideo_plugin.dll new file mode 100644 index 0000000..2bc7c67 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/librawvideo_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/librtpvideo_plugin.dll b/support/3rd_party/vlc/plugins/codec/librtpvideo_plugin.dll new file mode 100644 index 0000000..0174353 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/librtpvideo_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libschroedinger_plugin.dll b/support/3rd_party/vlc/plugins/codec/libschroedinger_plugin.dll new file mode 100644 index 0000000..d0e1223 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libschroedinger_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libscte18_plugin.dll b/support/3rd_party/vlc/plugins/codec/libscte18_plugin.dll new file mode 100644 index 0000000..a37510b Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libscte18_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libscte27_plugin.dll b/support/3rd_party/vlc/plugins/codec/libscte27_plugin.dll new file mode 100644 index 0000000..2e73309 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libscte27_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libsdl_image_plugin.dll b/support/3rd_party/vlc/plugins/codec/libsdl_image_plugin.dll new file mode 100644 index 0000000..f5beab6 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libsdl_image_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libspdif_plugin.dll b/support/3rd_party/vlc/plugins/codec/libspdif_plugin.dll new file mode 100644 index 0000000..6e4e23e Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libspdif_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libspeex_plugin.dll b/support/3rd_party/vlc/plugins/codec/libspeex_plugin.dll new file mode 100644 index 0000000..3550747 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libspeex_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libspudec_plugin.dll b/support/3rd_party/vlc/plugins/codec/libspudec_plugin.dll new file mode 100644 index 0000000..2598a05 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libspudec_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libstl_plugin.dll b/support/3rd_party/vlc/plugins/codec/libstl_plugin.dll new file mode 100644 index 0000000..1b5a900 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libstl_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libsubsdec_plugin.dll b/support/3rd_party/vlc/plugins/codec/libsubsdec_plugin.dll new file mode 100644 index 0000000..9a8cb4a Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libsubsdec_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libsubstx3g_plugin.dll b/support/3rd_party/vlc/plugins/codec/libsubstx3g_plugin.dll new file mode 100644 index 0000000..f2f1249 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libsubstx3g_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libsubsusf_plugin.dll b/support/3rd_party/vlc/plugins/codec/libsubsusf_plugin.dll new file mode 100644 index 0000000..622c011 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libsubsusf_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libsvcdsub_plugin.dll b/support/3rd_party/vlc/plugins/codec/libsvcdsub_plugin.dll new file mode 100644 index 0000000..c394aa3 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libsvcdsub_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libt140_plugin.dll b/support/3rd_party/vlc/plugins/codec/libt140_plugin.dll new file mode 100644 index 0000000..d576cfb Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libt140_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libtextst_plugin.dll b/support/3rd_party/vlc/plugins/codec/libtextst_plugin.dll new file mode 100644 index 0000000..18a95d4 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libtextst_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libtheora_plugin.dll b/support/3rd_party/vlc/plugins/codec/libtheora_plugin.dll new file mode 100644 index 0000000..f33c278 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libtheora_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libttml_plugin.dll b/support/3rd_party/vlc/plugins/codec/libttml_plugin.dll new file mode 100644 index 0000000..7f1446a Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libttml_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libtwolame_plugin.dll b/support/3rd_party/vlc/plugins/codec/libtwolame_plugin.dll new file mode 100644 index 0000000..10ebaca Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libtwolame_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libuleaddvaudio_plugin.dll b/support/3rd_party/vlc/plugins/codec/libuleaddvaudio_plugin.dll new file mode 100644 index 0000000..402fdbe Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libuleaddvaudio_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libvorbis_plugin.dll b/support/3rd_party/vlc/plugins/codec/libvorbis_plugin.dll new file mode 100644 index 0000000..1bc2142 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libvorbis_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libvpx_plugin.dll b/support/3rd_party/vlc/plugins/codec/libvpx_plugin.dll new file mode 100644 index 0000000..3b562f5 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libvpx_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libwebvtt_plugin.dll b/support/3rd_party/vlc/plugins/codec/libwebvtt_plugin.dll new file mode 100644 index 0000000..d2aa85d Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libwebvtt_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libx26410b_plugin.dll b/support/3rd_party/vlc/plugins/codec/libx26410b_plugin.dll new file mode 100644 index 0000000..648e519 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libx26410b_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libx264_plugin.dll b/support/3rd_party/vlc/plugins/codec/libx264_plugin.dll new file mode 100644 index 0000000..c43a5c6 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libx264_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libx265_plugin.dll b/support/3rd_party/vlc/plugins/codec/libx265_plugin.dll new file mode 100644 index 0000000..24977de Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libx265_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/codec/libzvbi_plugin.dll b/support/3rd_party/vlc/plugins/codec/libzvbi_plugin.dll new file mode 100644 index 0000000..9e16e39 Binary files /dev/null and b/support/3rd_party/vlc/plugins/codec/libzvbi_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/control/libdummy_plugin.dll b/support/3rd_party/vlc/plugins/control/libdummy_plugin.dll new file mode 100644 index 0000000..4e99e25 Binary files /dev/null and b/support/3rd_party/vlc/plugins/control/libdummy_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/control/libgestures_plugin.dll b/support/3rd_party/vlc/plugins/control/libgestures_plugin.dll new file mode 100644 index 0000000..d5db5a0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/control/libgestures_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/control/libhotkeys_plugin.dll b/support/3rd_party/vlc/plugins/control/libhotkeys_plugin.dll new file mode 100644 index 0000000..e02a803 Binary files /dev/null and b/support/3rd_party/vlc/plugins/control/libhotkeys_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/control/libnetsync_plugin.dll b/support/3rd_party/vlc/plugins/control/libnetsync_plugin.dll new file mode 100644 index 0000000..7b67de2 Binary files /dev/null and b/support/3rd_party/vlc/plugins/control/libnetsync_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/control/libntservice_plugin.dll b/support/3rd_party/vlc/plugins/control/libntservice_plugin.dll new file mode 100644 index 0000000..6daa4b4 Binary files /dev/null and b/support/3rd_party/vlc/plugins/control/libntservice_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/control/liboldrc_plugin.dll b/support/3rd_party/vlc/plugins/control/liboldrc_plugin.dll new file mode 100644 index 0000000..b0508a1 Binary files /dev/null and b/support/3rd_party/vlc/plugins/control/liboldrc_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/control/libwin_hotkeys_plugin.dll b/support/3rd_party/vlc/plugins/control/libwin_hotkeys_plugin.dll new file mode 100644 index 0000000..4e95e93 Binary files /dev/null and b/support/3rd_party/vlc/plugins/control/libwin_hotkeys_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/control/libwin_msg_plugin.dll b/support/3rd_party/vlc/plugins/control/libwin_msg_plugin.dll new file mode 100644 index 0000000..2617ede Binary files /dev/null and b/support/3rd_party/vlc/plugins/control/libwin_msg_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/d3d11/libdirect3d11_filters_plugin.dll b/support/3rd_party/vlc/plugins/d3d11/libdirect3d11_filters_plugin.dll new file mode 100644 index 0000000..f3b1207 Binary files /dev/null and b/support/3rd_party/vlc/plugins/d3d11/libdirect3d11_filters_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/d3d9/libdirect3d9_filters_plugin.dll b/support/3rd_party/vlc/plugins/d3d9/libdirect3d9_filters_plugin.dll new file mode 100644 index 0000000..b9680f1 Binary files /dev/null and b/support/3rd_party/vlc/plugins/d3d9/libdirect3d9_filters_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libadaptive_plugin.dll b/support/3rd_party/vlc/plugins/demux/libadaptive_plugin.dll new file mode 100644 index 0000000..fda50d0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libadaptive_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libaiff_plugin.dll b/support/3rd_party/vlc/plugins/demux/libaiff_plugin.dll new file mode 100644 index 0000000..4095c76 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libaiff_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libasf_plugin.dll b/support/3rd_party/vlc/plugins/demux/libasf_plugin.dll new file mode 100644 index 0000000..9061760 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libasf_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libau_plugin.dll b/support/3rd_party/vlc/plugins/demux/libau_plugin.dll new file mode 100644 index 0000000..f343d3a Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libau_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libavi_plugin.dll b/support/3rd_party/vlc/plugins/demux/libavi_plugin.dll new file mode 100644 index 0000000..0cabdd6 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libavi_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libcaf_plugin.dll b/support/3rd_party/vlc/plugins/demux/libcaf_plugin.dll new file mode 100644 index 0000000..fc3fa0c Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libcaf_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libdemux_cdg_plugin.dll b/support/3rd_party/vlc/plugins/demux/libdemux_cdg_plugin.dll new file mode 100644 index 0000000..a3897db Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libdemux_cdg_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libdemux_chromecast_plugin.dll b/support/3rd_party/vlc/plugins/demux/libdemux_chromecast_plugin.dll new file mode 100644 index 0000000..1c3c404 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libdemux_chromecast_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libdemux_stl_plugin.dll b/support/3rd_party/vlc/plugins/demux/libdemux_stl_plugin.dll new file mode 100644 index 0000000..ecdb6bf Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libdemux_stl_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libdemuxdump_plugin.dll b/support/3rd_party/vlc/plugins/demux/libdemuxdump_plugin.dll new file mode 100644 index 0000000..ff708a3 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libdemuxdump_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libdiracsys_plugin.dll b/support/3rd_party/vlc/plugins/demux/libdiracsys_plugin.dll new file mode 100644 index 0000000..c06625c Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libdiracsys_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libdirectory_demux_plugin.dll b/support/3rd_party/vlc/plugins/demux/libdirectory_demux_plugin.dll new file mode 100644 index 0000000..7108a8b Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libdirectory_demux_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libes_plugin.dll b/support/3rd_party/vlc/plugins/demux/libes_plugin.dll new file mode 100644 index 0000000..122af68 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libes_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libflacsys_plugin.dll b/support/3rd_party/vlc/plugins/demux/libflacsys_plugin.dll new file mode 100644 index 0000000..f56c0a7 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libflacsys_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libgme_plugin.dll b/support/3rd_party/vlc/plugins/demux/libgme_plugin.dll new file mode 100644 index 0000000..38b20cb Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libgme_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libh26x_plugin.dll b/support/3rd_party/vlc/plugins/demux/libh26x_plugin.dll new file mode 100644 index 0000000..c4b9f3e Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libh26x_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libimage_plugin.dll b/support/3rd_party/vlc/plugins/demux/libimage_plugin.dll new file mode 100644 index 0000000..6802464 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libimage_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libmjpeg_plugin.dll b/support/3rd_party/vlc/plugins/demux/libmjpeg_plugin.dll new file mode 100644 index 0000000..33e7530 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libmjpeg_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libmkv_plugin.dll b/support/3rd_party/vlc/plugins/demux/libmkv_plugin.dll new file mode 100644 index 0000000..59a560f Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libmkv_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libmod_plugin.dll b/support/3rd_party/vlc/plugins/demux/libmod_plugin.dll new file mode 100644 index 0000000..e83a98c Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libmod_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libmp4_plugin.dll b/support/3rd_party/vlc/plugins/demux/libmp4_plugin.dll new file mode 100644 index 0000000..361b9bf Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libmp4_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libmpc_plugin.dll b/support/3rd_party/vlc/plugins/demux/libmpc_plugin.dll new file mode 100644 index 0000000..fc9144e Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libmpc_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libmpgv_plugin.dll b/support/3rd_party/vlc/plugins/demux/libmpgv_plugin.dll new file mode 100644 index 0000000..b59dd3c Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libmpgv_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libnoseek_plugin.dll b/support/3rd_party/vlc/plugins/demux/libnoseek_plugin.dll new file mode 100644 index 0000000..61e717e Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libnoseek_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libnsc_plugin.dll b/support/3rd_party/vlc/plugins/demux/libnsc_plugin.dll new file mode 100644 index 0000000..c6da476 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libnsc_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libnsv_plugin.dll b/support/3rd_party/vlc/plugins/demux/libnsv_plugin.dll new file mode 100644 index 0000000..b921c99 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libnsv_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libnuv_plugin.dll b/support/3rd_party/vlc/plugins/demux/libnuv_plugin.dll new file mode 100644 index 0000000..82fd7e6 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libnuv_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libogg_plugin.dll b/support/3rd_party/vlc/plugins/demux/libogg_plugin.dll new file mode 100644 index 0000000..d35dd1a Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libogg_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libplaylist_plugin.dll b/support/3rd_party/vlc/plugins/demux/libplaylist_plugin.dll new file mode 100644 index 0000000..ffee165 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libplaylist_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libps_plugin.dll b/support/3rd_party/vlc/plugins/demux/libps_plugin.dll new file mode 100644 index 0000000..eb06030 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libps_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libpva_plugin.dll b/support/3rd_party/vlc/plugins/demux/libpva_plugin.dll new file mode 100644 index 0000000..1dc5b1b Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libpva_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/librawaud_plugin.dll b/support/3rd_party/vlc/plugins/demux/librawaud_plugin.dll new file mode 100644 index 0000000..77fbcfe Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/librawaud_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/librawdv_plugin.dll b/support/3rd_party/vlc/plugins/demux/librawdv_plugin.dll new file mode 100644 index 0000000..003ebd0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/librawdv_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/librawvid_plugin.dll b/support/3rd_party/vlc/plugins/demux/librawvid_plugin.dll new file mode 100644 index 0000000..0176c99 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/librawvid_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libreal_plugin.dll b/support/3rd_party/vlc/plugins/demux/libreal_plugin.dll new file mode 100644 index 0000000..3beda5e Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libreal_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libsid_plugin.dll b/support/3rd_party/vlc/plugins/demux/libsid_plugin.dll new file mode 100644 index 0000000..fdbd5ed Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libsid_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libsmf_plugin.dll b/support/3rd_party/vlc/plugins/demux/libsmf_plugin.dll new file mode 100644 index 0000000..227210a Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libsmf_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libsubtitle_plugin.dll b/support/3rd_party/vlc/plugins/demux/libsubtitle_plugin.dll new file mode 100644 index 0000000..b3cefbd Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libsubtitle_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libts_plugin.dll b/support/3rd_party/vlc/plugins/demux/libts_plugin.dll new file mode 100644 index 0000000..f50f194 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libts_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libtta_plugin.dll b/support/3rd_party/vlc/plugins/demux/libtta_plugin.dll new file mode 100644 index 0000000..51437d8 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libtta_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libty_plugin.dll b/support/3rd_party/vlc/plugins/demux/libty_plugin.dll new file mode 100644 index 0000000..52bc187 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libty_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libvc1_plugin.dll b/support/3rd_party/vlc/plugins/demux/libvc1_plugin.dll new file mode 100644 index 0000000..f2fb5b5 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libvc1_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libvobsub_plugin.dll b/support/3rd_party/vlc/plugins/demux/libvobsub_plugin.dll new file mode 100644 index 0000000..190e4cf Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libvobsub_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libvoc_plugin.dll b/support/3rd_party/vlc/plugins/demux/libvoc_plugin.dll new file mode 100644 index 0000000..5d3d863 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libvoc_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libwav_plugin.dll b/support/3rd_party/vlc/plugins/demux/libwav_plugin.dll new file mode 100644 index 0000000..34c5ef5 Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libwav_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/demux/libxa_plugin.dll b/support/3rd_party/vlc/plugins/demux/libxa_plugin.dll new file mode 100644 index 0000000..66e158f Binary files /dev/null and b/support/3rd_party/vlc/plugins/demux/libxa_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/gui/libqt_plugin.dll b/support/3rd_party/vlc/plugins/gui/libqt_plugin.dll new file mode 100644 index 0000000..a50adf2 Binary files /dev/null and b/support/3rd_party/vlc/plugins/gui/libqt_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/gui/libskins2_plugin.dll b/support/3rd_party/vlc/plugins/gui/libskins2_plugin.dll new file mode 100644 index 0000000..b8a8824 Binary files /dev/null and b/support/3rd_party/vlc/plugins/gui/libskins2_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/keystore/libfile_keystore_plugin.dll b/support/3rd_party/vlc/plugins/keystore/libfile_keystore_plugin.dll new file mode 100644 index 0000000..d739660 Binary files /dev/null and b/support/3rd_party/vlc/plugins/keystore/libfile_keystore_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/keystore/libmemory_keystore_plugin.dll b/support/3rd_party/vlc/plugins/keystore/libmemory_keystore_plugin.dll new file mode 100644 index 0000000..ae14091 Binary files /dev/null and b/support/3rd_party/vlc/plugins/keystore/libmemory_keystore_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/logger/libconsole_logger_plugin.dll b/support/3rd_party/vlc/plugins/logger/libconsole_logger_plugin.dll new file mode 100644 index 0000000..03806b4 Binary files /dev/null and b/support/3rd_party/vlc/plugins/logger/libconsole_logger_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/logger/libfile_logger_plugin.dll b/support/3rd_party/vlc/plugins/logger/libfile_logger_plugin.dll new file mode 100644 index 0000000..42ec411 Binary files /dev/null and b/support/3rd_party/vlc/plugins/logger/libfile_logger_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/lua/liblua_plugin.dll b/support/3rd_party/vlc/plugins/lua/liblua_plugin.dll new file mode 100644 index 0000000..8e58872 Binary files /dev/null and b/support/3rd_party/vlc/plugins/lua/liblua_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/meta_engine/libfolder_plugin.dll b/support/3rd_party/vlc/plugins/meta_engine/libfolder_plugin.dll new file mode 100644 index 0000000..2126d95 Binary files /dev/null and b/support/3rd_party/vlc/plugins/meta_engine/libfolder_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/meta_engine/libtaglib_plugin.dll b/support/3rd_party/vlc/plugins/meta_engine/libtaglib_plugin.dll new file mode 100644 index 0000000..869af96 Binary files /dev/null and b/support/3rd_party/vlc/plugins/meta_engine/libtaglib_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/misc/libaddonsfsstorage_plugin.dll b/support/3rd_party/vlc/plugins/misc/libaddonsfsstorage_plugin.dll new file mode 100644 index 0000000..44c37b8 Binary files /dev/null and b/support/3rd_party/vlc/plugins/misc/libaddonsfsstorage_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/misc/libaddonsvorepository_plugin.dll b/support/3rd_party/vlc/plugins/misc/libaddonsvorepository_plugin.dll new file mode 100644 index 0000000..924ac48 Binary files /dev/null and b/support/3rd_party/vlc/plugins/misc/libaddonsvorepository_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/misc/libaudioscrobbler_plugin.dll b/support/3rd_party/vlc/plugins/misc/libaudioscrobbler_plugin.dll new file mode 100644 index 0000000..cd83365 Binary files /dev/null and b/support/3rd_party/vlc/plugins/misc/libaudioscrobbler_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/misc/libexport_plugin.dll b/support/3rd_party/vlc/plugins/misc/libexport_plugin.dll new file mode 100644 index 0000000..6fd1fab Binary files /dev/null and b/support/3rd_party/vlc/plugins/misc/libexport_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/misc/libfingerprinter_plugin.dll b/support/3rd_party/vlc/plugins/misc/libfingerprinter_plugin.dll new file mode 100644 index 0000000..58bbaf6 Binary files /dev/null and b/support/3rd_party/vlc/plugins/misc/libfingerprinter_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/misc/libgnutls_plugin.dll b/support/3rd_party/vlc/plugins/misc/libgnutls_plugin.dll new file mode 100644 index 0000000..8fa4fab Binary files /dev/null and b/support/3rd_party/vlc/plugins/misc/libgnutls_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/misc/liblogger_plugin.dll b/support/3rd_party/vlc/plugins/misc/liblogger_plugin.dll new file mode 100644 index 0000000..3828f8e Binary files /dev/null and b/support/3rd_party/vlc/plugins/misc/liblogger_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/misc/libstats_plugin.dll b/support/3rd_party/vlc/plugins/misc/libstats_plugin.dll new file mode 100644 index 0000000..6cdcce7 Binary files /dev/null and b/support/3rd_party/vlc/plugins/misc/libstats_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/misc/libvod_rtsp_plugin.dll b/support/3rd_party/vlc/plugins/misc/libvod_rtsp_plugin.dll new file mode 100644 index 0000000..973043d Binary files /dev/null and b/support/3rd_party/vlc/plugins/misc/libvod_rtsp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/misc/libxml_plugin.dll b/support/3rd_party/vlc/plugins/misc/libxml_plugin.dll new file mode 100644 index 0000000..22570c3 Binary files /dev/null and b/support/3rd_party/vlc/plugins/misc/libxml_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/mux/libmux_asf_plugin.dll b/support/3rd_party/vlc/plugins/mux/libmux_asf_plugin.dll new file mode 100644 index 0000000..5492a72 Binary files /dev/null and b/support/3rd_party/vlc/plugins/mux/libmux_asf_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/mux/libmux_avi_plugin.dll b/support/3rd_party/vlc/plugins/mux/libmux_avi_plugin.dll new file mode 100644 index 0000000..16e1eae Binary files /dev/null and b/support/3rd_party/vlc/plugins/mux/libmux_avi_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/mux/libmux_dummy_plugin.dll b/support/3rd_party/vlc/plugins/mux/libmux_dummy_plugin.dll new file mode 100644 index 0000000..768f401 Binary files /dev/null and b/support/3rd_party/vlc/plugins/mux/libmux_dummy_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/mux/libmux_mp4_plugin.dll b/support/3rd_party/vlc/plugins/mux/libmux_mp4_plugin.dll new file mode 100644 index 0000000..32f16f4 Binary files /dev/null and b/support/3rd_party/vlc/plugins/mux/libmux_mp4_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/mux/libmux_mpjpeg_plugin.dll b/support/3rd_party/vlc/plugins/mux/libmux_mpjpeg_plugin.dll new file mode 100644 index 0000000..990bdb7 Binary files /dev/null and b/support/3rd_party/vlc/plugins/mux/libmux_mpjpeg_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/mux/libmux_ogg_plugin.dll b/support/3rd_party/vlc/plugins/mux/libmux_ogg_plugin.dll new file mode 100644 index 0000000..548c62b Binary files /dev/null and b/support/3rd_party/vlc/plugins/mux/libmux_ogg_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/mux/libmux_ps_plugin.dll b/support/3rd_party/vlc/plugins/mux/libmux_ps_plugin.dll new file mode 100644 index 0000000..a2e0474 Binary files /dev/null and b/support/3rd_party/vlc/plugins/mux/libmux_ps_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/mux/libmux_ts_plugin.dll b/support/3rd_party/vlc/plugins/mux/libmux_ts_plugin.dll new file mode 100644 index 0000000..fc2f133 Binary files /dev/null and b/support/3rd_party/vlc/plugins/mux/libmux_ts_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/mux/libmux_wav_plugin.dll b/support/3rd_party/vlc/plugins/mux/libmux_wav_plugin.dll new file mode 100644 index 0000000..62bb17d Binary files /dev/null and b/support/3rd_party/vlc/plugins/mux/libmux_wav_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_a52_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_a52_plugin.dll new file mode 100644 index 0000000..6df3365 Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_a52_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_av1_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_av1_plugin.dll new file mode 100644 index 0000000..c975201 Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_av1_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_copy_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_copy_plugin.dll new file mode 100644 index 0000000..af3cb44 Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_copy_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_dirac_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_dirac_plugin.dll new file mode 100644 index 0000000..c8c79ae Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_dirac_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_dts_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_dts_plugin.dll new file mode 100644 index 0000000..f707cf2 Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_dts_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_flac_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_flac_plugin.dll new file mode 100644 index 0000000..cfa4638 Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_flac_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_h264_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_h264_plugin.dll new file mode 100644 index 0000000..e8c9515 Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_h264_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_hevc_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_hevc_plugin.dll new file mode 100644 index 0000000..5fccf53 Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_hevc_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mlp_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mlp_plugin.dll new file mode 100644 index 0000000..d5af15f Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mlp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpeg4audio_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpeg4audio_plugin.dll new file mode 100644 index 0000000..d68ec44 Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpeg4audio_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpeg4video_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpeg4video_plugin.dll new file mode 100644 index 0000000..7df8fbf Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpeg4video_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpegaudio_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpegaudio_plugin.dll new file mode 100644 index 0000000..15fba39 Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpegaudio_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpegvideo_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpegvideo_plugin.dll new file mode 100644 index 0000000..2d0e651 Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_mpegvideo_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/packetizer/libpacketizer_vc1_plugin.dll b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_vc1_plugin.dll new file mode 100644 index 0000000..f7e50e0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/packetizer/libpacketizer_vc1_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/services_discovery/libmediadirs_plugin.dll b/support/3rd_party/vlc/plugins/services_discovery/libmediadirs_plugin.dll new file mode 100644 index 0000000..f27ee7f Binary files /dev/null and b/support/3rd_party/vlc/plugins/services_discovery/libmediadirs_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/services_discovery/libmicrodns_plugin.dll b/support/3rd_party/vlc/plugins/services_discovery/libmicrodns_plugin.dll new file mode 100644 index 0000000..12a40e4 Binary files /dev/null and b/support/3rd_party/vlc/plugins/services_discovery/libmicrodns_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/services_discovery/libpodcast_plugin.dll b/support/3rd_party/vlc/plugins/services_discovery/libpodcast_plugin.dll new file mode 100644 index 0000000..8096489 Binary files /dev/null and b/support/3rd_party/vlc/plugins/services_discovery/libpodcast_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/services_discovery/libsap_plugin.dll b/support/3rd_party/vlc/plugins/services_discovery/libsap_plugin.dll new file mode 100644 index 0000000..b9f0e9a Binary files /dev/null and b/support/3rd_party/vlc/plugins/services_discovery/libsap_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/services_discovery/libupnp_plugin.dll b/support/3rd_party/vlc/plugins/services_discovery/libupnp_plugin.dll new file mode 100644 index 0000000..60a5084 Binary files /dev/null and b/support/3rd_party/vlc/plugins/services_discovery/libupnp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/services_discovery/libwindrive_plugin.dll b/support/3rd_party/vlc/plugins/services_discovery/libwindrive_plugin.dll new file mode 100644 index 0000000..2e77f1b Binary files /dev/null and b/support/3rd_party/vlc/plugins/services_discovery/libwindrive_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/spu/libaudiobargraph_v_plugin.dll b/support/3rd_party/vlc/plugins/spu/libaudiobargraph_v_plugin.dll new file mode 100644 index 0000000..9ca33d6 Binary files /dev/null and b/support/3rd_party/vlc/plugins/spu/libaudiobargraph_v_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/spu/liblogo_plugin.dll b/support/3rd_party/vlc/plugins/spu/liblogo_plugin.dll new file mode 100644 index 0000000..3ca9e59 Binary files /dev/null and b/support/3rd_party/vlc/plugins/spu/liblogo_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/spu/libmarq_plugin.dll b/support/3rd_party/vlc/plugins/spu/libmarq_plugin.dll new file mode 100644 index 0000000..f488559 Binary files /dev/null and b/support/3rd_party/vlc/plugins/spu/libmarq_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/spu/libmosaic_plugin.dll b/support/3rd_party/vlc/plugins/spu/libmosaic_plugin.dll new file mode 100644 index 0000000..6a10404 Binary files /dev/null and b/support/3rd_party/vlc/plugins/spu/libmosaic_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/spu/libremoteosd_plugin.dll b/support/3rd_party/vlc/plugins/spu/libremoteosd_plugin.dll new file mode 100644 index 0000000..bb2447c Binary files /dev/null and b/support/3rd_party/vlc/plugins/spu/libremoteosd_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/spu/librss_plugin.dll b/support/3rd_party/vlc/plugins/spu/librss_plugin.dll new file mode 100644 index 0000000..f2043cf Binary files /dev/null and b/support/3rd_party/vlc/plugins/spu/librss_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/spu/libsubsdelay_plugin.dll b/support/3rd_party/vlc/plugins/spu/libsubsdelay_plugin.dll new file mode 100644 index 0000000..ec1666e Binary files /dev/null and b/support/3rd_party/vlc/plugins/spu/libsubsdelay_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_extractor/libarchive_plugin.dll b/support/3rd_party/vlc/plugins/stream_extractor/libarchive_plugin.dll new file mode 100644 index 0000000..4e8fd77 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_extractor/libarchive_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_filter/libadf_plugin.dll b/support/3rd_party/vlc/plugins/stream_filter/libadf_plugin.dll new file mode 100644 index 0000000..8832989 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_filter/libadf_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_filter/libaribcam_plugin.dll b/support/3rd_party/vlc/plugins/stream_filter/libaribcam_plugin.dll new file mode 100644 index 0000000..5c7a13d Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_filter/libaribcam_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_filter/libcache_block_plugin.dll b/support/3rd_party/vlc/plugins/stream_filter/libcache_block_plugin.dll new file mode 100644 index 0000000..9767ae3 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_filter/libcache_block_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_filter/libcache_read_plugin.dll b/support/3rd_party/vlc/plugins/stream_filter/libcache_read_plugin.dll new file mode 100644 index 0000000..fb0a776 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_filter/libcache_read_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_filter/libhds_plugin.dll b/support/3rd_party/vlc/plugins/stream_filter/libhds_plugin.dll new file mode 100644 index 0000000..101d7c2 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_filter/libhds_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_filter/libinflate_plugin.dll b/support/3rd_party/vlc/plugins/stream_filter/libinflate_plugin.dll new file mode 100644 index 0000000..4d7e8d1 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_filter/libinflate_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_filter/libprefetch_plugin.dll b/support/3rd_party/vlc/plugins/stream_filter/libprefetch_plugin.dll new file mode 100644 index 0000000..ef8fc03 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_filter/libprefetch_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_filter/librecord_plugin.dll b/support/3rd_party/vlc/plugins/stream_filter/librecord_plugin.dll new file mode 100644 index 0000000..2c6b391 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_filter/librecord_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_filter/libskiptags_plugin.dll b/support/3rd_party/vlc/plugins/stream_filter/libskiptags_plugin.dll new file mode 100644 index 0000000..bc2c8dc Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_filter/libskiptags_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_autodel_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_autodel_plugin.dll new file mode 100644 index 0000000..8b265fb Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_autodel_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_bridge_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_bridge_plugin.dll new file mode 100644 index 0000000..9c551f1 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_bridge_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_chromaprint_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_chromaprint_plugin.dll new file mode 100644 index 0000000..ec1a756 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_chromaprint_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_chromecast_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_chromecast_plugin.dll new file mode 100644 index 0000000..dde3496 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_chromecast_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_cycle_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_cycle_plugin.dll new file mode 100644 index 0000000..1f3201a Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_cycle_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_delay_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_delay_plugin.dll new file mode 100644 index 0000000..25e4468 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_delay_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_description_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_description_plugin.dll new file mode 100644 index 0000000..d76d7cb Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_description_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_display_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_display_plugin.dll new file mode 100644 index 0000000..e0ff0bd Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_display_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_dummy_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_dummy_plugin.dll new file mode 100644 index 0000000..ba45c1d Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_dummy_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_duplicate_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_duplicate_plugin.dll new file mode 100644 index 0000000..be293c1 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_duplicate_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_es_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_es_plugin.dll new file mode 100644 index 0000000..f8e6dd0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_es_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_gather_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_gather_plugin.dll new file mode 100644 index 0000000..2ea2e07 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_gather_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_mosaic_bridge_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_mosaic_bridge_plugin.dll new file mode 100644 index 0000000..2d873e5 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_mosaic_bridge_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_record_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_record_plugin.dll new file mode 100644 index 0000000..e34a642 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_record_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_rtp_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_rtp_plugin.dll new file mode 100644 index 0000000..da03919 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_rtp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_setid_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_setid_plugin.dll new file mode 100644 index 0000000..e6482d3 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_setid_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_smem_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_smem_plugin.dll new file mode 100644 index 0000000..cf05766 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_smem_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_standard_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_standard_plugin.dll new file mode 100644 index 0000000..3a00cd0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_standard_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_stats_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_stats_plugin.dll new file mode 100644 index 0000000..052dedb Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_stats_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/stream_out/libstream_out_transcode_plugin.dll b/support/3rd_party/vlc/plugins/stream_out/libstream_out_transcode_plugin.dll new file mode 100644 index 0000000..0d162b0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/stream_out/libstream_out_transcode_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/text_renderer/libfreetype_plugin.dll b/support/3rd_party/vlc/plugins/text_renderer/libfreetype_plugin.dll new file mode 100644 index 0000000..a5f4805 Binary files /dev/null and b/support/3rd_party/vlc/plugins/text_renderer/libfreetype_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/text_renderer/libsapi_plugin.dll b/support/3rd_party/vlc/plugins/text_renderer/libsapi_plugin.dll new file mode 100644 index 0000000..51fea12 Binary files /dev/null and b/support/3rd_party/vlc/plugins/text_renderer/libsapi_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/text_renderer/libtdummy_plugin.dll b/support/3rd_party/vlc/plugins/text_renderer/libtdummy_plugin.dll new file mode 100644 index 0000000..e5558b4 Binary files /dev/null and b/support/3rd_party/vlc/plugins/text_renderer/libtdummy_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libchain_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libchain_plugin.dll new file mode 100644 index 0000000..1c4033f Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libchain_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libgrey_yuv_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libgrey_yuv_plugin.dll new file mode 100644 index 0000000..75fb1aa Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libgrey_yuv_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi420_10_p010_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi420_10_p010_plugin.dll new file mode 100644 index 0000000..99af03b Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi420_10_p010_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi420_nv12_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi420_nv12_plugin.dll new file mode 100644 index 0000000..8bbebf1 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi420_nv12_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi420_rgb_mmx_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi420_rgb_mmx_plugin.dll new file mode 100644 index 0000000..d194c87 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi420_rgb_mmx_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi420_rgb_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi420_rgb_plugin.dll new file mode 100644 index 0000000..5e0c9e0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi420_rgb_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi420_rgb_sse2_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi420_rgb_sse2_plugin.dll new file mode 100644 index 0000000..216b5e2 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi420_rgb_sse2_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi420_yuy2_mmx_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi420_yuy2_mmx_plugin.dll new file mode 100644 index 0000000..fbd64fa Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi420_yuy2_mmx_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi420_yuy2_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi420_yuy2_plugin.dll new file mode 100644 index 0000000..8e42c51 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi420_yuy2_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi420_yuy2_sse2_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi420_yuy2_sse2_plugin.dll new file mode 100644 index 0000000..be1f2e2 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi420_yuy2_sse2_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi422_i420_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi422_i420_plugin.dll new file mode 100644 index 0000000..e442775 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi422_i420_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi422_yuy2_mmx_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi422_yuy2_mmx_plugin.dll new file mode 100644 index 0000000..bc8b9e8 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi422_yuy2_mmx_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi422_yuy2_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi422_yuy2_plugin.dll new file mode 100644 index 0000000..f335423 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi422_yuy2_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libi422_yuy2_sse2_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libi422_yuy2_sse2_plugin.dll new file mode 100644 index 0000000..546296e Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libi422_yuy2_sse2_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/librv32_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/librv32_plugin.dll new file mode 100644 index 0000000..1087a6d Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/librv32_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libswscale_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libswscale_plugin.dll new file mode 100644 index 0000000..add38ac Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libswscale_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libyuvp_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libyuvp_plugin.dll new file mode 100644 index 0000000..45ab323 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libyuvp_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libyuy2_i420_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libyuy2_i420_plugin.dll new file mode 100644 index 0000000..27d3e01 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libyuy2_i420_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_chroma/libyuy2_i422_plugin.dll b/support/3rd_party/vlc/plugins/video_chroma/libyuy2_i422_plugin.dll new file mode 100644 index 0000000..bf9a5b6 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_chroma/libyuy2_i422_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libadjust_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libadjust_plugin.dll new file mode 100644 index 0000000..c7392e4 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libadjust_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libalphamask_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libalphamask_plugin.dll new file mode 100644 index 0000000..6717ca9 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libalphamask_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libanaglyph_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libanaglyph_plugin.dll new file mode 100644 index 0000000..3540ba6 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libanaglyph_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libantiflicker_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libantiflicker_plugin.dll new file mode 100644 index 0000000..e7a84c2 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libantiflicker_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libball_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libball_plugin.dll new file mode 100644 index 0000000..e7ca427 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libball_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libblend_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libblend_plugin.dll new file mode 100644 index 0000000..509fbf6 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libblend_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libblendbench_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libblendbench_plugin.dll new file mode 100644 index 0000000..47c9017 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libblendbench_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libbluescreen_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libbluescreen_plugin.dll new file mode 100644 index 0000000..7091c76 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libbluescreen_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libcanvas_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libcanvas_plugin.dll new file mode 100644 index 0000000..05ab6c0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libcanvas_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libcolorthres_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libcolorthres_plugin.dll new file mode 100644 index 0000000..9d1f30a Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libcolorthres_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libcroppadd_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libcroppadd_plugin.dll new file mode 100644 index 0000000..0099253 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libcroppadd_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libdeinterlace_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libdeinterlace_plugin.dll new file mode 100644 index 0000000..a10269f Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libdeinterlace_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libedgedetection_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libedgedetection_plugin.dll new file mode 100644 index 0000000..0adb6d0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libedgedetection_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/liberase_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/liberase_plugin.dll new file mode 100644 index 0000000..5434d5a Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/liberase_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libextract_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libextract_plugin.dll new file mode 100644 index 0000000..f27e563 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libextract_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libfps_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libfps_plugin.dll new file mode 100644 index 0000000..0e83322 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libfps_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libfreeze_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libfreeze_plugin.dll new file mode 100644 index 0000000..df0ab6c Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libfreeze_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libgaussianblur_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libgaussianblur_plugin.dll new file mode 100644 index 0000000..84af7a0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libgaussianblur_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libgradfun_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libgradfun_plugin.dll new file mode 100644 index 0000000..84d21b5 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libgradfun_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libgradient_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libgradient_plugin.dll new file mode 100644 index 0000000..adee018 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libgradient_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libgrain_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libgrain_plugin.dll new file mode 100644 index 0000000..a17bacd Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libgrain_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libhqdn3d_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libhqdn3d_plugin.dll new file mode 100644 index 0000000..1e14c8b Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libhqdn3d_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libinvert_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libinvert_plugin.dll new file mode 100644 index 0000000..387b408 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libinvert_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libmagnify_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libmagnify_plugin.dll new file mode 100644 index 0000000..b8442ee Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libmagnify_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libmirror_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libmirror_plugin.dll new file mode 100644 index 0000000..3c48c4f Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libmirror_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libmotionblur_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libmotionblur_plugin.dll new file mode 100644 index 0000000..ec2d37d Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libmotionblur_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libmotiondetect_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libmotiondetect_plugin.dll new file mode 100644 index 0000000..4597e1b Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libmotiondetect_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/liboldmovie_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/liboldmovie_plugin.dll new file mode 100644 index 0000000..9b40d1b Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/liboldmovie_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libposterize_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libposterize_plugin.dll new file mode 100644 index 0000000..57cade0 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libposterize_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libpostproc_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libpostproc_plugin.dll new file mode 100644 index 0000000..a6751ef Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libpostproc_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libpsychedelic_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libpsychedelic_plugin.dll new file mode 100644 index 0000000..9f29d0b Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libpsychedelic_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libpuzzle_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libpuzzle_plugin.dll new file mode 100644 index 0000000..9c08565 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libpuzzle_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libripple_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libripple_plugin.dll new file mode 100644 index 0000000..d9534d5 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libripple_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/librotate_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/librotate_plugin.dll new file mode 100644 index 0000000..3886dca Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/librotate_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libscale_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libscale_plugin.dll new file mode 100644 index 0000000..4958326 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libscale_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libscene_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libscene_plugin.dll new file mode 100644 index 0000000..012e782 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libscene_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libsepia_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libsepia_plugin.dll new file mode 100644 index 0000000..0c808d7 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libsepia_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libsharpen_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libsharpen_plugin.dll new file mode 100644 index 0000000..410361e Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libsharpen_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libtransform_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libtransform_plugin.dll new file mode 100644 index 0000000..cfbb58b Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libtransform_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libvhs_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libvhs_plugin.dll new file mode 100644 index 0000000..655a88d Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libvhs_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_filter/libwave_plugin.dll b/support/3rd_party/vlc/plugins/video_filter/libwave_plugin.dll new file mode 100644 index 0000000..e834a17 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_filter/libwave_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libcaca_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libcaca_plugin.dll new file mode 100644 index 0000000..df76dab Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libcaca_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libdirect3d11_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libdirect3d11_plugin.dll new file mode 100644 index 0000000..0bc0020 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libdirect3d11_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libdirect3d9_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libdirect3d9_plugin.dll new file mode 100644 index 0000000..41b1926 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libdirect3d9_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libdirectdraw_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libdirectdraw_plugin.dll new file mode 100644 index 0000000..810b46f Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libdirectdraw_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libdrawable_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libdrawable_plugin.dll new file mode 100644 index 0000000..be753ce Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libdrawable_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libflaschen_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libflaschen_plugin.dll new file mode 100644 index 0000000..3a8547e Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libflaschen_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libgl_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libgl_plugin.dll new file mode 100644 index 0000000..7eb80aa Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libgl_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libglinterop_dxva2_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libglinterop_dxva2_plugin.dll new file mode 100644 index 0000000..5a0276e Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libglinterop_dxva2_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libglwin32_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libglwin32_plugin.dll new file mode 100644 index 0000000..255696f Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libglwin32_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libvdummy_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libvdummy_plugin.dll new file mode 100644 index 0000000..a73567c Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libvdummy_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libvmem_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libvmem_plugin.dll new file mode 100644 index 0000000..ca8569e Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libvmem_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libwgl_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libwgl_plugin.dll new file mode 100644 index 0000000..4362f7f Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libwgl_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libwingdi_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libwingdi_plugin.dll new file mode 100644 index 0000000..ede49aa Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libwingdi_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libwinhibit_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libwinhibit_plugin.dll new file mode 100644 index 0000000..eea059e Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libwinhibit_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_output/libyuv_plugin.dll b/support/3rd_party/vlc/plugins/video_output/libyuv_plugin.dll new file mode 100644 index 0000000..93aa230 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_output/libyuv_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_splitter/libclone_plugin.dll b/support/3rd_party/vlc/plugins/video_splitter/libclone_plugin.dll new file mode 100644 index 0000000..3a7c4e9 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_splitter/libclone_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_splitter/libpanoramix_plugin.dll b/support/3rd_party/vlc/plugins/video_splitter/libpanoramix_plugin.dll new file mode 100644 index 0000000..e86b3a9 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_splitter/libpanoramix_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/video_splitter/libwall_plugin.dll b/support/3rd_party/vlc/plugins/video_splitter/libwall_plugin.dll new file mode 100644 index 0000000..d1d55a6 Binary files /dev/null and b/support/3rd_party/vlc/plugins/video_splitter/libwall_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/visualization/libglspectrum_plugin.dll b/support/3rd_party/vlc/plugins/visualization/libglspectrum_plugin.dll new file mode 100644 index 0000000..a78da35 Binary files /dev/null and b/support/3rd_party/vlc/plugins/visualization/libglspectrum_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/visualization/libgoom_plugin.dll b/support/3rd_party/vlc/plugins/visualization/libgoom_plugin.dll new file mode 100644 index 0000000..6ce4b17 Binary files /dev/null and b/support/3rd_party/vlc/plugins/visualization/libgoom_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/visualization/libprojectm_plugin.dll b/support/3rd_party/vlc/plugins/visualization/libprojectm_plugin.dll new file mode 100644 index 0000000..9c90a1d Binary files /dev/null and b/support/3rd_party/vlc/plugins/visualization/libprojectm_plugin.dll differ diff --git a/support/3rd_party/vlc/plugins/visualization/libvisual_plugin.dll b/support/3rd_party/vlc/plugins/visualization/libvisual_plugin.dll new file mode 100644 index 0000000..3e7a859 Binary files /dev/null and b/support/3rd_party/vlc/plugins/visualization/libvisual_plugin.dll differ diff --git a/support/3rd_party/vlc/portable/vlcrc b/support/3rd_party/vlc/portable/vlcrc new file mode 100644 index 0000000..07b877c --- /dev/null +++ b/support/3rd_party/vlc/portable/vlcrc @@ -0,0 +1,5320 @@ +### +### vlc 3.0.21 +### + +### +### lines beginning with a '#' character are comments +### + +[visual] # Visualizer filter + +# Effects list (string) +#effect-list=spectrum + +# Video width (integer) +#effect-width=800 + +# Video height (integer) +#effect-height=500 + +# FFT window (string) +#effect-fft-window=flat + +# Kaiser window parameter (float) +#effect-kaiser-param=3.000000 + +# Show 80 bands instead of 20 (boolean) +#visual-80-bands=1 + +# Draw peaks in the analyzer (boolean) +#visual-peaks=1 + +# Enable original graphic spectrum (boolean) +#spect-show-original=0 + +# Draw the base of the bands (boolean) +#spect-show-base=1 + +# Base pixel radius (integer) +#spect-radius=42 + +# Spectral sections (integer) +#spect-sections=3 + +# V-plane color (integer) +#spect-color=80 + +# Draw bands in the spectrometer (boolean) +#spect-show-bands=1 + +# Show 80 bands instead of 20 (boolean) +#spect-80-bands=1 + +# Number of blank pixels between bands. (integer) +#spect-separ=1 + +# Amplification (integer) +#spect-amp=8 + +# Draw peaks in the analyzer (boolean) +#spect-show-peaks=1 + +# Peak extra width (integer) +#spect-peak-width=61 + +# Peak height (integer) +#spect-peak-height=1 + +[projectm] # libprojectM effect + +# projectM preset path (string) +#projectm-preset-path= + +# Title font (string) +#projectm-title-font=C:\WINDOWS\Fonts\arial.ttf + +# Font menu (string) +#projectm-menu-font=C:\WINDOWS\Fonts\arial.ttf + +# Video width (integer) +#projectm-width=800 + +# Video height (integer) +#projectm-height=500 + +# Mesh width (integer) +#projectm-meshx=32 + +# Mesh height (integer) +#projectm-meshy=24 + +# Texture size (integer) +#projectm-texture-size=1024 + +[goom] # Goom effect + +# Goom display width (integer) +#goom-width=800 + +# Goom display height (integer) +#goom-height=500 + +# Goom animation speed (integer) +#goom-speed=6 + +[glspectrum] # 3D OpenGL spectrum visualization + +# Video width (integer) +#glspectrum-width=400 + +# Video height (integer) +#glspectrum-height=300 + +[wall] # Wall video filter + +# Number of columns (integer) +#wall-cols=3 + +# Number of rows (integer) +#wall-rows=3 + +# Active windows (string) +#wall-active= + +# Element aspect ratio (string) +#wall-element-aspect=16:9 + +[panoramix] # Panoramix: wall with overlap video filter + +# Number of columns (integer) +#panoramix-cols=-1 + +# Number of rows (integer) +#panoramix-rows=-1 + +# length of the overlapping area (in %) (integer) +#panoramix-bz-length=100 + +# height of the overlapping area (in %) (integer) +#panoramix-bz-height=100 + +# Attenuation (boolean) +#panoramix-attenuate=1 + +# Attenuation, begin (in %) (integer) +#panoramix-bz-begin=0 + +# Attenuation, middle (in %) (integer) +#panoramix-bz-middle=50 + +# Attenuation, end (in %) (integer) +#panoramix-bz-end=100 + +# middle position (in %) (integer) +#panoramix-bz-middle-pos=50 + +# Gamma (Red) correction (float) +#panoramix-bz-gamma-red=1.000000 + +# Gamma (Green) correction (float) +#panoramix-bz-gamma-green=1.000000 + +# Gamma (Blue) correction (float) +#panoramix-bz-gamma-blue=1.000000 + +# Black Crush for Red (integer) +#panoramix-bz-blackcrush-red=140 + +# Black Crush for Green (integer) +#panoramix-bz-blackcrush-green=140 + +# Black Crush for Blue (integer) +#panoramix-bz-blackcrush-blue=140 + +# White Crush for Red (integer) +#panoramix-bz-whitecrush-red=200 + +# White Crush for Green (integer) +#panoramix-bz-whitecrush-green=200 + +# White Crush for Blue (integer) +#panoramix-bz-whitecrush-blue=200 + +# Black Level for Red (integer) +#panoramix-bz-blacklevel-red=150 + +# Black Level for Green (integer) +#panoramix-bz-blacklevel-green=150 + +# Black Level for Blue (integer) +#panoramix-bz-blacklevel-blue=150 + +# White Level for Red (integer) +#panoramix-bz-whitelevel-red=0 + +# White Level for Green (integer) +#panoramix-bz-whitelevel-green=0 + +# White Level for Blue (integer) +#panoramix-bz-whitelevel-blue=0 + +# Active windows (string) +#panoramix-active= + +[clone] # Clone video filter + +# Number of clones (integer) +#clone-count=2 + +# Video output modules (string) +#clone-vout-list= + +[yuv] # YUV video output + +# device, fifo or filename (string) +#yuv-file=stream.yuv + +# Chroma used (string) +#yuv-chroma= + +# Add a YUV4MPEG2 header (boolean) +#yuv-yuv4mpeg2=0 + +[wgl] # WGL extension for OpenGL + +# GPU affinity (integer) +#gpu-affinity=-1 + +[vmem] # Video memory output + +# Width (integer) +#vmem-width=320 + +# Height (integer) +#vmem-height=200 + +# Pitch (integer) +#vmem-pitch=640 + +# Chroma (string) +#vmem-chroma=RV16 + +[vdummy] # Dummy video output + +# Dummy image chroma format (string) +#dummy-chroma= + +[gl] # OpenGL video output + +# OpenGL extension (string) +#gl= + +# Open GL/GLES hardware converter (string) +#glconv= + +# Rendering intent for color conversion (integer) +#rendering-intent=1 + +# Display primaries (integer) +#target-prim=0 + +# Display gamma / transfer function (integer) +#target-trc=0 + +# Tone-mapping algorithm (integer) +#tone-mapping=3 + +# Tone-mapping parameter (float) +#tone-mapping-param=0.000000 + +# Highlight clipped pixels (boolean) +#tone-mapping-warn=0 + +# Dithering algorithm (integer) +#dither-algo=-1 + +# Dither depth override (0 = framebuffer depth) (integer) +#dither-depth=0 + +# Tone-mapping desaturation coefficient (float) +#tone-mapping-desat=0.500000 + +[glwin32] # OpenGL video output for Windows + +# Open GL/GLES hardware converter (string) +#glconv= + +# Rendering intent for color conversion (integer) +#rendering-intent=1 + +# Display primaries (integer) +#target-prim=0 + +# Display gamma / transfer function (integer) +#target-trc=0 + +# Tone-mapping algorithm (integer) +#tone-mapping=3 + +# Tone-mapping parameter (float) +#tone-mapping-param=0.000000 + +# Highlight clipped pixels (boolean) +#tone-mapping-warn=0 + +# Dithering algorithm (integer) +#dither-algo=-1 + +# Dither depth override (0 = framebuffer depth) (integer) +#dither-depth=0 + +# Tone-mapping desaturation coefficient (float) +#tone-mapping-desat=0.500000 + +[flaschen] # Flaschen-Taschen video output + +# Flaschen-Taschen display address (string) +#flaschen-display= + +# Width (integer) +#flaschen-width=25 + +# Height (integer) +#flaschen-height=20 + +[drawable] # Embedded window video + +[directdraw] # DirectX (DirectDraw) video output + +# Use hardware YUV->RGB conversions (boolean) +#directx-hw-yuv=1 + +# Overlay video output (boolean) +#directx-overlay=1 + +# Use video buffers in system memory (boolean) +#directx-use-sysmem=0 + +# Use triple buffering for overlays (boolean) +#directx-3buffering=1 + +# Name of desired display device (string) +#directx-device= + +[direct3d9] # Direct3D9 video output + +# Use hardware blending support (boolean) +#direct3d9-hw-blending=1 + +# Pixel Shader (string) +#direct3d9-shader= + +# Path to HLSL file (string) +#direct3d9-shader-file= + +[direct3d11] # Direct3D11 video output + +# Use hardware blending support (boolean) +#direct3d11-hw-blending=1 + +# Video Upscaling Mode (string) +#d3d11-upscale-mode=linear + +# HDR Output Mode (string) +#d3d11-hdr-mode=auto + +[transform] # Video transformation filter + +# Transform type (string) +#transform-type=90 + +[sharpen] # Sharpen video filter + +# Sharpen strength (0-2) (float) +#sharpen-sigma=0.050000 + +[sepia] # Sepia video filter + +# Sepia intensity (integer) +#sepia-intensity=120 + +[scene] # Scene video filter + +# Image format (string) +#scene-format=png + +# Image width (integer) +#scene-width=-1 + +# Image height (integer) +#scene-height=-1 + +# Filename prefix (string) +#scene-prefix=scene + +# Directory path prefix (string) +#scene-path= + +# Always write to the same file (boolean) +#scene-replace=0 + +# Recording ratio (integer) +#scene-ratio=50 + +[rotate] # Rotate video filter + +# Angle in degrees (float) +#rotate-angle=30.000000 + +# Use motion sensors (boolean) +#rotate-use-motion=0 + +[puzzle] # Puzzle interactive game video filter + +# Number of puzzle rows (integer) +#puzzle-rows=4 + +# Number of puzzle columns (integer) +#puzzle-cols=4 + +# Border (integer) +#puzzle-border=3 + +# Small preview (boolean) +#puzzle-preview=0 + +# Small preview size (integer) +#puzzle-preview-size=15 + +# Piece edge shape size (integer) +#puzzle-shape-size=90 + +# Auto shuffle (integer) +#puzzle-auto-shuffle=0 + +# Auto solve (integer) +#puzzle-auto-solve=0 + +# Rotation (integer) +#puzzle-rotation=0 + +# Game mode (integer) +#puzzle-mode=0 + +[postproc] # Video post processing filter + +# Post processing quality (integer) +#postproc-q=6 + +# FFmpeg post processing filter chains (string) +#postproc-name=default + +[posterize] # Posterize video filter + +# Posterize level (integer) +#posterize-level=6 + +[motionblur] # Motion blur filter + +# Blur factor (1-127) (integer) +#blur-factor=80 + +[mirror] # Mirror video filter + +# Mirror orientation (integer) +#mirror-split=0 + +# Direction (integer) +#mirror-direction=0 + +[hqdn3d] # High Quality 3D Denoiser filter + +# Spatial luma strength (0-254) (float) +#hqdn3d-luma-spat=4.000000 + +# Spatial chroma strength (0-254) (float) +#hqdn3d-chroma-spat=3.000000 + +# Temporal luma strength (0-254) (float) +#hqdn3d-luma-temp=6.000000 + +# Temporal chroma strength (0-254) (float) +#hqdn3d-chroma-temp=4.500000 + +[grain] # Grain video filter + +# Variance (float) +#grain-variance=2.000000 + +# Minimal period (integer) +#grain-period-min=1 + +# Maximal period (integer) +#grain-period-max=48 + +[gradient] # Gradient video filter + +# Distort mode (string) +#gradient-mode=gradient + +# Gradient image type (integer) +#gradient-type=0 + +# Apply cartoon effect (boolean) +#gradient-cartoon=1 + +[gradfun] # Gradfun video filter + +# Radius (integer) +#gradfun-radius=16 + +# Strength (float) +#gradfun-strength=1.200000 + +[gaussianblur] # Gaussian blur video filter + +# Gaussian's std deviation (float) +#gaussianblur-sigma=2.000000 + +[fps] # FPS conversion video filter + +# Frame rate (string) +#fps-fps= + +[extract] # Extract RGB component video filter + +# RGB component to extract (integer) +#extract-component=16711680 + +[erase] # Erase video filter + +# Image mask (string) +#erase-mask= + +# X coordinate (integer) +#erase-x=0 + +# Y coordinate (integer) +#erase-y=0 + +[deinterlace] # Deinterlacing video filter + +# Streaming deinterlace mode (string) +#sout-deinterlace-mode=blend + +# Phosphor chroma mode for 4:2:0 input (integer) +#sout-deinterlace-phosphor-chroma=2 + +# Phosphor old field dimmer strength (integer) +#sout-deinterlace-phosphor-dimmer=2 + +[croppadd] # Video cropping filter + +# Pixels to crop from top (integer) +#croppadd-croptop=0 + +# Pixels to crop from bottom (integer) +#croppadd-cropbottom=0 + +# Pixels to crop from left (integer) +#croppadd-cropleft=0 + +# Pixels to crop from right (integer) +#croppadd-cropright=0 + +# Pixels to padd to top (integer) +#croppadd-paddtop=0 + +# Pixels to padd to bottom (integer) +#croppadd-paddbottom=0 + +# Pixels to padd to left (integer) +#croppadd-paddleft=0 + +# Pixels to padd to right (integer) +#croppadd-paddright=0 + +[colorthres] # Color threshold filter + +# Color (integer) +#colorthres-color=16711680 + +# Saturation threshold (integer) +#colorthres-saturationthres=20 + +# Similarity threshold (integer) +#colorthres-similaritythres=15 + +[canvas] # Canvas video filter + +# Output width (integer) +#canvas-width=0 + +# Output height (integer) +#canvas-height=0 + +# Output picture aspect ratio (string) +#canvas-aspect= + +# Pad video (boolean) +#canvas-padd=1 + +[bluescreen] # Bluescreen video filter + +# Bluescreen U value (integer) +#bluescreen-u=120 + +# Bluescreen V value (integer) +#bluescreen-v=90 + +# Bluescreen U tolerance (integer) +#bluescreen-ut=17 + +# Bluescreen V tolerance (integer) +#bluescreen-vt=17 + +[blendbench] # Blending benchmark filter + +# Number of time to blend (integer) +#blendbench-loops=1000 + +# Alpha of the blended image (integer) +#blendbench-alpha=128 + +# Image to be blended onto (string) +#blendbench-base-image= + +# Chroma for the base image (string) +#blendbench-base-chroma=I420 + +# Image which will be blended (string) +#blendbench-blend-image= + +# Chroma for the blend image (string) +#blendbench-blend-chroma=YUVA + +[ball] # Ball video filter + +# Ball color (string) +#ball-color=red + +# Ball speed (integer) +#ball-speed=4 + +# Ball size (integer) +#ball-size=10 + +# Gradient threshold (integer) +#ball-gradient-threshold=40 + +# Edge visible (boolean) +#ball-edge-visible=1 + +[antiflicker] # antiflicker video filter + +# Window size (integer) +#antiflicker-window-size=10 + +# Softening value (integer) +#antiflicker-softening-size=10 + +[anaglyph] # Convert 3D picture to anaglyph image video filter + +# Color scheme (string) +#anaglyph-scheme=red-cyan + +[alphamask] # Alpha mask video filter + +# Transparency mask (string) +#alphamask-mask= + +[adjust] # Image properties filter + +# Image contrast (0-2) (float) +#contrast=1.000000 + +# Image brightness (0-2) (float) +#brightness=1.000000 + +# Image hue (-180..180) (float) +#hue=0.000000 + +# Image saturation (0-3) (float) +#saturation=1.000000 + +# Image gamma (0-10) (float) +#gamma=1.000000 + +# Brightness threshold (boolean) +#brightness-threshold=0 + +[swscale] # Video scaling filter + +# Scaling mode (integer) +#swscale-mode=2 + +[sapi] # Speech synthesis for Windows + +# Voice Index (integer) +#sapi-voice=-1 + +[freetype] # Freetype2 font renderer + +# Font (string) +#freetype-font=Arial + +# Monospace Font (string) +#freetype-monofont=Courier New + +# Font size in pixels (integer) +#freetype-fontsize=0 + +# Relative font size (integer) +#freetype-rel-fontsize=0 + +# Text opacity (integer) +#freetype-opacity=255 + +# Text default color (integer) +#freetype-color=16777215 + +# Force bold (boolean) +#freetype-bold=0 + +# Background opacity (integer) +#freetype-background-opacity=0 + +# Background color (integer) +#freetype-background-color=0 + +# Outline opacity (integer) +#freetype-outline-opacity=255 + +# Outline color (integer) +#freetype-outline-color=0 + +# Outline thickness (integer) +#freetype-outline-thickness=4 + +# Shadow opacity (integer) +#freetype-shadow-opacity=128 + +# Shadow color (integer) +#freetype-shadow-color=0 + +# Shadow angle (float) +#freetype-shadow-angle=-45.000000 + +# Shadow distance (float) +#freetype-shadow-distance=0.060000 + +# Use YUVP renderer (boolean) +#freetype-yuvp=0 + +# Text direction (integer) +#freetype-text-direction=0 + +[stream_out_transcode] # Transcode stream output + +# Video encoder (string) +#sout-transcode-venc= + +# Destination video codec (string) +#sout-transcode-vcodec= + +# Video bitrate (integer) +#sout-transcode-vb=0 + +# Video scaling (float) +#sout-transcode-scale=0.000000 + +# Video frame-rate (string) +#sout-transcode-fps= + +# Deinterlace video (boolean) +#sout-transcode-deinterlace=0 + +# Deinterlace module (string) +#sout-transcode-deinterlace-module=deinterlace + +# Video width (integer) +#sout-transcode-width=0 + +# Video height (integer) +#sout-transcode-height=0 + +# Maximum video width (integer) +#sout-transcode-maxwidth=0 + +# Maximum video height (integer) +#sout-transcode-maxheight=0 + +# Video filter (string) +#sout-transcode-vfilter= + +# Audio encoder (string) +#sout-transcode-aenc= + +# Destination audio codec (string) +#sout-transcode-acodec= + +# Audio bitrate (integer) +#sout-transcode-ab=96 + +# Audio language (string) +#sout-transcode-alang= + +# Audio channels (integer) +#sout-transcode-channels=0 + +# Audio sample rate (integer) +#sout-transcode-samplerate=0 + +# Audio filter (string) +#sout-transcode-afilter= + +# Subtitle encoder (string) +#sout-transcode-senc= + +# Destination subtitle codec (string) +#sout-transcode-scodec= + +# Destination subtitle codec (boolean) +#sout-transcode-soverlay=0 + +# Overlays (string) +#sout-transcode-sfilter= + +# Number of threads (integer) +#sout-transcode-threads=0 + +# Picture pool size (integer) +#sout-transcode-pool-size=10 + +# High priority (boolean) +#sout-transcode-high-priority=0 + +[stats] # Writes statistic info about stream + +# Output file (string) +#sout-stats-output= + +# Prefix to show on output line (string) +#sout-stats-prefix=stats + +[stream_out_standard] # Standard stream output + +# Output access method (string) +#sout-standard-access= + +# Output muxer (string) +#sout-standard-mux= + +# Output destination (string) +#sout-standard-dst= + +# Address to bind to (helper setting for dst) (string) +#sout-standard-bind= + +# Filename for stream (helper setting for dst) (string) +#sout-standard-path= + +# SAP announcing (boolean) +#sout-standard-sap=0 + +# Session name (string) +#sout-standard-name= + +# Session description (string) +#sout-standard-description= + +# Session URL (string) +#sout-standard-url= + +# Session email (string) +#sout-standard-email= + +[smem] # Stream output to memory buffer + +# Time Synchronized output (boolean) +#sout-smem-time-sync=1 + +[setid] # Change the id of an elementary stream + +# Elementary Stream ID (integer) +#sout-setid-id=0 + +# New ES ID (integer) +#sout-setid-new-id=0 + +# Elementary Stream ID (integer) +#sout-setlang-id=0 + +# Language (string) +#sout-setlang-lang=eng + +[stream_out_rtp] # RTP stream output + +# Destination (string) +#sout-rtp-dst= + +# SDP (string) +#sout-rtp-sdp= + +# Muxer (string) +#sout-rtp-mux= + +# SAP announcing (boolean) +#sout-rtp-sap=0 + +# Session name (string) +#sout-rtp-name= + +# Session category (string) +#sout-rtp-cat= + +# Session description (string) +#sout-rtp-description= + +# Session URL (string) +#sout-rtp-url= + +# Session email (string) +#sout-rtp-email= + +# Transport protocol (string) +#sout-rtp-proto=udp + +# Port (integer) +#sout-rtp-port=5004 + +# Audio port (integer) +#sout-rtp-port-audio=0 + +# Video port (integer) +#sout-rtp-port-video=0 + +# Hop limit (TTL) (integer) +#sout-rtp-ttl=-1 + +# RTP/RTCP multiplexing (boolean) +#sout-rtp-rtcp-mux=0 + +# Caching value (ms) (integer) +#sout-rtp-caching=300 + +# SRTP key (hexadecimal) (string) +#sout-rtp-key= + +# SRTP salt (hexadecimal) (string) +#sout-rtp-salt= + +# MP4A LATM (boolean) +#sout-rtp-mp4a-latm=0 + +# RTSP session timeout (s) (integer) +#rtsp-timeout=60 + +# Username (string) +#sout-rtsp-user= + +# Password (string) +#sout-rtsp-pwd= + +[record] # Record stream output + +# Destination prefix (string) +#sout-record-dst-prefix= + +[mosaic_bridge] # Mosaic bridge stream output + +# ID (string) +#sout-mosaic-bridge-id=Id + +# Video width (integer) +#sout-mosaic-bridge-width=0 + +# Video height (integer) +#sout-mosaic-bridge-height=0 + +# Sample aspect ratio (string) +#sout-mosaic-bridge-sar=1:1 + +# Image chroma (string) +#sout-mosaic-bridge-chroma= + +# Video filter (string) +#sout-mosaic-bridge-vfilter= + +# Transparency (integer) +#sout-mosaic-bridge-alpha=255 + +# X offset (integer) +#sout-mosaic-bridge-x=-1 + +# Y offset (integer) +#sout-mosaic-bridge-y=-1 + +[es] # Elementary stream output + +# Output access method (string) +#sout-es-access= + +# Output muxer (string) +#sout-es-mux= + +# Output URL (string) +#sout-es-dst= + +# Audio output access method (string) +#sout-es-access-audio= + +# Audio output muxer (string) +#sout-es-mux-audio= + +# Audio output URL (string) +#sout-es-dst-audio= + +# Video output access method (string) +#sout-es-access-video= + +# Video output muxer (string) +#sout-es-mux-video= + +# Video output URL (string) +#sout-es-dst-video= + +[display] # Display stream output + +# Enable audio (boolean) +#sout-display-audio=1 + +# Enable video (boolean) +#sout-display-video=1 + +# Delay (ms) (integer) +#sout-display-delay=100 + +[delay] # Delay a stream + +# Elementary Stream ID (integer) +#sout-delay-id=0 + +# Delay of the ES (ms) (integer) +#sout-delay-delay=0 + +[stream_out_chromecast] # Chromecast stream output + +# ? (string) +#sout-chromecast-ip= + +# ? (integer) +#sout-chromecast-port=8009 + +# ? (boolean) +#sout-chromecast-video=1 + +# HTTP port (integer) +#sout-chromecast-http-port=8010 + +# Performance warning (integer) +#sout-chromecast-show-perf-warning=1 + +# Enable Audio passthrough (boolean) +#sout-chromecast-audio-passthrough=0 + +# Conversion quality (integer) +#sout-chromecast-conversion-quality=1 + +[stream_out_chromaprint] # Chromaprint stream output + +# Duration of the fingerprinting (integer) +#duration=90 + +[bridge] # Bridge stream output + +# ID (integer) +#sout-bridge-out-id=0 + +# Destination bridge-in name (string) +#sout-bridge-out-in-name=default + +# Delay (integer) +#sout-bridge-in-delay=0 + +# ID Offset (integer) +#sout-bridge-in-id-offset=8192 + +# Name of current instance (string) +#sout-bridge-in-name=default + +# Fallback to placeholder stream when out of data (boolean) +#sout-bridge-in-placeholder=0 + +# Placeholder delay (integer) +#sout-bridge-in-placeholder-delay=200 + +# Wait for I frame before toggling placeholder (boolean) +#sout-bridge-in-placeholder-switch-on-iframe=1 + +[prefetch] # Stream prefetch filter + +# Buffer size (integer) +#prefetch-buffer-size=16384 + +# Read size (integer) +#prefetch-read-size=16777216 + +# Seek threshold (integer) +#prefetch-seek-threshold=16384 + +[subsdelay] # Subtitle delay + +# Delay calculation mode (integer) +#subsdelay-mode=1 + +# Calculation factor (float) +#subsdelay-factor=2.000000 + +# Maximum overlapping subtitles (integer) +#subsdelay-overlap=3 + +# Minimum alpha value (integer) +#subsdelay-min-alpha=70 + +# Interval between two disappearances (integer) +#subsdelay-min-stops=1000 + +# Interval between appearance and disappearance (integer) +#subsdelay-min-start-stop=1000 + +# Interval between disappearance and appearance (integer) +#subsdelay-min-stop-start=1000 + +[rss] # RSS and Atom feed display + +# Feed URLs (string) +#rss-urls= + +# X offset (integer) +#rss-x=0 + +# Y offset (integer) +#rss-y=0 + +# Text position (integer) +#rss-position=-1 + +# Opacity (integer) +#rss-opacity=255 + +# Color (integer) +#rss-color=16777215 + +# Font size, pixels (integer) +#rss-size=0 + +# Speed of feeds (integer) +#rss-speed=100000 + +# Max length (integer) +#rss-length=60 + +# Refresh time (integer) +#rss-ttl=1800 + +# Feed images (boolean) +#rss-images=1 + +# Title display mode (integer) +#rss-title=-1 + +[remoteosd] # Remote-OSD over VNC + +# VNC Host (string) +#rmtosd-host=myvdr + +# VNC Port (integer) +#rmtosd-port=20001 + +# VNC Password (string) +#rmtosd-password= + +# VNC poll interval (integer) +#rmtosd-update=1000 + +# VNC polling (boolean) +#rmtosd-vnc-polling=0 + +# Mouse events (boolean) +#rmtosd-mouse-events=0 + +# Key events (boolean) +#rmtosd-key-events=0 + +# Alpha transparency value (default 255) (integer) +#rmtosd-alpha=255 + +[mosaic] # Mosaic video sub source + +# Transparency (integer) +#mosaic-alpha=255 + +# Height (integer) +#mosaic-height=100 + +# Width (integer) +#mosaic-width=100 + +# Mosaic alignment (integer) +#mosaic-align=5 + +# Top left corner X coordinate (integer) +#mosaic-xoffset=0 + +# Top left corner Y coordinate (integer) +#mosaic-yoffset=0 + +# Border width (integer) +#mosaic-borderw=0 + +# Border height (integer) +#mosaic-borderh=0 + +# Positioning method (integer) +#mosaic-position=0 + +# Number of rows (integer) +#mosaic-rows=2 + +# Number of columns (integer) +#mosaic-cols=2 + +# Keep aspect ratio (boolean) +#mosaic-keep-aspect-ratio=0 + +# Keep original size (boolean) +#mosaic-keep-picture=0 + +# Elements order (string) +#mosaic-order= + +# Offsets in order (string) +#mosaic-offsets= + +# Delay (integer) +#mosaic-delay=0 + +[marq] # Marquee display + +# Text (string) +#marq-marquee=VLC + +# Text file (string) +#marq-file= + +# X offset (integer) +#marq-x=0 + +# Y offset (integer) +#marq-y=0 + +# Marquee position (integer) +#marq-position=-1 + +# Opacity (integer) +#marq-opacity=255 + +# Color (integer) +#marq-color=16777215 + +# Font size, pixels (integer) +#marq-size=0 + +# Timeout (integer) +#marq-timeout=0 + +# Refresh period in ms (integer) +#marq-refresh=1000 + +[logo] # Logo sub source + +# Logo filenames (string) +#logo-file= + +# X coordinate (integer) +#logo-x=-1 + +# Y coordinate (integer) +#logo-y=-1 + +# Logo individual image time in ms (integer) +#logo-delay=1000 + +# Logo animation # of loops (integer) +#logo-repeat=-1 + +# Opacity of the logo (integer) +#logo-opacity=255 + +# Logo position (integer) +#logo-position=-1 + +[audiobargraph_v] # Audio Bar Graph Video sub source + +# X coordinate (integer) +#audiobargraph_v-x=0 + +# Y coordinate (integer) +#audiobargraph_v-y=0 + +# Transparency of the bargraph (integer) +#audiobargraph_v-transparency=255 + +# Bargraph position (integer) +#audiobargraph_v-position=-1 + +# Bar width in pixel (integer) +#audiobargraph_v-barWidth=10 + +# Bar Height in pixel (integer) +#audiobargraph_v-barHeight=400 + +[upnp] # Universal Plug'n'Play + +# SAT>IP channel list (string) +#satip-channelist=auto + +# Custom SAT>IP channel list URL (string) +#satip-channellist-url= + +[sap] # Network streams (SAP) + +# SAP multicast address (string) +#sap-addr= + +# SAP timeout (seconds) (integer) +#sap-timeout=1800 + +# Try to parse the announce (boolean) +#sap-parse=1 + +# SAP Strict mode (boolean) +#sap-strict=0 + +[podcast] # Podcasts + +# Podcast URLs list (string) +#podcast-urls= + +[mpegvideo] # MPEG-I/II video packetizer + +# Sync on Intra Frame (boolean) +#packetizer-mpegvideo-sync-iframe=0 + +[mux_ts] # TS muxer (libdvbpsi) + +# Digital TV Standard (string) +#sout-ts-standard=dvb + +# Video PID (integer) +#sout-ts-pid-video=100 + +# Audio PID (integer) +#sout-ts-pid-audio=200 + +# SPU PID (integer) +#sout-ts-pid-spu=300 + +# PMT PID (integer) +#sout-ts-pid-pmt=32 + +# TS ID (integer) +#sout-ts-tsid=0 + +# NET ID (integer) +#sout-ts-netid=0 + +# PMT Program numbers (string) +#sout-ts-program-pmt= + +# Set PID to ID of ES (boolean) +#sout-ts-es-id-pid=0 + +# Mux PMT (requires --sout-ts-es-id-pid) (string) +#sout-ts-muxpmt= + +# SDT Descriptors (requires --sout-ts-es-id-pid) (string) +#sout-ts-sdtdesc= + +# Data alignment (boolean) +#sout-ts-alignment=1 + +# Shaping delay (ms) (integer) +#sout-ts-shaping=200 + +# Use keyframes (boolean) +#sout-ts-use-key-frames=0 + +# PCR interval (ms) (integer) +#sout-ts-pcr=70 + +# Minimum B (deprecated) (integer) +#sout-ts-bmin=0 + +# Maximum B (deprecated) (integer) +#sout-ts-bmax=0 + +# DTS delay (ms) (integer) +#sout-ts-dts-delay=400 + +# Crypt audio (boolean) +#sout-ts-crypt-audio=1 + +# Crypt video (boolean) +#sout-ts-crypt-video=1 + +# CSA Key (string) +#sout-ts-csa-ck= + +# Second CSA Key (string) +#sout-ts-csa2-ck= + +# CSA Key in use (string) +#sout-ts-csa-use=1 + +# Packet size in bytes to encrypt (integer) +#sout-ts-csa-pkt=188 + +[ps] # PS muxer + +# DTS delay (ms) (integer) +#sout-ps-dts-delay=200 + +# PES maximum size (integer) +#sout-ps-pes-max-size=65500 + +[mux_ogg] # Ogg/OGM muxer + +# Index interval (integer) +#sout-ogg-indexintvl=1000 + +# Index size ratio (float) +#sout-ogg-indexratio=1.000000 + +[mp4] # MP4/MOV muxer + +# Create "Fast Start" files (boolean) +#sout-mp4-faststart=1 + +[avi] # AVI muxer + +# Artist (string) +#sout-avi-artist= + +# Date (string) +#sout-avi-date= + +# Genre (string) +#sout-avi-genre= + +# Copyright (string) +#sout-avi-copyright= + +# Comment (string) +#sout-avi-comment= + +# Name (string) +#sout-avi-name= + +# Subject (string) +#sout-avi-subject= + +# Encoder (string) +#sout-avi-encoder=VLC Media Player - 3.0.21 Vetinari + +# Keywords (string) +#sout-avi-keywords= + +[asf] # ASF muxer + +# Title (string) +#sout-asf-title= + +# Author (string) +#sout-asf-author= + +# Copyright (string) +#sout-asf-copyright= + +# Comment (string) +#sout-asf-comment= + +# Rating (string) +#sout-asf-rating= + +# Packet Size (integer) +#sout-asf-packet-size=4096 + +# Bitrate override (integer) +#sout-asf-bitrate-override=0 + +[rtsp] # Legacy RTSP VoD server + +# MUX for RAW RTSP transport (string) +#rtsp-raw-mux=ts + +# Maximum number of connections (integer) +#rtsp-throttle-users=0 + +# Sets the timeout option in the RTSP session string (integer) +#rtsp-session-timeout=5 + +[logger] # File logging + +[gnutls] # GNU TLS transport layer security + +# Use system trust database (boolean) +#gnutls-system-trust=1 + +# Trust directory (string) +#gnutls-dir-trust= + +# TLS cipher priorities (string) +#gnutls-priorities=NORMAL + +[audioscrobbler] # Submission of played songs to last.fm + +# Username (string) +#lastfm-username= + +# Password (string) +#lastfm-password= + +# Scrobbler URL (string) +#scrobbler-url=post.audioscrobbler.com + +[folder] # Folder meta data + +# Album art filename (string) +#album-art-filename= + +[lua] # Lua interpreter + +# Lua interface (string) +#lua-intf=dummy + +# Lua interface configuration (string) +#lua-config= + +# Password (string) +#http-password= + +# Source directory (string) +#http-src= + +# Directory index (boolean) +#http-index=0 + +# TCP command input (string) +#rc-host= + +# CLI input (string) +#cli-host= + +# Host (string) +#telnet-host=localhost + +# Port (integer) +#telnet-port=4212 + +# Password (string) +#telnet-password= + +[file] # File logger + +# Log to file (boolean) +#file-logging=0 + +# Log filename (string) +#logfile= + +# Log format (string) +#logmode=text + +# Verbosity (integer) +#log-verbose=-1 + +[console] # Console logger + +[file] # Secrets are stored on a file without any encryption + +# ? (string) +#keystore-file= + +[skins2] # Skinnable Interface + +# Skin to use (string) +#skins2-last= + +# Config of last used skin (string) +#skins2-config= + +# Systray icon (boolean) +#skins2-systray=1 + +# Show VLC on the taskbar (boolean) +#skins2-taskbar=1 + +# Enable transparency effects (boolean) +#skins2-transparency=0 + +# Use a skinned playlist (boolean) +#skinned-playlist=1 + +# Display video in a skinned window if any (boolean) +#skinned-video=1 + +[qt] # Qt interface + +# Start in minimal view (without menus) (boolean) +#qt-minimal-view=0 + +# Systray icon (boolean) +#qt-system-tray=1 + +# Show notification popup on track change (integer) +#qt-notification=1 + +# Start VLC with only a systray icon (boolean) +#qt-start-minimized=0 + +# Pause the video playback when minimized (boolean) +#qt-pause-minimized=0 + +# Windows opacity between 0.1 and 1 (float) +#qt-opacity=1.000000 + +# Fullscreen controller opacity between 0.1 and 1 (float) +#qt-fs-opacity=0.800000 + +# Resize interface to the native video size (boolean) +#qt-video-autoresize=1 + +# Show playing item name in window title (boolean) +#qt-name-in-title=1 + +# Show a controller in fullscreen mode (boolean) +#qt-fs-controller=1 + +# Save the recently played items in the menu (boolean) +#qt-recentplay=1 + +# List of words separated by | to filter (string) +#qt-recentplay-filter= + +# Continue playback? (integer) +#qt-continue=1 + +# Activate the updates availability notification (boolean) +qt-updates-notif=0 + +# Number of days between two update checks (integer) +#qt-updates-days=3 + +# Ignore keyboard volume buttons. (boolean) +#qt-disable-volume-keys=1 + +# Embed the file browser in open dialog (boolean) +#qt-embedded-open=0 + +# Show advanced preferences over simple ones (boolean) +#qt-advanced-pref=0 + +# Show unimportant error and warnings dialogs (boolean) +#qt-error-dialogs=1 + +# Define the colors of the volume slider (string) +#qt-slider-colours=153;210;153;20;210;20;255;199;15;245;39;29 + +# Ask for network policy at start (boolean) +qt-privacy-ask=0 + +# Define which screen fullscreen goes (integer) +#qt-fullscreen-screennumber=-1 + +# Load extensions on startup (boolean) +#qt-autoload-extensions=1 + +# Display background cone or art (boolean) +#qt-bgcone=1 + +# Expanding background cone or art (boolean) +#qt-bgcone-expands=0 + +# Allow automatic icon changes (boolean) +#qt-icon-change=1 + +# Maximum Volume displayed (integer) +#qt-max-volume=125 + +# Fullscreen controller mouse sensitivity (integer) +#qt-fs-sensitivity=3 + +# When to raise the interface (integer) +#qt-auto-raise=1 + +[vc1] # VC1 video demuxer + +# Frames per Second (float) +#vc1-fps=25.000000 + +[ts] # MPEG Transport Stream demuxer + +# Digital TV Standard (string) +#ts-standard=auto + +# Extra PMT (string) +#ts-extra-pmt= + +# Trust in-stream PCR (boolean) +#ts-trust-pcr=1 + +# Set id of ES to PID (boolean) +#ts-es-id-pid=1 + +# CSA Key (string) +#ts-csa-ck= + +# Second CSA Key (string) +#ts-csa2-ck= + +# Packet size in bytes to decrypt (integer) +#ts-csa-pkt=188 + +# Separate sub-streams (boolean) +#ts-split-es=1 + +# Seek based on percent not time (boolean) +#ts-seek-percent=0 + +# Check packets continuity counter (boolean) +#ts-cc-check=1 + +# Only create ES on program sending data (boolean) +#ts-pmtfix-waitdata=1 + +# Try to generate PAT/PMT if missing (boolean) +#ts-patfix=1 + +# Try to fix too early PCR (or late DTS) (boolean) +#ts-pcr-offsetfix=1 + +[subtitle] # Text subtitle parser + +# Frames per Second (float) +#sub-fps=0.000000 + +# Subtitle delay (integer) +#sub-delay=0 + +# Subtitle format (string) +#sub-type=auto + +# Subtitle description (string) +#sub-description= + +[rawvid] # Raw video demuxer + +# Frames per Second (string) +#rawvid-fps= + +# Width (integer) +#rawvid-width=0 + +# Height (integer) +#rawvid-height=0 + +# Force chroma (Use carefully) (string) +#rawvid-chroma= + +# Aspect ratio (string) +#rawvid-aspect-ratio= + +[rawdv] # DV (Digital Video) demuxer + +# Hurry up (boolean) +#rawdv-hurry-up=0 + +[rawaud] # Raw audio demuxer + +# Audio channels (integer) +#rawaud-channels=2 + +# Audio samplerate (Hz) (integer) +#rawaud-samplerate=48000 + +# FOURCC code of raw input format (string) +#rawaud-fourcc=s16l + +# Forces the audio language (string) +#rawaud-lang=eng + +[ps] # MPEG-PS demuxer + +# Trust MPEG timestamps (boolean) +#ps-trust-timestamps=1 + +[playlist] # Playlist + +# Skip ads (boolean) +#playlist-skip-ads=1 + +# Show shoutcast adult content (boolean) +#shoutcast-show-adult=0 + +[mp4] # MP4 stream demuxer + +# M4A audio only (boolean) +#mp4-m4a-audioonly=0 + +[mod] # MOD demuxer (libmodplug) + +# Noise reduction (boolean) +#mod-noisereduction=1 + +# Reverb (boolean) +#mod-reverb=0 + +# Reverberation level (integer) +#mod-reverb-level=0 + +# Reverberation delay (integer) +#mod-reverb-delay=40 + +# Mega bass (boolean) +#mod-megabass=0 + +# Mega bass level (integer) +#mod-megabass-level=0 + +# Mega bass cutoff (integer) +#mod-megabass-range=10 + +# Surround (boolean) +#mod-surround=0 + +# Surround level (integer) +#mod-surround-level=0 + +# Surround delay (ms) (integer) +#mod-surround-delay=5 + +[mkv] # Matroska stream demuxer + +# Respect ordered chapters (boolean) +#mkv-use-ordered-chapters=1 + +# Chapter codecs (boolean) +#mkv-use-chapter-codec=1 + +# Preload MKV files in the same directory (boolean) +#mkv-preload-local-dir=1 + +# Seek based on percent not time (boolean) +#mkv-seek-percent=0 + +# Dummy Elements (boolean) +#mkv-use-dummy=0 + +# Preload clusters (boolean) +#mkv-preload-clusters=0 + +[mjpeg] # M-JPEG camera demuxer + +# Frames per Second (float) +#mjpeg-fps=0.000000 + +[image] # Image demuxer + +# ES ID (integer) +#image-id=-1 + +# Group (integer) +#image-group=0 + +# Decode (boolean) +#image-decode=1 + +# Forced chroma (string) +#image-chroma= + +# Duration in seconds (float) +#image-duration=10.000000 + +# Frame rate (string) +#image-fps=10/1 + +# Real-time (boolean) +#image-realtime=0 + +[h26x] # H264 video demuxer + +# Frames per Second (float) +#h264-fps=0.000000 + +# Frames per Second (float) +#hevc-fps=0.000000 + +[es] # MPEG-I/II/4 / A52 / DTS / MLP audio + +# Frames per Second (float) +#es-fps=25.000000 + +[diracsys] # Dirac video demuxer + +# Value to adjust dts by (integer) +#dirac-dts-offset=0 + +[demuxdump] # File dumper + +# Dump module (string) +#demuxdump-access=file + +# Dump filename (string) +#demuxdump-file=stream-demux.dump + +# Append to existing file (boolean) +#demuxdump-append=0 + +[avi] # AVI demuxer + +# Force interleaved method (boolean) +#avi-interleaved=0 + +# Force index creation (integer) +#avi-index=0 + +[adaptive] # Unified adaptive streaming for DASH/HLS + +# Adaptive Logic (string) +#adaptive-logic= + +# Maximum device width (integer) +#adaptive-maxwidth=0 + +# Maximum device height (integer) +#adaptive-maxheight=0 + +# Fixed Bandwidth in KiB/s (integer) +#adaptive-bw=250 + +# Use regular HTTP modules (boolean) +#adaptive-use-access=0 + +# Live Playback delay (ms) (integer) +#adaptive-livedelay=15000 + +# Max buffering (ms) (integer) +#adaptive-maxbuffer=30000 + +# Low latency (integer) +#adaptive-lowlatency=-1 + +[d3d9_filters] # Direct3D9 adjust filter + +# Image contrast (0-2) (float) +#contrast=1.000000 + +# Image brightness (0-2) (float) +#brightness=1.000000 + +# Image hue (0-360) (float) +#hue=0.000000 + +# Image saturation (0-3) (float) +#saturation=1.000000 + +# Image gamma (0-10) (float) +#gamma=1.000000 + +# Brightness threshold (boolean) +#brightness-threshold=0 + +[d3d11_filters] # Direct3D11 adjust filter + +# Image contrast (0-2) (float) +#contrast=1.000000 + +# Image brightness (0-2) (float) +#brightness=1.000000 + +# Image hue (0-360) (float) +#hue=0.000000 + +# Image saturation (0-3) (float) +#saturation=1.000000 + +# Image gamma (0-10) (float) +#gamma=1.000000 + +# Brightness threshold (boolean) +#brightness-threshold=0 + +[oldrc] # Remote control interface + +# Show stream position (boolean) +#rc-show-pos=0 + +# Do not open a DOS command box interface (boolean) +#rc-quiet=0 + +# TCP command input (string) +#rc-host= + +[ntservice] # Windows Service interface + +# Install Windows Service (boolean) +#ntservice-install=0 + +# Uninstall Windows Service (boolean) +#ntservice-uninstall=0 + +# Display name of the Service (string) +#ntservice-name=VLC media player + +# Configuration options (string) +#ntservice-options= + +# Extra interface modules (string) +#ntservice-extraintf= + +[netsync] # Network synchronization + +# Network master clock (boolean) +#netsync-master=0 + +# Master server IP address (string) +#netsync-master-ip= + +# UDP timeout (in ms) (integer) +#netsync-timeout=500 + +[gestures] # Mouse gestures control interface + +# Motion threshold (10-100) (integer) +#gestures-threshold=30 + +# Trigger button (string) +#gestures-button=left + +[dummy] # Dummy interface + +# Do not open a DOS command box interface (boolean) +#dummy-quiet=0 + +[zvbi] # VBI and Teletext decoder + +# Teletext page (integer) +#vbi-page=100 + +# Opacity (boolean) +#vbi-opaque=0 + +# Teletext alignment (integer) +#vbi-position=8 + +# Teletext text subtitles (boolean) +#vbi-text=0 + +# Presentation Level (integer) +#vbi-level=3 + +[x264] # H.264/MPEG-4 Part 10/AVC encoder (x264) + +# Maximum GOP size (integer) +#sout-x264-keyint=250 + +# Minimum GOP size (integer) +#sout-x264-min-keyint=25 + +# Use recovery points to close GOPs (boolean) +#sout-x264-opengop=0 + +# Enable compatibility hacks for Blu-ray support (boolean) +#sout-x264-bluray-compat=0 + +# Extra I-frames aggressivity (integer) +#sout-x264-scenecut=40 + +# B-frames between I and P (integer) +#sout-x264-bframes=3 + +# Adaptive B-frame decision (integer) +#sout-x264-b-adapt=1 + +# Influence (bias) B-frames usage (integer) +#sout-x264-b-bias=0 + +# Keep some B-frames as references (string) +#sout-x264-bpyramid=normal + +# CABAC (boolean) +#sout-x264-cabac=1 + +# Use fullrange instead of TV colorrange (boolean) +#sout-x264-fullrange=0 + +# Number of reference frames (integer) +#sout-x264-ref=3 + +# Skip loop filter (boolean) +#sout-x264-nf=0 + +# Loop filter AlphaC0 and Beta parameters alpha:beta (string) +#sout-x264-deblock=0:0 + +# Strength of psychovisual optimization, default is "1.0:0.0" (string) +#sout-x264-psy-rd=1.0:0.0 + +# Use Psy-optimizations (boolean) +#sout-x264-psy=1 + +# H.264 level (string) +#sout-x264-level=0 + +# H.264 profile (string) +#sout-x264-profile=high + +# Interlaced mode (boolean) +#sout-x264-interlaced=0 + +# Frame packing (integer) +#sout-x264-frame-packing=-1 + +# Force number of slices per frame (integer) +#sout-x264-slices=0 + +# Limit the size of each slice in bytes (integer) +#sout-x264-slice-max-size=0 + +# Limit the size of each slice in macroblocks (integer) +#sout-x264-slice-max-mbs=0 + +# HRD-timing information (string) +#sout-x264-hrd=none + +# Set QP (integer) +#sout-x264-qp=-1 + +# Quality-based VBR (integer) +#sout-x264-crf=23 + +# Min QP (integer) +#sout-x264-qpmin=10 + +# Max QP (integer) +#sout-x264-qpmax=51 + +# Max QP step (integer) +#sout-x264-qpstep=4 + +# Average bitrate tolerance (float) +#sout-x264-ratetol=1.000000 + +# Max local bitrate (integer) +#sout-x264-vbv-maxrate=0 + +# VBV buffer (integer) +#sout-x264-vbv-bufsize=0 + +# Initial VBV buffer occupancy (float) +#sout-x264-vbv-init=0.900000 + +# QP factor between I and P (float) +#sout-x264-ipratio=1.400000 + +# QP factor between P and B (float) +#sout-x264-pbratio=1.300000 + +# QP difference between chroma and luma (integer) +#sout-x264-chroma-qp-offset=0 + +# Multipass ratecontrol (integer) +#sout-x264-pass=0 + +# QP curve compression (float) +#sout-x264-qcomp=0.600000 + +# Reduce fluctuations in QP (float) +#sout-x264-cplxblur=20.000000 + +# Reduce fluctuations in QP (float) +#sout-x264-qblur=0.500000 + +# How AQ distributes bits (integer) +#sout-x264-aq-mode=1 + +# Strength of AQ (float) +#sout-x264-aq-strength=1.000000 + +# Partitions to consider (string) +#sout-x264-partitions=normal + +# Direct MV prediction mode (string) +#sout-x264-direct=spatial + +# Direct prediction size (integer) +#sout-x264-direct-8x8=1 + +# Weighted prediction for B-frames (boolean) +#sout-x264-weightb=1 + +# Weighted prediction for P-frames (integer) +#sout-x264-weightp=2 + +# Integer pixel motion estimation method (string) +#sout-x264-me=hex + +# Maximum motion vector search range (integer) +#sout-x264-merange=16 + +# Maximum motion vector length (integer) +#sout-x264-mvrange=-1 + +# Minimum buffer space between threads (integer) +#sout-x264-mvrange-thread=-1 + +# Subpixel motion estimation and partition decision quality (integer) +#sout-x264-subme=7 + +# Decide references on a per partition basis (boolean) +#sout-x264-mixed-refs=1 + +# Chroma in motion estimation (boolean) +#sout-x264-chroma-me=1 + +# Adaptive spatial transform size (boolean) +#sout-x264-8x8dct=1 + +# Trellis RD quantization (integer) +#sout-x264-trellis=1 + +# Framecount to use on frametype lookahead (integer) +#sout-x264-lookahead=40 + +# Use Periodic Intra Refresh (boolean) +#sout-x264-intra-refresh=0 + +# Use mb-tree ratecontrol (boolean) +#sout-x264-mbtree=1 + +# Early SKIP detection on P-frames (boolean) +#sout-x264-fast-pskip=1 + +# Coefficient thresholding on P-frames (boolean) +#sout-x264-dct-decimate=1 + +# Noise reduction (integer) +#sout-x264-nr=0 + +# Inter luma quantization deadzone (integer) +#sout-x264-deadzone-inter=21 + +# Intra luma quantization deadzone (integer) +#sout-x264-deadzone-intra=11 + +# Non-deterministic optimizations when threaded (boolean) +#sout-x264-non-deterministic=0 + +# CPU optimizations (boolean) +#sout-x264-asm=1 + +# PSNR computation (boolean) +#sout-x264-psnr=0 + +# SSIM computation (boolean) +#sout-x264-ssim=0 + +# Quiet mode (boolean) +#sout-x264-quiet=0 + +# SPS and PPS id numbers (integer) +#sout-x264-sps-id=0 + +# Access unit delimiters (boolean) +#sout-x264-aud=0 + +# Statistics (boolean) +#sout-x264-verbose=0 + +# Filename for 2 pass stats file (string) +#sout-x264-stats=x264_2pass.log + +# Default preset setting used (string) +#sout-x264-preset= + +# Default tune setting used (string) +#sout-x264-tune= + +# x264 advanced options (string) +#sout-x264-options= + +[x26410b] # H.264/MPEG-4 Part 10/AVC encoder (x264 10-bit) + +# Maximum GOP size (integer) +#sout-x26410b-keyint=250 + +# Minimum GOP size (integer) +#sout-x26410b-min-keyint=25 + +# Use recovery points to close GOPs (boolean) +#sout-x26410b-opengop=0 + +# Enable compatibility hacks for Blu-ray support (boolean) +#sout-x26410b-bluray-compat=0 + +# Extra I-frames aggressivity (integer) +#sout-x26410b-scenecut=40 + +# B-frames between I and P (integer) +#sout-x26410b-bframes=3 + +# Adaptive B-frame decision (integer) +#sout-x26410b-b-adapt=1 + +# Influence (bias) B-frames usage (integer) +#sout-x26410b-b-bias=0 + +# Keep some B-frames as references (string) +#sout-x26410b-bpyramid=normal + +# CABAC (boolean) +#sout-x26410b-cabac=1 + +# Use fullrange instead of TV colorrange (boolean) +#sout-x26410b-fullrange=0 + +# Number of reference frames (integer) +#sout-x26410b-ref=3 + +# Skip loop filter (boolean) +#sout-x26410b-nf=0 + +# Loop filter AlphaC0 and Beta parameters alpha:beta (string) +#sout-x26410b-deblock=0:0 + +# Strength of psychovisual optimization, default is "1.0:0.0" (string) +#sout-x26410b-psy-rd=1.0:0.0 + +# Use Psy-optimizations (boolean) +#sout-x26410b-psy=1 + +# H.264 level (string) +#sout-x26410b-level=0 + +# H.264 profile (string) +#sout-x26410b-profile=high + +# Interlaced mode (boolean) +#sout-x26410b-interlaced=0 + +# Frame packing (integer) +#sout-x26410b-frame-packing=-1 + +# Force number of slices per frame (integer) +#sout-x26410b-slices=0 + +# Limit the size of each slice in bytes (integer) +#sout-x26410b-slice-max-size=0 + +# Limit the size of each slice in macroblocks (integer) +#sout-x26410b-slice-max-mbs=0 + +# HRD-timing information (string) +#sout-x26410b-hrd=none + +# Set QP (integer) +#sout-x26410b-qp=-1 + +# Quality-based VBR (integer) +#sout-x26410b-crf=23 + +# Min QP (integer) +#sout-x26410b-qpmin=10 + +# Max QP (integer) +#sout-x26410b-qpmax=51 + +# Max QP step (integer) +#sout-x26410b-qpstep=4 + +# Average bitrate tolerance (float) +#sout-x26410b-ratetol=1.000000 + +# Max local bitrate (integer) +#sout-x26410b-vbv-maxrate=0 + +# VBV buffer (integer) +#sout-x26410b-vbv-bufsize=0 + +# Initial VBV buffer occupancy (float) +#sout-x26410b-vbv-init=0.900000 + +# QP factor between I and P (float) +#sout-x26410b-ipratio=1.400000 + +# QP factor between P and B (float) +#sout-x26410b-pbratio=1.300000 + +# QP difference between chroma and luma (integer) +#sout-x26410b-chroma-qp-offset=0 + +# Multipass ratecontrol (integer) +#sout-x26410b-pass=0 + +# QP curve compression (float) +#sout-x26410b-qcomp=0.600000 + +# Reduce fluctuations in QP (float) +#sout-x26410b-cplxblur=20.000000 + +# Reduce fluctuations in QP (float) +#sout-x26410b-qblur=0.500000 + +# How AQ distributes bits (integer) +#sout-x26410b-aq-mode=1 + +# Strength of AQ (float) +#sout-x26410b-aq-strength=1.000000 + +# Partitions to consider (string) +#sout-x26410b-partitions=normal + +# Direct MV prediction mode (string) +#sout-x26410b-direct=spatial + +# Direct prediction size (integer) +#sout-x26410b-direct-8x8=1 + +# Weighted prediction for B-frames (boolean) +#sout-x26410b-weightb=1 + +# Weighted prediction for P-frames (integer) +#sout-x26410b-weightp=2 + +# Integer pixel motion estimation method (string) +#sout-x26410b-me=hex + +# Maximum motion vector search range (integer) +#sout-x26410b-merange=16 + +# Maximum motion vector length (integer) +#sout-x26410b-mvrange=-1 + +# Minimum buffer space between threads (integer) +#sout-x26410b-mvrange-thread=-1 + +# Subpixel motion estimation and partition decision quality (integer) +#sout-x26410b-subme=7 + +# Decide references on a per partition basis (boolean) +#sout-x26410b-mixed-refs=1 + +# Chroma in motion estimation (boolean) +#sout-x26410b-chroma-me=1 + +# Adaptive spatial transform size (boolean) +#sout-x26410b-8x8dct=1 + +# Trellis RD quantization (integer) +#sout-x26410b-trellis=1 + +# Framecount to use on frametype lookahead (integer) +#sout-x26410b-lookahead=40 + +# Use Periodic Intra Refresh (boolean) +#sout-x26410b-intra-refresh=0 + +# Use mb-tree ratecontrol (boolean) +#sout-x26410b-mbtree=1 + +# Early SKIP detection on P-frames (boolean) +#sout-x26410b-fast-pskip=1 + +# Coefficient thresholding on P-frames (boolean) +#sout-x26410b-dct-decimate=1 + +# Noise reduction (integer) +#sout-x26410b-nr=0 + +# Inter luma quantization deadzone (integer) +#sout-x26410b-deadzone-inter=21 + +# Intra luma quantization deadzone (integer) +#sout-x26410b-deadzone-intra=11 + +# Non-deterministic optimizations when threaded (boolean) +#sout-x26410b-non-deterministic=0 + +# CPU optimizations (boolean) +#sout-x26410b-asm=1 + +# PSNR computation (boolean) +#sout-x26410b-psnr=0 + +# SSIM computation (boolean) +#sout-x26410b-ssim=0 + +# Quiet mode (boolean) +#sout-x26410b-quiet=0 + +# SPS and PPS id numbers (integer) +#sout-x26410b-sps-id=0 + +# Access unit delimiters (boolean) +#sout-x26410b-aud=0 + +# Statistics (boolean) +#sout-x26410b-verbose=0 + +# Filename for 2 pass stats file (string) +#sout-x26410b-stats=x264_2pass.log + +# Default preset setting used (string) +#sout-x26410b-preset= + +# Default tune setting used (string) +#sout-x26410b-tune= + +# x264 advanced options (string) +#sout-x26410b-options= + +[vpx] # WebM video decoder + +# Quality mode (integer) +#sout-vpx-quality-mode=1000000 + +[vorbis] # Vorbis audio decoder + +# Encoding quality (integer) +#sout-vorbis-quality=0 + +# Maximum encoding bitrate (integer) +#sout-vorbis-max-bitrate=0 + +# Minimum encoding bitrate (integer) +#sout-vorbis-min-bitrate=0 + +# CBR encoding (boolean) +#sout-vorbis-cbr=0 + +[twolame] # Libtwolame audio encoder + +# Encoding quality (float) +#sout-twolame-quality=0.000000 + +# Stereo mode (integer) +#sout-twolame-mode=0 + +# VBR mode (boolean) +#sout-twolame-vbr=0 + +# Psycho-acoustic model (integer) +#sout-twolame-psy=3 + +[ttml] # TTML subtitles decoder + +# Subtitle justification (integer) +#ttml-align=0 + +[theora] # Theora video decoder + +# Post processing quality (integer) +#theora-postproc=-1 + +# Encoding quality (integer) +#sout-theora-quality=2 + +[svcdsub] # Philips OGT (SVCD subtitle) decoder + +[subsusf] # USF subtitles decoder + +# Formatted Subtitles (boolean) +#subsdec-formatted=1 + +[subsdec] # Text subtitle decoder + +# Subtitle justification (integer) +#subsdec-align=-1 + +# Subtitle text encoding (string) +#subsdec-encoding= + +# UTF-8 subtitle autodetection (boolean) +#subsdec-autodetect-utf8=1 + +[spudec] # DVD subtitles decoder + +# Disable DVD subtitle transparency (boolean) +#dvdsub-transparency=0 + +[speex] # Speex audio decoder + +# Mode (integer) +#sout-speex-mode=0 + +# Encoding complexity (integer) +#sout-speex-complexity=3 + +# CBR encoding (boolean) +#sout-speex-cbr=0 + +# Encoding quality (float) +#sout-speex-quality=8.000000 + +# Maximal bitrate (integer) +#sout-speex-max-bitrate=0 + +# Voice activity detection (boolean) +#sout-speex-vad=1 + +# Discontinuous Transmission (boolean) +#sout-speex-dtx=0 + +[schroedinger] # Dirac video decoder using libschroedinger + +# Rate control method (string) +#sout-schro-rate-control= + +# Constant quality factor (float) +#sout-schro-quality=-1.000000 + +# Noise Threshold (float) +#sout-schro-noise-threshold=-1.000000 + +# CBR bitrate (kbps) (integer) +#sout-schro-bitrate=-1 + +# Maximum bitrate (kbps) (integer) +#sout-schro-max-bitrate=-1 + +# Minimum bitrate (kbps) (integer) +#sout-schro-min-bitrate=-1 + +# GOP structure (string) +#sout-schro-gop-structure= + +# GOP length (integer) +#sout-schro-gop-length=-1 + +# Chroma format (string) +#sout-schro-chroma-fmt=420 + +# Picture coding mode (string) +#sout-schro-coding-mode=auto + +# Motion Vector precision (string) +#sout-schro-mv-precision= + +# Size of motion compensation blocks (string) +#sout-schro-motion-block-size= + +# Overlap of motion compensation blocks (string) +#sout-schro-motion-block-overlap= + +# Three component motion estimation (integer) +#sout-schro-me-combined=-1 + +# Enable hierarchical Motion Estimation (integer) +#sout-schro-enable-hierarchical-me=-1 + +# Number of levels of downsampling (integer) +#sout-schro-downsample-levels=-1 + +# Enable Global Motion Estimation (integer) +#sout-schro-enable-global-me=-1 + +# Enable Phase Correlation Estimation (integer) +#sout-schro-enable-phasecorr-me=-1 + +# Intra picture DWT filter (string) +#sout-schro-intra-wavelet= + +# Inter picture DWT filter (string) +#sout-schro-inter-wavelet= + +# Number of DWT iterations (integer) +#sout-schro-transform-depth=-1 + +# Enable multiple quantizers (integer) +#sout-schro-enable-multiquant=-1 + +# Size of code blocks in each subband (string) +#sout-schro-codeblock-size= + +# Prefilter (string) +#sout-schro-filtering= + +# Amount of prefiltering (float) +#sout-schro-filter-value=-1.000000 + +# Enable Scene Change Detection (integer) +#sout-schro-enable-scd=-1 + +# perceptual weighting method (string) +#sout-schro-perceptual-weighting= + +# perceptual distance (float) +#sout-schro-perceptual-distance=-1.000000 + +# Disable arithmetic coding (integer) +#sout-schro-enable-noarith=-1 + +# Horizontal slices per frame (integer) +#sout-schro-horiz-slices=-1 + +# Vertical slices per frame (integer) +#sout-schro-vert-slices=-1 + +# Force Profile (string) +#sout-schro-force-profile= + +[qsv] # Intel QuickSync Video encoder for MPEG4-Part10/MPEG2 (aka H.264/H.262) + +# Enable software mode (boolean) +#sout-qsv-software=0 + +# Codec Profile (string) +#sout-qsv-h264-profile=unspecified + +# Codec Level (string) +#sout-qsv-h264-level=unspecified + +# Codec Profile (string) +#sout-qsv-mpeg2-profile=unspecified + +# Codec Level (string) +#sout-qsv-mpeg2-level=unspecified + +# Group of Picture size (integer) +#sout-qsv-gop-size=32 + +# Group of Picture Reference Distance (integer) +#sout-qsv-gop-refdist=4 + +# IDR interval (integer) +#sout-qsv-idr-interval=0 + +# Target Usage (string) +#sout-qsv-target-usage=quality + +# Rate Control Method (string) +#sout-qsv-rc-method=vbr + +# Quantization parameter (integer) +#sout-qsv-qp=0 + +# Quantization parameter for I-frames (integer) +#sout-qsv-qpi=0 + +# Quantization parameter for P-frames (integer) +#sout-qsv-qpp=0 + +# Quantization parameter for B-frames (integer) +#sout-qsv-qpb=0 + +# Maximum Bitrate (integer) +#sout-qsv-bitrate-max=0 + +# Accuracy of RateControl (integer) +#sout-qsv-accuracy=0 + +# Convergence time of 'avbr' RateControl (integer) +#sout-qsv-convergence=0 + +# Number of slices per frame (integer) +#sout-qsv-num-slice=0 + +# Number of reference frames (integer) +#sout-qsv-num-ref-frame=0 + +# Number of parallel operations (integer) +#sout-qsv-async-depth=4 + +[libass] # Subtitle renderers using libass + +# Additional fonts directory (string) +#ssa-fontsdir= + +[kate] # Kate overlay decoder + +# Formatted Subtitles (boolean) +#kate-formatted=1 + +[jpeg] # JPEG image decoder + +# Quality level (integer) +#sout-jpeg-quality=95 + +[fluidsynth] # FluidSynth MIDI synthesizer + +# SoundFont file (string) +#soundfont= + +# Chorus (boolean) +#synth-chorus=1 + +# Synthesis gain (float) +#synth-gain=0.500000 + +# Polyphony (integer) +#synth-polyphony=256 + +# Reverb (boolean) +#synth-reverb=1 + +# Sample rate (integer) +#synth-sample-rate=44100 + +[dvbsub] # DVB subtitles decoder + +# Subpicture position (integer) +#dvbsub-position=8 + +# Decoding X coordinate (integer) +#dvbsub-x=-1 + +# Decoding Y coordinate (integer) +#dvbsub-y=-1 + +# Encoding X coordinate (integer) +#sout-dvbsub-x=-1 + +# Encoding Y coordinate (integer) +#sout-dvbsub-y=-1 + +[ddummy] # Dummy decoder + +# Save raw codec data (boolean) +#dummy-save-es=0 + +[dca] # DTS Coherent Acoustics audio decoder + +# DTS dynamic range compression (boolean) +#dts-dynrng=1 + +[dav1d] # Dav1d video decoder + +# Frames Threads (integer) +#dav1d-thread-frames=0 + +[cc] # Closed Captions decoder + +# Opacity (boolean) +#cc-opaque=1 + +[avcodec] # FFmpeg audio/video decoder + +# Direct rendering (boolean) +#avcodec-dr=1 + +# Show corrupted frames (boolean) +#avcodec-corrupted=1 + +# Error resilience (integer) +#avcodec-error-resilience=1 + +# Workaround bugs (integer) +#avcodec-workaround-bugs=1 + +# Hurry up (boolean) +#avcodec-hurry-up=1 + +# Skip frame (default=0) (integer) +#avcodec-skip-frame=0 + +# Skip idct (default=0) (integer) +#avcodec-skip-idct=0 + +# Allow speed tricks (boolean) +#avcodec-fast=0 + +# Skip the loop filter for H.264 decoding (integer) +#avcodec-skiploopfilter=0 + +# Debug mask (integer) +#avcodec-debug=0 + +# Codec name (string) +#avcodec-codec= + +# Hardware decoding (string) +#avcodec-hw=any + +# Threads (integer) +#avcodec-threads=0 + +# Advanced options (string) +#avcodec-options= + +# Codec name (string) +#sout-avcodec-codec= + +# Quality level (string) +#sout-avcodec-hq=rd + +# Ratio of key frames (integer) +#sout-avcodec-keyint=0 + +# Ratio of B frames (integer) +#sout-avcodec-bframes=0 + +# Hurry up (boolean) +#sout-avcodec-hurry-up=0 + +# Interlaced encoding (boolean) +#sout-avcodec-interlace=0 + +# Interlaced motion estimation (boolean) +#sout-avcodec-interlace-me=1 + +# Video bitrate tolerance (integer) +#sout-avcodec-vt=0 + +# Pre-motion estimation (boolean) +#sout-avcodec-pre-me=0 + +# Rate control buffer size (integer) +#sout-avcodec-rc-buffer-size=0 + +# Rate control buffer aggressiveness (float) +#sout-avcodec-rc-buffer-aggressivity=1.000000 + +# I quantization factor (float) +#sout-avcodec-i-quant-factor=0.000000 + +# Noise reduction (integer) +#sout-avcodec-noise-reduction=0 + +# MPEG4 quantization matrix (boolean) +#sout-avcodec-mpeg4-matrix=0 + +# Minimum video quantizer scale (integer) +#sout-avcodec-qmin=0 + +# Maximum video quantizer scale (integer) +#sout-avcodec-qmax=0 + +# Trellis quantization (boolean) +#sout-avcodec-trellis=0 + +# Fixed quantizer scale (float) +#sout-avcodec-qscale=3.000000 + +# Strict standard compliance (integer) +#sout-avcodec-strict=0 + +# Luminance masking (float) +#sout-avcodec-lumi-masking=0.000000 + +# Darkness masking (float) +#sout-avcodec-dark-masking=0.000000 + +# Motion masking (float) +#sout-avcodec-p-masking=0.000000 + +# Border masking (float) +#sout-avcodec-border-masking=0.000000 + +# Luminance elimination (integer) +#sout-avcodec-luma-elim-threshold=0 + +# Chrominance elimination (integer) +#sout-avcodec-chroma-elim-threshold=0 + +# Specify AAC audio profile to use (string) +#sout-avcodec-aac-profile=low + +# Advanced options (string) +#sout-avcodec-options= + +# Format name (string) +#avformat-format= + +# Advanced options (string) +#avformat-options= + +# Avformat mux (string) +#sout-avformat-mux= + +# Advanced options (string) +#sout-avformat-options= + +# Reset timestamps (boolean) +#sout-avformat-reset-ts=1 + +# Advanced options (string) +#avio-options= + +# Advanced options (string) +#sout-avio-options= + +[aribsub] # ARIB subtitles decoder + +# Ignore ruby (furigana) (boolean) +#aribsub-ignore-ruby=0 + +# Use Core Text renderer (boolean) +#aribsub-use-coretext=0 + +[a52] # ATSC A/52 (AC-3) audio decoder + +# A/52 dynamic range compression (boolean) +#a52-dynrng=1 + +[waveout] # WaveOut audio output + +# Select Audio Device (string) +#waveout-audio-device=wavemapper + +# Audio volume (float) +#waveout-volume=1.000000 + +# Use float32 output (boolean) +#waveout-float32=1 + +# Audio output channels (integer) +#waveout-audio-channels=9 + +[mmdevice] # Windows Multimedia Device output + +# Output back-end (string) +#mmdevice-backend=any + +# HDMI/SPDIF audio passthrough (integer) +#mmdevice-passthrough=0 + +# Output device (string) +#mmdevice-audio-device= + +# Audio volume (float) +#mmdevice-volume=1.000000 + +[directsound] # DirectX audio output + +# Output device (string) +#directx-audio-device= + +# Use float32 output (boolean) +#directx-audio-float32=1 + +# Speaker configuration (string) +#directx-audio-speaker=Windows default + +# Audio volume (float) +#directx-volume=1.000000 + +[amem] # Audio memory output + +# Sample format (string) +#amem-format=S16N + +# Sample rate (integer) +#amem-rate=44100 + +# Channels count (integer) +#amem-channels=2 + +[afile] # File audio output + +# Output file (string) +#audiofile-file=audiofile.wav + +# Output format (string) +#audiofile-format=s16 + +# Number of output channels (integer) +#audiofile-channels=0 + +# Add WAVE header (boolean) +#audiofile-wav=1 + +[stereo_widen] # Simple stereo widening effect + +# Delay time (float) +#stereowiden-delay=20.000000 + +# Feedback gain (float) +#stereowiden-feedback=0.300000 + +# Crossfeed (float) +#stereowiden-crossfeed=0.300000 + +# Dry mix (float) +#stereowiden-dry-mix=0.800000 + +[speex_resampler] # Speex resampler + +# Resampling quality (integer) +#speex-resampler-quality=4 + +[spatializer] # Audio Spatializer + +# Room size (float) +#spatializer-roomsize=0.850000 + +# Room width (float) +#spatializer-width=1.000000 + +# Wet (float) +#spatializer-wet=0.400000 + +# Dry (float) +#spatializer-dry=0.500000 + +# Damp (float) +#spatializer-damp=0.500000 + +[spatialaudio] # Ambisonics renderer and binauralizer + +# Headphones mode (binaural) (boolean) +#spatialaudio-headphones=0 + +# HRTF file for the binauralization (string) +#hrtf-file= + +[scaletempo] # Audio tempo scaler synched with rate + +# Stride Length (integer) +#scaletempo-stride=30 + +# Overlap Length (float) +#scaletempo-overlap=0.200000 + +# Search Length (integer) +#scaletempo-search=14 + +[scaletempo_pitch] # Pitch Shifter + +# Stride Length (integer) +#scaletempo-stride=30 + +# Overlap Length (float) +#scaletempo-overlap=0.200000 + +# Search Length (integer) +#scaletempo-search=14 + +# Pitch Shift (float) +#pitch-shift=0.000000 + +[samplerate] # Secret Rabbit Code (libsamplerate) resampler + +# Sample rate converter type (integer) +#src-converter-type=2 + +[remap] # Audio channel remapper + +# Left (integer) +#aout-remap-channel-left=0 + +# Center (integer) +#aout-remap-channel-center=1 + +# Right (integer) +#aout-remap-channel-right=2 + +# Rear left (integer) +#aout-remap-channel-rearleft=3 + +# Rear center (integer) +#aout-remap-channel-rearcenter=4 + +# Rear right (integer) +#aout-remap-channel-rearright=5 + +# Side left (integer) +#aout-remap-channel-middleleft=6 + +# Side right (integer) +#aout-remap-channel-middleright=7 + +# Low-frequency effects (integer) +#aout-remap-channel-lfe=8 + +# Normalize channels (boolean) +#aout-remap-normalize=1 + +[param_eq] # Parametric Equalizer + +# Low freq (Hz) (float) +#param-eq-lowf=100.000000 + +# Low freq gain (dB) (float) +#param-eq-lowgain=0.000000 + +# High freq (Hz) (float) +#param-eq-highf=10000.000000 + +# High freq gain (dB) (float) +#param-eq-highgain=0.000000 + +# Freq 1 (Hz) (float) +#param-eq-f1=300.000000 + +# Freq 1 gain (dB) (float) +#param-eq-gain1=0.000000 + +# Freq 1 Q (float) +#param-eq-q1=3.000000 + +# Freq 2 (Hz) (float) +#param-eq-f2=1000.000000 + +# Freq 2 gain (dB) (float) +#param-eq-gain2=0.000000 + +# Freq 2 Q (float) +#param-eq-q2=3.000000 + +# Freq 3 (Hz) (float) +#param-eq-f3=3000.000000 + +# Freq 3 gain (dB) (float) +#param-eq-gain3=0.000000 + +# Freq 3 Q (float) +#param-eq-q3=3.000000 + +[normvol] # Volume normalizer + +# Number of audio buffers (integer) +#norm-buff-size=20 + +# Maximal volume level (float) +#norm-max-level=2.000000 + +[mono] # Stereo to mono downmixer + +# Use downmix algorithm (boolean) +#sout-mono-downmix=1 + +# Select channel to keep (integer) +#sout-mono-channel=-1 + +[headphone] # Headphone virtual spatialization effect + +# Characteristic dimension (integer) +#headphone-dim=10 + +# Compensate delay (boolean) +#headphone-compensate=0 + +# No decoding of Dolby Surround (boolean) +#headphone-dolby=0 + +[gain] # Gain control filter + +# Gain multiplier (float) +#gain-value=1.000000 + +[equalizer] # Equalizer with 10 bands + +# Equalizer preset (string) +#equalizer-preset=flat + +# Bands gain (string) +#equalizer-bands= + +# Two pass (boolean) +#equalizer-2pass=0 + +# Use VLC frequency bands (boolean) +#equalizer-vlcfreqs=1 + +# Global gain (float) +#equalizer-preamp=12.000000 + +[compressor] # Dynamic range compressor + +# RMS/peak (float) +#compressor-rms-peak=0.200000 + +# Attack time (float) +#compressor-attack=25.000000 + +# Release time (float) +#compressor-release=100.000000 + +# Threshold level (float) +#compressor-threshold=-11.000000 + +# Ratio (float) +#compressor-ratio=4.000000 + +# Knee radius (float) +#compressor-knee=5.000000 + +# Makeup gain (float) +#compressor-makeup-gain=7.000000 + +[chorus_flanger] # Sound Delay + +# Delay time (float) +#delay-time=20.000000 + +# Sweep Depth (float) +#sweep-depth=6.000000 + +# Sweep Rate (float) +#sweep-rate=6.000000 + +# Feedback gain (float) +#feedback-gain=0.500000 + +# Wet mix (float) +#wet-mix=0.400000 + +# Dry Mix (float) +#dry-mix=0.400000 + +[audiobargraph_a] # Audio part of the BarGraph function + +# Defines if BarGraph information should be sent (integer) +#audiobargraph_a-bargraph=1 + +# Sends the barGraph information every n audio packets (integer) +#audiobargraph_a-bargraph_repetition=4 + +# Defines if silence alarm information should be sent (integer) +#audiobargraph_a-silence=1 + +# Time window to use in ms (integer) +#audiobargraph_a-time_window=5000 + +# Minimum Audio level to raise the alarm (float) +#audiobargraph_a-alarm_threshold=0.020000 + +# Time between two alarm messages in ms (integer) +#audiobargraph_a-repetition_time=2000 + +[udp] # UDP stream output + +# Caching value (ms) (integer) +#sout-udp-caching=300 + +# Group packets (integer) +#sout-udp-group=1 + +[access_output_srt] # SRT stream output + +# Return poll wait after timeout milliseconds (-1 = infinite) (integer) +#poll-timeout=-1 + +# SRT latency (ms) (integer) +#latency=120 + +# Password for stream encryption (string) +#passphrase= + +# SRT maximum payload size (bytes) (integer) +#payload-size=1316 + +# SRT maximum bandwidth ceiling (bytes) (integer) +#bandwidth-overhead-limit=25 + +# Crypto key length in bytes (integer) +#key-length=16 + +# SRT Stream ID (string) +#streamid= + +[access_output_shout] # IceCAST output + +# Stream name (string) +#sout-shout-name=VLC media player - Live stream + +# Stream description (string) +#sout-shout-description=Live stream from VLC media player + +# Stream MP3 (boolean) +#sout-shout-mp3=0 + +# Genre description (string) +#sout-shout-genre=Alternative + +# URL description (string) +#sout-shout-url=http://www.videolan.org/vlc + +# Bitrate (string) +#sout-shout-bitrate= + +# Samplerate (string) +#sout-shout-samplerate= + +# Number of channels (string) +#sout-shout-channels= + +# Ogg Vorbis Quality (string) +#sout-shout-quality= + +# Stream public (boolean) +#sout-shout-public=0 + +[access_output_rist] # RIST stream output + +# RIST target packet size (bytes) (integer) +#sout-rist-packet-size=1328 + +# RIST data output caching size (ms) (integer) +#sout-rist-caching=50 + +# RIST retry-buffer queue size (ms) (integer) +#sout-rist-buffer-size=0 + +# SSRC used in RTP output (default is random, i.e. 0) (integer) +#sout-rist-ssrc=0 + +# Stream name (string) +#sout-rist-stream-name= + +[access_output_livehttp] # HTTP Live streaming output + +# Segment length (integer) +#sout-livehttp-seglen=10 + +# Number of segments (integer) +#sout-livehttp-numsegs=0 + +# Number of first segment (integer) +#sout-livehttp-initial-segment-number=1 + +# Split segments anywhere (boolean) +#sout-livehttp-splitanywhere=0 + +# Delete segments (boolean) +#sout-livehttp-delsegs=1 + +# Use muxers rate control mechanism (boolean) +#sout-livehttp-ratecontrol=0 + +# Allow cache (boolean) +#sout-livehttp-caching=0 + +# Use randomized IV for encryption (boolean) +#sout-livehttp-generate-iv=0 + +# Index file (string) +#sout-livehttp-index= + +# Full URL to put in index file (string) +#sout-livehttp-index-url= + +# AES key URI to place in playlist (string) +#sout-livehttp-key-uri= + +# AES key file (string) +#sout-livehttp-key-file= + +# File where vlc reads key-uri and keyfile-location (string) +#sout-livehttp-key-loadfile= + +[http] # HTTP stream output + +# Username (string) +#sout-http-user= + +# Password (string) +#sout-http-pwd= + +# Mime (string) +#sout-http-mime= + +# Metacube (boolean) +#sout-http-metacube=0 + +[file] # File stream output + +# Overwrite existing file (boolean) +#sout-file-overwrite=1 + +# Append to file (boolean) +#sout-file-append=0 + +# Format time and date (boolean) +#sout-file-format=0 + +[vnc] # VNC client access + +# Username (string) +#rfb-user= + +# Password (string) +#rfb-password= + +# X.509 Certificate Authority (string) +#rfb-x509-ca= + +# X.509 Certificate Revocation List (string) +#rfb-x509-crl= + +# X.509 Client certificate (string) +#rfb-x509-client-cert= + +# X.509 Client private key (string) +#rfb-x509-client-key= + +# Frame rate (float) +#rfb-fps=5.000000 + +# Frame buffer depth (string) +#rfb-chroma=RV32 + +# Compression level (integer) +#rfb-compress-level=0 + +# Image quality (integer) +#rfb-quality-level=9 + +[vdr] # VDR recordings + +# Chapter offset in ms (integer) +#vdr-chapter-offset=0 + +# Frame rate (float) +#vdr-fps=25.000000 + +[udp] # UDP input + +# UDP Source timeout (sec) (integer) +#udp-timeout=-1 + +[timecode] # Time code subpicture elementary stream generator + +# Frame rate (string) +#timecode-fps=25/1 + +[smb] # SMB input + +# Username (string) +#smb-user= + +# Password (string) +#smb-pwd= + +# SMB domain (string) +#smb-domain= + +[shm] # Shared memory framebuffer + +# Frame rate (float) +#shm-fps=10.000000 + +# Frame buffer depth (integer) +#shm-depth=0 + +# Frame buffer width (integer) +#shm-width=800 + +# Frame buffer height (integer) +#shm-height=480 + +[sftp] # SFTP input + +# SFTP port (integer) +#sftp-port=22 + +# Username (string) +#sftp-user= + +# Password (string) +#sftp-pwd= + +[screen] # Screen Input + +# Frame rate (float) +#screen-fps=1.000000 + +# Region top row (integer) +#screen-top=0 + +# Region left column (integer) +#screen-left=0 + +# Capture region width (integer) +#screen-width=0 + +# Capture region height (integer) +#screen-height=0 + +# Follow the mouse (boolean) +#screen-follow-mouse=0 + +# Mouse pointer image (string) +#screen-mouse-image= + +# Capture fragment size (integer) +#screen-fragment-size=0 + +[satip] # SAT>IP Receiver Plugin + +# Receive buffer (integer) +#satip-buffer=4194304 + +# Request multicast stream (boolean) +#satip-multicast=0 + +# Host (string) +#satip-host= + +[rtp] # Real-Time Protocol (RTP) input + +# RTCP (local) port (integer) +#rtcp-port=0 + +# SRTP key (hexadecimal) (string) +#srtp-key= + +# SRTP salt (hexadecimal) (string) +#srtp-salt= + +# Maximum RTP sources (integer) +#rtp-max-src=1 + +# RTP source timeout (sec) (integer) +#rtp-timeout=5 + +# Maximum RTP sequence number dropout (integer) +#rtp-max-dropout=3000 + +# Maximum RTP sequence number misordering (integer) +#rtp-max-misorder=100 + +# RTP payload format assumed for dynamic payloads (string) +#rtp-dynamic-pt= + +[rist] # RIST input + +# RIST maximum packet size (bytes) (integer) +#packet-size=1472 + +# RIST demux/decode maximum jitter (default is 5ms) (integer) +#maximum-jitter=5 + +# RIST latency (ms) (integer) +#latency=1000 + +# RIST nack retry interval (ms) (integer) +#retry-interval=132 + +# RIST reorder buffer (ms) (integer) +#reorder-buffer=70 + +# RIST maximum retry count (integer) +#max-retries=10 + +# RIST nack type, 0 = range, 1 = bitmask. Default is range (integer) +#nack-type=0 + +# Disable NACK output packets (boolean) +#disable-nacks=0 + +# Do not check for a valid rtcp message from the encoder (boolean) +#mcast-blind-nacks=0 + +[nfs] # NFS input + +# Set NFS uid/guid automatically (boolean) +#nfs-auto-guid=1 + +[live555] # RTP/RTSP/SDP demuxer (using Live555) + +# Use RTP over RTSP (TCP) (boolean) +#rtsp-tcp=0 + +# Client port (integer) +#rtp-client-port=-1 + +# Force multicast RTP via RTSP (boolean) +#rtsp-mcast=0 + +# Tunnel RTSP and RTP over HTTP (boolean) +#rtsp-http=0 + +# HTTP tunnel port (integer) +#rtsp-http-port=80 + +# Kasenna RTSP dialect (boolean) +#rtsp-kasenna=0 + +# WMServer RTSP dialect (boolean) +#rtsp-wmserver=0 + +# Username (string) +#rtsp-user= + +# Password (string) +#rtsp-pwd= + +# RTSP frame buffer size (integer) +#rtsp-frame-buffer-size=250000 + +[libbluray] # Blu-ray Disc support (libbluray) + +# Blu-ray menus (boolean) +#bluray-menu=1 + +# Region code (string) +#bluray-region=B + +[http] # HTTP input + +# Auto re-connect (boolean) +#http-reconnect=0 + +[access] # HTTPS input + +# Cookies forwarding (boolean) +#http-forward-cookies=1 + +# User agent (string) +#http-user-agent= + +[ftp] # FTP input + +# Username (string) +#ftp-user= + +# Password (string) +#ftp-pwd= + +# FTP account (string) +#ftp-account=anonymous + +[filesystem] # File input + +# List special files (boolean) +#list-special-files=0 + +[dvdread] # DVDRead Input (no menu support) + +# DVD angle (integer) +#dvdread-angle=1 + +[dvdnav] # DVDnav Input + +# DVD angle (integer) +#dvdnav-angle=1 + +# Start directly in menu (boolean) +#dvdnav-menu=1 + +[dtv] # Digital Television and Radio + +# DVB adapter (integer) +#dvb-adapter=-1 + +# Network name (string) +#dvb-network-name= + +# Network name to create (string) +#dvb-create-name= + +# Frequency (Hz) (integer) +#dvb-frequency=0 + +# Spectrum inversion (integer) +#dvb-inversion=-1 + +# Bandwidth (MHz) (integer) +#dvb-bandwidth=0 + +# Transmission mode (integer) +#dvb-transmission=0 + +# Guard interval (string) +#dvb-guard= + +# High-priority code rate (string) +#dvb-code-rate-hp= + +# Low-priority code rate (string) +#dvb-code-rate-lp= + +# Hierarchy mode (integer) +#dvb-hierarchy=-1 + +# DVB-T2 Physical Layer Pipe (integer) +#dvb-plp-id=0 + +# Layer A modulation (string) +#dvb-a-modulation= + +# Layer A code rate (string) +#dvb-a-fec= + +# Layer A segments count (integer) +#dvb-a-count=0 + +# Layer A time interleaving (integer) +#dvb-a-interleaving=0 + +# Layer B modulation (string) +#dvb-b-modulation= + +# Layer B code rate (string) +#dvb-b-fec= + +# Layer B segments count (integer) +#dvb-b-count=0 + +# Layer B time interleaving (integer) +#dvb-b-interleaving=0 + +# Layer C modulation (string) +#dvb-c-modulation= + +# Layer C code rate (string) +#dvb-c-fec= + +# Layer C segments count (integer) +#dvb-c-count=0 + +# Layer C time interleaving (integer) +#dvb-c-interleaving=0 + +# Modulation / Constellation (string) +#dvb-modulation= + +# Symbol rate (bauds) (integer) +#dvb-srate=0 + +# FEC code rate (string) +#dvb-fec= + +# Stream identifier (integer) +#dvb-stream=0 + +# Pilot (integer) +#dvb-pilot=-1 + +# Roll-off factor (integer) +#dvb-rolloff=-1 + +# Transport stream ID (integer) +#dvb-ts-id=0 + +# Polarization (Voltage) (string) +#dvb-polarization= + +# (integer) +#dvb-voltage=13 + +# Local oscillator low frequency (kHz) (integer) +#dvb-lnb-low=0 + +# Local oscillator high frequency (kHz) (integer) +#dvb-lnb-high=0 + +# Universal LNB switch frequency (kHz) (integer) +#dvb-lnb-switch=11700000 + +# Network identifier (integer) +#dvb-network-id=0 + +# Satellite azimuth (integer) +#dvb-azimuth=0 + +# Satellite elevation (integer) +#dvb-elevation=0 + +# Satellite longitude (integer) +#dvb-longitude=0 + +# Satellite range code (string) +#dvb-range= + +# Major channel (integer) +#dvb-major-channel=0 + +# ATSC minor channel (integer) +#dvb-minor-channel=0 + +# Physical channel (integer) +#dvb-physical-channel=0 + +[dshow] # DirectShow input + +# Video device name (string) +#dshow-vdev= + +# Audio device name (string) +#dshow-adev= + +# Video size (string) +#dshow-size= + +# Picture aspect-ratio n:m (string) +#dshow-aspect-ratio=4:3 + +# Video input chroma format (string) +#dshow-chroma= + +# Video input frame rate (float) +#dshow-fps=0.000000 + +# Device properties (boolean) +#dshow-config=0 + +# Tuner properties (boolean) +#dshow-tuner=0 + +# Tuner TV Channel (integer) +#dshow-tuner-channel=0 + +# Tuner Frequency (integer) +#dshow-tuner-frequency=0 + +# Tuner country code (integer) +#dshow-tuner-country=0 + +# Video standard (integer) +#dshow-tuner-standard=0 + +# Tuner input type (integer) +#dshow-tuner-input=0 + +# Video input pin (integer) +#dshow-video-input=-1 + +# Video output pin (integer) +#dshow-video-output=-1 + +# Audio input pin (integer) +#dshow-audio-input=-1 + +# Audio output pin (integer) +#dshow-audio-output=-1 + +# AM Tuner mode (integer) +#dshow-amtuner-mode=1 + +# Number of audio channels (integer) +#dshow-audio-channels=0 + +# Audio sample rate (integer) +#dshow-audio-samplerate=0 + +# Audio bits per sample (integer) +#dshow-audio-bitspersample=0 + +[dcp] # Digital Cinema Package module + +# KDM file (string) +#kdm= + +[cdda] # Audio CD input + +# Audio CD device (string) +#cd-audio=D: + +# Musicbrainz Server (string) +#musicbrainz-server=musicbrainz.org + +# CDDB Server (string) +#cddb-server=freedb.videolan.org + +# CDDB port (integer) +#cddb-port=80 + +[wasapi] # Windows Audio Session API input + +# Loopback mode (boolean) +#wasapi-loopback=0 + +[access_srt] # SRT input + +# Return poll wait after timeout milliseconds (-1 = infinite) (integer) +#poll-timeout=-1 + +# SRT latency (ms) (integer) +#latency=120 + +# Password for stream encryption (string) +#passphrase= + +# Crypto key length in bytes (integer) +#key-length=16 + +# SRT Stream ID (string) +#streamid= + +[access_mms] # Microsoft Media Server (MMS) input + +# TCP/UDP timeout (ms) (integer) +#mms-timeout=5000 + +# Force selection of all streams (boolean) +#mms-all=0 + +# Maximum bitrate (integer) +#mms-maxbitrate=0 + +[imem] # Memory input + +# ID (integer) +#imem-id=-1 + +# Group (integer) +#imem-group=0 + +# Category (integer) +#imem-cat=0 + +# Codec (string) +#imem-codec= + +# Language (string) +#imem-language= + +# Sample rate (integer) +#imem-samplerate=0 + +# Channels count (integer) +#imem-channels=0 + +# Width (integer) +#imem-width=0 + +# Height (integer) +#imem-height=0 + +# Display aspect ratio (string) +#imem-dar= + +# Frame rate (string) +#imem-fps= + +# Size (integer) +#imem-size=0 + +[concat] # Concatenated inputs + +# Inputs list (string) +#concat-list= + +[core] # core program + +# Enable audio (boolean) +#audio=1 + +# Audio gain (float) +#gain=1.000000 + +# Audio output volume step (float) +#volume-step=12.800000 + +# Remember the audio volume (boolean) +#volume-save=1 + +# Force S/PDIF support (boolean) +#spdif=0 + +# Force detection of Dolby Surround (integer) +#force-dolby-surround=0 + +# Stereo audio output mode (integer) +#stereo-mode=0 + +# Audio desynchronization compensation (integer) +#audio-desync=0 + +# Replay gain mode (string) +#audio-replay-gain-mode=none + +# Replay preamp (float) +#audio-replay-gain-preamp=0.000000 + +# Default replay gain (float) +#audio-replay-gain-default=-7.000000 + +# Peak protection (boolean) +#audio-replay-gain-peak-protection=1 + +# Enable time stretching audio (boolean) +#audio-time-stretch=1 + +# Audio output module (string) +#aout= + +# Media role (string) +#role=video + +# Audio filters (string) +#audio-filter= + +# Audio visualizations (string) +#audio-visual=none + +# Audio resampler (string) +#audio-resampler= + +# Enable video (boolean) +#video=1 + +# Grayscale video output (boolean) +#grayscale=0 + +# Fullscreen video output (boolean) +#fullscreen=0 + +# Embedded video (boolean) +#embedded-video=1 + +# (boolean) +#xlib=1 + +# Drop late frames (boolean) +#drop-late-frames=1 + +# Skip frames (boolean) +#skip-frames=1 + +# Quiet synchro (boolean) +#quiet-synchro=0 + +# Key press events (boolean) +#keyboard-events=1 + +# Mouse events (boolean) +#mouse-events=1 + +# Always on top (boolean) +#video-on-top=0 + +# Enable wallpaper mode (boolean) +#video-wallpaper=0 + +# Disable screensaver (boolean) +#disable-screensaver=1 + +# Show media title on video (boolean) +#video-title-show=1 + +# Show video title for x milliseconds (integer) +#video-title-timeout=5000 + +# Position of video title (integer) +#video-title-position=8 + +# Hide cursor and fullscreen controller after x milliseconds (integer) +#mouse-hide-timeout=1000 + +# Video snapshot directory (or filename) (string) +#snapshot-path= + +# Video snapshot file prefix (string) +#snapshot-prefix=vlcsnap- + +# Video snapshot format (string) +#snapshot-format=png + +# Display video snapshot preview (boolean) +#snapshot-preview=1 + +# Use sequential numbers instead of timestamps (boolean) +#snapshot-sequential=0 + +# Video snapshot width (integer) +#snapshot-width=-1 + +# Video snapshot height (integer) +#snapshot-height=-1 + +# Video width (integer) +#width=-1 + +# Video height (integer) +#height=-1 + +# Video X coordinate (integer) +#video-x=0 + +# Video Y coordinate (integer) +#video-y=0 + +# Video cropping (string) +#crop= + +# Custom crop ratios list (string) +#custom-crop-ratios= + +# Source aspect ratio (string) +#aspect-ratio= + +# Video Auto Scaling (boolean) +#autoscale=1 + +# Monitor pixel aspect ratio (string) +#monitor-par= + +# Custom aspect ratios list (string) +#custom-aspect-ratios= + +# Fix HDTV height (boolean) +#hdtv-fix=1 + +# Window decorations (boolean) +#video-deco=1 + +# Video title (string) +#video-title= + +# Video alignment (integer) +#align=0 + +# Zoom video (float) +#zoom=1.000000 + +# Deinterlace (integer) +#deinterlace=-1 + +# Deinterlace mode (string) +#deinterlace-mode=auto + +# Video output module (string) +#vout= + +# Video filter module (string) +#video-filter= + +# Video splitter module (string) +#video-splitter= + +# Enable sub-pictures (boolean) +#spu=1 + +# On Screen Display (boolean) +#osd=1 + +# Text rendering module (string) +#text-renderer= + +# Use subtitle file (string) +#sub-file= + +# Autodetect subtitle files (boolean) +#sub-autodetect-file=1 + +# Subtitle autodetection fuzziness (integer) +#sub-autodetect-fuzzy=3 + +# Subtitle autodetection paths (string) +#sub-autodetect-path=.\subtitles, .\subs + +# Force subtitle position (integer) +#sub-margin=0 + +# Subpictures source module (string) +#sub-source= + +# Subpictures filter module (string) +#sub-filter= + +# Program (integer) +#program=0 + +# Programs (string) +#programs= + +# Audio track (integer) +#audio-track=-1 + +# Subtitle track (integer) +#sub-track=-1 + +# Audio language (string) +#audio-language= + +# Subtitle language (string) +#sub-language= + +# Menu language (string) +#menu-language= + +# Audio track ID (integer) +#audio-track-id=-1 + +# Subtitle track ID (integer) +#sub-track-id=-1 + +# Preferred Closed Captions decoder (integer) +#captions=608 + +# Preferred video resolution (integer) +#preferred-resolution=-1 + +# Input repetitions (integer) +#input-repeat=0 + +# Start time (float) +#start-time=0.000000 + +# Stop time (float) +#stop-time=0.000000 + +# Run time (float) +#run-time=0.000000 + +# Fast seek (boolean) +#input-fast-seek=0 + +# Playback speed (float) +#rate=1.000000 + +# Input list (string) +#input-list= + +# Input slave (experimental) (string) +#input-slave= + +# Bookmarks list for a stream (string) +#bookmarks= + +# DVD device (string) +#dvd= + +# VCD device (string) +#vcd=D: + +# MTU of the network interface (integer) +#mtu=1400 + +# TCP connection timeout (integer) +#ipv4-timeout=5000 + +# HTTP server address (string) +#http-host= + +# HTTP server port (integer) +#http-port=8080 + +# HTTPS server port (integer) +#https-port=8443 + +# RTSP server address (string) +#rtsp-host= + +# RTSP server port (integer) +#rtsp-port=554 + +# HTTP/TLS server certificate (string) +#http-cert= + +# HTTP/TLS server private key (string) +#http-key= + +# HTTP proxy (string) +#http-proxy= + +# HTTP proxy password (string) +#http-proxy-pwd= + +# SOCKS server (string) +#socks= + +# SOCKS user name (string) +#socks-user= + +# SOCKS password (string) +#socks-pwd= + +# Title metadata (string) +#meta-title= + +# Author metadata (string) +#meta-author= + +# Artist metadata (string) +#meta-artist= + +# Genre metadata (string) +#meta-genre= + +# Copyright metadata (string) +#meta-copyright= + +# Description metadata (string) +#meta-description= + +# Date metadata (string) +#meta-date= + +# URL metadata (string) +#meta-url= + +# File caching (ms) (integer) +#file-caching=1000 + +# Live capture caching (ms) (integer) +#live-caching=300 + +# Disc caching (ms) (integer) +#disc-caching=300 + +# Network caching (ms) (integer) +#network-caching=1000 + +# Clock reference average counter (integer) +#cr-average=40 + +# Clock synchronisation (integer) +#clock-synchro=-1 + +# Clock jitter (integer) +#clock-jitter=5000 + +# Network synchronisation (boolean) +#network-synchronisation=0 + +# Record directory (string) +#input-record-path= + +# Prefer native stream recording (boolean) +#input-record-native=1 + +# Timeshift directory (string) +#input-timeshift-path= + +# Timeshift granularity (integer) +#input-timeshift-granularity=-1 + +# Change title according to current media (string) +#input-title-format=$Z + +# Disable all lua plugins (boolean) +#lua=1 + +# Preferred decoders list (string) +#codec= + +# Preferred encoders list (string) +#encoder= + +# Access module (string) +#access= + +# Demux module (string) +#demux=any + +# Stream filter module (string) +#stream-filter= + +# Demux filter module (string) +#demux-filter= + +# Default stream output chain (string) +#sout= + +# Display while streaming (boolean) +#sout-display=0 + +# Keep stream output open (boolean) +#sout-keep=0 + +# Enable streaming of all ES (boolean) +#sout-all=1 + +# Enable audio stream output (boolean) +#sout-audio=1 + +# Enable video stream output (boolean) +#sout-video=1 + +# Enable SPU stream output (boolean) +#sout-spu=1 + +# Stream output muxer caching (ms) (integer) +#sout-mux-caching=1500 + +# VLM configuration file (string) +#vlm-conf= + +# SAP announcement interval (integer) +#sap-interval=5 + +# Mux module (string) +#mux= + +# Access output module (string) +#access_output= + +# Hop limit (TTL) (integer) +#ttl=-1 + +# Multicast output interface (string) +#miface= + +# DiffServ Code Point (integer) +#dscp=0 + +# Preferred packetizer list (string) +#packetizer= + +# VoD server module (string) +#vod-server= + +# Use a plugins cache (boolean) +#plugins-cache=1 + +# Scan for new plugins (boolean) +#plugins-scan=1 + +# Preferred keystore list (string) +#keystore= + +# Increase the priority of the process (boolean) +#high-priority=0 + +# Clock source (string) +#clock-source= + +# Play files randomly forever (boolean) +#random=0 + +# Repeat all (boolean) +#loop=0 + +# Repeat current item (boolean) +#repeat=0 + +# Play and exit (boolean) +#play-and-exit=0 + +# Play and stop (boolean) +#play-and-stop=0 + +# Play and pause (boolean) +#play-and-pause=0 + +# Start paused (boolean) +#start-paused=0 + +# Auto start (boolean) +#playlist-autostart=1 + +# Pause on audio communication (boolean) +#playlist-cork=1 + +# Allow only one running instance (boolean) +#one-instance=0 + +# Use only one instance when started from file manager (boolean) +#one-instance-when-started-from-file=1 + +# Enqueue items into playlist in one instance mode (boolean) +#playlist-enqueue=0 + +# Use media library (boolean) +#media-library=0 + +# Display playlist tree (boolean) +#playlist-tree=0 + +# Default stream (string) +#open= + +# Automatically preparse items (boolean) +#auto-preparse=1 + +# Preparsing timeout (integer) +#preparse-timeout=5000 + +# Allow metadata network access (boolean) +metadata-network-access=1 + +# Subdirectory behavior (string) +#recursive=collapse + +# Ignored extensions (string) +#ignore-filetypes=m3u,db,nfo,ini,jpg,jpeg,ljpg,gif,png,pgm,pgmyuv,pbm,pam,tga,bmp,pnm,xpm,xcf,pcx,tif,tiff,lbm,sfv,txt,sub,idx,srt,cue,ssa + +# Show hidden files (boolean) +#show-hiddenfiles=0 + +# Services discovery modules (string) +#services-discovery= + +# Show advanced options (boolean) +#advanced=0 + +# Interface interaction (boolean) +#interact=1 + +# Locally collect statistics (boolean) +#stats=1 + +# Interface module (string) +#intf= + +# Extra interface modules (string) +#extraintf= + +# Control interfaces (string) +#control= + +# Mouse wheel vertical axis control (integer) +#hotkeys-y-wheel-mode=0 + +# Mouse wheel horizontal axis control (integer) +#hotkeys-x-wheel-mode=2 + +# Fullscreen (string) +#global-key-toggle-fullscreen= + +# Fullscreen (string) +#key-toggle-fullscreen=f + +# Exit fullscreen (string) +#global-key-leave-fullscreen= + +# Exit fullscreen (string) +#key-leave-fullscreen=Esc + +# Play/Pause (string) +#global-key-play-pause= + +# Play/Pause (string) +#key-play-pause=Space + +# Pause only (string) +#global-key-pause= + +# Pause only (string) +#key-pause=Browser Stop + +# Play only (string) +#global-key-play= + +# Play only (string) +#key-play=Browser Refresh + +# Faster (string) +#global-key-faster= + +# Faster (string) +#key-faster=+ + +# Slower (string) +#global-key-slower= + +# Slower (string) +#key-slower=- + +# Normal rate (string) +#global-key-rate-normal= + +# Normal rate (string) +#key-rate-normal== + +# Faster (fine) (string) +#global-key-rate-faster-fine= + +# Faster (fine) (string) +#key-rate-faster-fine=] + +# Slower (fine) (string) +#global-key-rate-slower-fine= + +# Slower (fine) (string) +#key-rate-slower-fine=[ + +# Next (string) +#global-key-next= + +# Next (string) +#key-next=n + +# Previous (string) +#global-key-prev= + +# Previous (string) +#key-prev=p + +# Stop (string) +#global-key-stop= + +# Stop (string) +#key-stop=s + +# Position (string) +#global-key-position= + +# Position (string) +#key-position=t + +# Very short backwards jump (string) +#global-key-jump-extrashort= + +# Very short backwards jump (string) +#key-jump-extrashort=Shift+Left + +# Very short forward jump (string) +#global-key-jump+extrashort= + +# Very short forward jump (string) +#key-jump+extrashort=Shift+Right + +# Short backwards jump (string) +#global-key-jump-short= + +# Short backwards jump (string) +#key-jump-short=Alt+Left + +# Short forward jump (string) +#global-key-jump+short= + +# Short forward jump (string) +#key-jump+short=Alt+Right + +# Medium backwards jump (string) +#global-key-jump-medium= + +# Medium backwards jump (string) +#key-jump-medium=Ctrl+Left + +# Medium forward jump (string) +#global-key-jump+medium= + +# Medium forward jump (string) +#key-jump+medium=Ctrl+Right + +# Long backwards jump (string) +#global-key-jump-long= + +# Long backwards jump (string) +#key-jump-long=Ctrl+Alt+Left + +# Long forward jump (string) +#global-key-jump+long= + +# Long forward jump (string) +#key-jump+long=Ctrl+Alt+Right + +# Next frame (string) +#global-key-frame-next= + +# Next frame (string) +#key-frame-next=e + +# Activate (string) +#global-key-nav-activate= + +# Activate (string) +#key-nav-activate=Enter + +# Navigate up (string) +#global-key-nav-up= + +# Navigate up (string) +#key-nav-up=Up + +# Navigate down (string) +#global-key-nav-down= + +# Navigate down (string) +#key-nav-down=Down + +# Navigate left (string) +#global-key-nav-left= + +# Navigate left (string) +#key-nav-left=Left + +# Navigate right (string) +#global-key-nav-right= + +# Navigate right (string) +#key-nav-right=Right + +# Go to the DVD menu (string) +#global-key-disc-menu= + +# Go to the DVD menu (string) +#key-disc-menu=Shift+m + +# Select previous DVD title (string) +#global-key-title-prev= + +# Select previous DVD title (string) +#key-title-prev=Shift+o + +# Select next DVD title (string) +#global-key-title-next= + +# Select next DVD title (string) +#key-title-next=Shift+b + +# Select prev DVD chapter (string) +#global-key-chapter-prev= + +# Select prev DVD chapter (string) +#key-chapter-prev=Shift+p + +# Select next DVD chapter (string) +#global-key-chapter-next= + +# Select next DVD chapter (string) +#key-chapter-next=Shift+n + +# Quit (string) +#global-key-quit= + +# Quit (string) +#key-quit=Ctrl+q + +# Volume up (string) +#global-key-vol-up= + +# Volume up (string) +#key-vol-up=Ctrl+Up + +# Volume down (string) +#global-key-vol-down= + +# Volume down (string) +#key-vol-down=Ctrl+Down + +# Mute (string) +#global-key-vol-mute= + +# Mute (string) +#key-vol-mute=m + +# Subtitle delay up (string) +#global-key-subdelay-up= + +# Subtitle delay up (string) +#key-subdelay-up=h + +# Subtitle delay down (string) +#global-key-subdelay-down= + +# Subtitle delay down (string) +#key-subdelay-down=g + +# Subtitle sync / bookmark audio timestamp (string) +#global-key-subsync-markaudio= + +# Subtitle sync / bookmark audio timestamp (string) +#key-subsync-markaudio=Shift+h + +# Subtitle sync / bookmark subtitle timestamp (string) +#global-key-subsync-marksub= + +# Subtitle sync / bookmark subtitle timestamp (string) +#key-subsync-marksub=Shift+j + +# Subtitle sync / synchronize audio & subtitle timestamps (string) +#global-key-subsync-apply= + +# Subtitle sync / synchronize audio & subtitle timestamps (string) +#key-subsync-apply=Shift+k + +# Subtitle sync / reset audio & subtitle synchronization (string) +#global-key-subsync-reset= + +# Subtitle sync / reset audio & subtitle synchronization (string) +#key-subsync-reset=Ctrl+Shift+k + +# Subtitle position up (string) +#global-key-subpos-up= + +# Subtitle position up (string) +#key-subpos-up= + +# Subtitle position down (string) +#global-key-subpos-down= + +# Subtitle position down (string) +#key-subpos-down= + +# Audio delay up (string) +#global-key-audiodelay-up= + +# Audio delay up (string) +#key-audiodelay-up=k + +# Audio delay down (string) +#global-key-audiodelay-down= + +# Audio delay down (string) +#key-audiodelay-down=j + +# Cycle audio track (string) +#global-key-audio-track= + +# Cycle audio track (string) +#key-audio-track=b + +# Cycle through audio devices (string) +#global-key-audiodevice-cycle= + +# Cycle through audio devices (string) +#key-audiodevice-cycle=Shift+a + +# Cycle subtitle track in reverse order (string) +#global-key-subtitle-revtrack= + +# Cycle subtitle track in reverse order (string) +#key-subtitle-revtrack=Alt+v + +# Cycle subtitle track (string) +#global-key-subtitle-track= + +# Cycle subtitle track (string) +#key-subtitle-track=v + +# Toggle subtitles (string) +#global-key-subtitle-toggle= + +# Toggle subtitles (string) +#key-subtitle-toggle=Shift+v + +# Cycle next program Service ID (string) +#global-key-program-sid-next= + +# Cycle next program Service ID (string) +#key-program-sid-next=x + +# Cycle previous program Service ID (string) +#global-key-program-sid-prev= + +# Cycle previous program Service ID (string) +#key-program-sid-prev=Shift+x + +# Cycle source aspect ratio (string) +#global-key-aspect-ratio= + +# Cycle source aspect ratio (string) +#key-aspect-ratio=a + +# Cycle video crop (string) +#global-key-crop= + +# Cycle video crop (string) +#key-crop=c + +# Toggle autoscaling (string) +#global-key-toggle-autoscale= + +# Toggle autoscaling (string) +#key-toggle-autoscale=o + +# Increase scale factor (string) +#global-key-incr-scalefactor= + +# Increase scale factor (string) +#key-incr-scalefactor=Alt+o + +# Decrease scale factor (string) +#global-key-decr-scalefactor= + +# Decrease scale factor (string) +#key-decr-scalefactor=Alt+Shift+o + +# Toggle deinterlacing (string) +#global-key-deinterlace= + +# Toggle deinterlacing (string) +#key-deinterlace=d + +# Cycle deinterlace modes (string) +#global-key-deinterlace-mode= + +# Cycle deinterlace modes (string) +#key-deinterlace-mode=Shift+d + +# Show controller in fullscreen (string) +#global-key-intf-show= + +# Show controller in fullscreen (string) +#key-intf-show=i + +# Boss key (string) +#global-key-intf-boss= + +# Boss key (string) +#key-intf-boss= + +# Context menu (string) +#global-key-intf-popup-menu= + +# Context menu (string) +#key-intf-popup-menu=Menu + +# Take video snapshot (string) +#global-key-snapshot= + +# Take video snapshot (string) +#key-snapshot=Shift+s + +# Record (string) +#global-key-record= + +# Record (string) +#key-record=Shift+r + +# Zoom (string) +#global-key-zoom= + +# Zoom (string) +#key-zoom=z + +# Un-Zoom (string) +#global-key-unzoom= + +# Un-Zoom (string) +#key-unzoom=Shift+z + +# Toggle wallpaper mode in video output (string) +#global-key-wallpaper= + +# Toggle wallpaper mode in video output (string) +#key-wallpaper=w + +# Crop one pixel from the top of the video (string) +#global-key-crop-top= + +# Crop one pixel from the top of the video (string) +#key-crop-top=Alt+r + +# Uncrop one pixel from the top of the video (string) +#global-key-uncrop-top= + +# Uncrop one pixel from the top of the video (string) +#key-uncrop-top=Alt+Shift+r + +# Crop one pixel from the left of the video (string) +#global-key-crop-left= + +# Crop one pixel from the left of the video (string) +#key-crop-left=Alt+d + +# Uncrop one pixel from the left of the video (string) +#global-key-uncrop-left= + +# Uncrop one pixel from the left of the video (string) +#key-uncrop-left=Alt+Shift+d + +# Crop one pixel from the bottom of the video (string) +#global-key-crop-bottom= + +# Crop one pixel from the bottom of the video (string) +#key-crop-bottom=Alt+c + +# Uncrop one pixel from the bottom of the video (string) +#global-key-uncrop-bottom= + +# Uncrop one pixel from the bottom of the video (string) +#key-uncrop-bottom=Alt+Shift+c + +# Crop one pixel from the right of the video (string) +#global-key-crop-right= + +# Crop one pixel from the right of the video (string) +#key-crop-right=Alt+f + +# Uncrop one pixel from the right of the video (string) +#global-key-uncrop-right= + +# Uncrop one pixel from the right of the video (string) +#key-uncrop-right=Alt+Shift+f + +# Random (string) +#global-key-random= + +# Random (string) +#key-random=r + +# Normal/Loop/Repeat (string) +#global-key-loop= + +# Normal/Loop/Repeat (string) +#key-loop=l + +# Shrink the viewpoint field of view (360°) (string) +#global-key-viewpoint-fov-in= + +# Shrink the viewpoint field of view (360°) (string) +#key-viewpoint-fov-in=Page Up + +# Expand the viewpoint field of view (360°) (string) +#global-key-viewpoint-fov-out= + +# Expand the viewpoint field of view (360°) (string) +#key-viewpoint-fov-out=Page Down + +# Roll the viewpoint clockwise (360°) (string) +#global-key-viewpoint-roll-clock= + +# Roll the viewpoint clockwise (360°) (string) +#key-viewpoint-roll-clock= + +# Roll the viewpoint anti-clockwise (360°) (string) +#global-key-viewpoint-roll-anticlock= + +# Roll the viewpoint anti-clockwise (360°) (string) +#key-viewpoint-roll-anticlock= + +# 1:4 Quarter (string) +#global-key-zoom-quarter= + +# 1:4 Quarter (string) +#key-zoom-quarter=Alt+1 + +# 1:2 Half (string) +#global-key-zoom-half= + +# 1:2 Half (string) +#key-zoom-half=Alt+2 + +# 1:1 Original (string) +#global-key-zoom-original= + +# 1:1 Original (string) +#key-zoom-original=Alt+3 + +# 2:1 Double (string) +#global-key-zoom-double= + +# 2:1 Double (string) +#key-zoom-double=Alt+4 + +# Very short jump length (integer) +#extrashort-jump-size=3 + +# Short jump length (integer) +#short-jump-size=10 + +# Medium jump length (integer) +#medium-jump-size=60 + +# Long jump length (integer) +#long-jump-size=300 + +# Set playlist bookmark 1 (string) +#global-key-set-bookmark1= + +# Set playlist bookmark 1 (string) +#key-set-bookmark1=Ctrl+F1 + +# Set playlist bookmark 2 (string) +#global-key-set-bookmark2= + +# Set playlist bookmark 2 (string) +#key-set-bookmark2=Ctrl+F2 + +# Set playlist bookmark 3 (string) +#global-key-set-bookmark3= + +# Set playlist bookmark 3 (string) +#key-set-bookmark3=Ctrl+F3 + +# Set playlist bookmark 4 (string) +#global-key-set-bookmark4= + +# Set playlist bookmark 4 (string) +#key-set-bookmark4=Ctrl+F4 + +# Set playlist bookmark 5 (string) +#global-key-set-bookmark5= + +# Set playlist bookmark 5 (string) +#key-set-bookmark5=Ctrl+F5 + +# Set playlist bookmark 6 (string) +#global-key-set-bookmark6= + +# Set playlist bookmark 6 (string) +#key-set-bookmark6=Ctrl+F6 + +# Set playlist bookmark 7 (string) +#global-key-set-bookmark7= + +# Set playlist bookmark 7 (string) +#key-set-bookmark7=Ctrl+F7 + +# Set playlist bookmark 8 (string) +#global-key-set-bookmark8= + +# Set playlist bookmark 8 (string) +#key-set-bookmark8=Ctrl+F8 + +# Set playlist bookmark 9 (string) +#global-key-set-bookmark9= + +# Set playlist bookmark 9 (string) +#key-set-bookmark9=Ctrl+F9 + +# Set playlist bookmark 10 (string) +#global-key-set-bookmark10= + +# Set playlist bookmark 10 (string) +#key-set-bookmark10=Ctrl+F10 + +# Play playlist bookmark 1 (string) +#global-key-play-bookmark1= + +# Play playlist bookmark 1 (string) +#key-play-bookmark1=F1 + +# Play playlist bookmark 2 (string) +#global-key-play-bookmark2= + +# Play playlist bookmark 2 (string) +#key-play-bookmark2=F2 + +# Play playlist bookmark 3 (string) +#global-key-play-bookmark3= + +# Play playlist bookmark 3 (string) +#key-play-bookmark3=F3 + +# Play playlist bookmark 4 (string) +#global-key-play-bookmark4= + +# Play playlist bookmark 4 (string) +#key-play-bookmark4=F4 + +# Play playlist bookmark 5 (string) +#global-key-play-bookmark5= + +# Play playlist bookmark 5 (string) +#key-play-bookmark5=F5 + +# Play playlist bookmark 6 (string) +#global-key-play-bookmark6= + +# Play playlist bookmark 6 (string) +#key-play-bookmark6=F6 + +# Play playlist bookmark 7 (string) +#global-key-play-bookmark7= + +# Play playlist bookmark 7 (string) +#key-play-bookmark7=F7 + +# Play playlist bookmark 8 (string) +#global-key-play-bookmark8= + +# Play playlist bookmark 8 (string) +#key-play-bookmark8=F8 + +# Play playlist bookmark 9 (string) +#global-key-play-bookmark9= + +# Play playlist bookmark 9 (string) +#key-play-bookmark9=F9 + +# Play playlist bookmark 10 (string) +#global-key-play-bookmark10= + +# Play playlist bookmark 10 (string) +#key-play-bookmark10=F10 + +# Clear the playlist (string) +#global-key-clear-playlist= + +# Clear the playlist (string) +#key-clear-playlist=Ctrl+w + +# Reset subtitles text scale (string) +#global-key-subtitle-text-scale-normal= + +# Reset subtitles text scale (string) +#key-subtitle-text-scale-normal=Ctrl+0 + +# Scale down subtitles text (string) +#global-key-subtitle-text-scale-up= + +# Scale down subtitles text (string) +#key-subtitle-text-scale-up=Ctrl+Mouse Wheel Up + +# Scale up subtitles text (string) +#global-key-subtitle-text-scale-down= + +# Scale up subtitles text (string) +#key-subtitle-text-scale-down=Ctrl+Mouse Wheel Down + +# Playlist bookmark 1 (string) +#bookmark1= + +# Playlist bookmark 2 (string) +#bookmark2= + +# Playlist bookmark 3 (string) +#bookmark3= + +# Playlist bookmark 4 (string) +#bookmark4= + +# Playlist bookmark 5 (string) +#bookmark5= + +# Playlist bookmark 6 (string) +#bookmark6= + +# Playlist bookmark 7 (string) +#bookmark7= + +# Playlist bookmark 8 (string) +#bookmark8= + +# Playlist bookmark 9 (string) +#bookmark9= + +# Playlist bookmark 10 (string) +#bookmark10= + diff --git a/support/3rd_party/vlc/sdk/activex/README.TXT b/support/3rd_party/vlc/sdk/activex/README.TXT new file mode 100644 index 0000000..aee88d3 --- /dev/null +++ b/support/3rd_party/vlc/sdk/activex/README.TXT @@ -0,0 +1,108 @@ +== ACTIVEX Control for VLC == + +The VLC ActiveX Control has been primary designed to work with Internet +Explorer. However it may also work with Visual Basic and/or .NET. Please +note, that this code does not rely upon Microsoft MFC/ATL code, hence +good compatibility is not guaranteed. + +I. Compiling + +The ActiveX Control should compile without any glitches as long as you +have the latest version of mingw gcc and headers. + +In order to script the ActiveX Control on Internet Explorer, a type +library is required. This type library is usually generated from an IDL +file using Microsoft MIDL compiler. Therefore, for convenience I have +checked in the output of the MIDL compiler in the repository so that you +will only need the MIDL compiler if you change axvlc.idl. the generated +files are as follow: + +axvlc_idl.c +axvlc_idl.h +axvlc.tlb + +To use the MIDL compiler on cygwin, you will need to set some +environment variables before configuring vlc. If you have a copy of +'Microsoft Visual C++ 6.0' installed, the following settings are +correct: + +export PATH=$PATH:"/cygdrive/c/Program Files/Microsoft Visual Studio/COMMON/MSDev98/Bin":"/cygdrive/c/Program Files/Microsoft Visual Studio/VC98/Bin" +export INCLUDE='C:\Program Files\Microsoft Visual Studio\VC98\Include' +export MIDL="midl" + +If you are cross-compiling on Linux, you can use 'widl' which is part of +the WINE project (http://www.winehq.com). At leat wine-dev-0.9.57 works, +the comand line to compile IDL should looks like the following : + +widl -I/usr/include/wine/windows/ \ + -h -H axvlc_idl.h -t -T axvlc.tlb -u -U axvlc_idl.c axvlc.idl + +NOTE: widl breaks compatibility with Visual Basic. If that is important +to you then you must use midl. + +II. Debugging + +The ActiveX control is compiled with verbose output by default, but you +will need to launch Internet Explorer from a Cygwin shell to see the +output. Alternatively, the plugin will also use the VLC preferences, so +if you enable the file logging interface through the player and save the +preferences, the control will automatically log its verbose output into +the designated file. + +Debugging the ActiveX control DLL with GNU GDB can be difficult. +Fortunately the ActiveX control can also be compiled as an executable +rather than a DLL. In ActiveX terms, this is called a local server. The +advantage of a local server is that it will never crash its client, +i.e. Internet Explorer, even if the local server crashes. The build +system does not currently allow to create an executable version of the +ActiveX control, you will need to manually define the BUILD_LOCALSERVER +pre-processor variable and modify the Makefile to exclude the '-shared' +option at the linking stage. Once this is done, launch axvlc.exe to have +a working Activex control. Please note, that executable version of the +ActiveX control will override any settings required for the DLL version, +which will no longer work until you (re)register it as shown in the +following section + +III. Local Install + +The VLC NSIS installer will install the ActiveX Control without +requiring any further manual intervention, but for people who like to +live on the edge, here are the steps you need to perform once you have +built the ActiveX Control. + +The ActiveX control DLL file may be copied anywhere on the target +machine, but before you can use the control, you will need to register +it with Windows by using the REGSVR32 command, as per following example: + +REGSVR32 C:\WINDOWS\AXVLC.DLL + +If the control needs to use external VLC plugins (i.e other than the +built-in ones), make sure that the plugin path is set in the registry as +per following example: + +[HKEY_LOCAL_MACHINE\Software\VideoLAN\VLC] +InstallDir="C:\Program Files\VideoLAN\VLC" + +The InstallDir must be the parent directory of the 'plugins' directory. + +WARNING: Both control and plugins must come from the same source build +tree. Otherwise, at best, the control will not play any content, +at worse it may crash Internet Explorer while attempting to load +incompatible plugins. + +IV. Internet Install + +The activex control may be installed from a remote through Internet +Installer if it is packaged up in a CAB file. The following link +explains how to achieve this + +http://msdn.microsoft.com/workshop/components/activex/packaging.asp + +For convenience, I have provided a sample axvlc.INF file, which assumes +that the VLC NSIS Installer has been packaged up a CAB file called +AXVLC.CAB. + +The ActiveX Control DLL file can also be distributed by itself if it has +been compiled with built-in VLC plugins; check developer information for +more information on built-in plugins. + diff --git a/support/3rd_party/vlc/sdk/activex/test.html b/support/3rd_party/vlc/sdk/activex/test.html new file mode 100644 index 0000000..f9c6429 --- /dev/null +++ b/support/3rd_party/vlc/sdk/activex/test.html @@ -0,0 +1,977 @@ + + + +VLC Plugin test page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      + MRL: +
                      + + + +
                      +
                      + + + + + + + + + + + +
                      + + + + + +
                      + +
                      + +
                      + +
                      +
                      + +
                      +
                      +
                      +
                      -:--:--/-:--:--
                      +
                      Idle...
                      +
                      +
                      + + +   + + 1x + +   + + + + + Volume: + + -- + + +
                      Playlist: + + + +   + +   + +
                      + + +
                      +
                      + Aspect Ratio: + +
                      Audio Channel: + + + + + +
                      Audio Track: + + -- + + + + + +
                      Video Subtitle: + + -- + + + +
                      Deinterlacing: + + + +
                      Marquee video filter: + + +
                      + + + +
                      +
                      Logo video filter: + + +
                      + + + +
                      +
                      + + Teletext page: +
                      + + +
                      +
                      + + + + diff --git a/support/3rd_party/vlc/sdk/include/vlc/deprecated.h b/support/3rd_party/vlc/sdk/include/vlc/deprecated.h new file mode 100644 index 0000000..27323a4 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/deprecated.h @@ -0,0 +1,489 @@ +/***************************************************************************** + * deprecated.h: libvlc deprecated API + ***************************************************************************** + * Copyright (C) 1998-2008 VLC authors and VideoLAN + * $Id$ + * + * Authors: Clément Stenac + * Jean-Paul Saman + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef LIBVLC_DEPRECATED_H +#define LIBVLC_DEPRECATED_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +/** + * \ingroup libvlc libvlc_media_player + * @{ + */ + +/** + * Get movie fps rate + * + * This function is provided for backward compatibility. It cannot deal with + * multiple video tracks. In LibVLC versions prior to 3.0, it would also fail + * if the file format did not convey the frame rate explicitly. + * + * \deprecated Consider using libvlc_media_tracks_get() instead. + * + * \param p_mi the Media Player + * \return frames per second (fps) for this playing movie, or 0 if unspecified + */ +LIBVLC_DEPRECATED +LIBVLC_API float libvlc_media_player_get_fps( libvlc_media_player_t *p_mi ); + +/** end bug */ + +/** + * \deprecated Use libvlc_media_player_set_nsobject() instead + */ +LIBVLC_DEPRECATED +LIBVLC_API void libvlc_media_player_set_agl ( libvlc_media_player_t *p_mi, uint32_t drawable ); + +/** + * \deprecated Use libvlc_media_player_get_nsobject() instead + */ +LIBVLC_DEPRECATED +LIBVLC_API uint32_t libvlc_media_player_get_agl ( libvlc_media_player_t *p_mi ); + +/** + * \deprecated Use libvlc_track_description_list_release() instead + */ +LIBVLC_DEPRECATED LIBVLC_API +void libvlc_track_description_release( libvlc_track_description_t *p_track_description ); + +/** @}*/ + +/** + * \ingroup libvlc libvlc_video + * @{ + */ + +/** + * Get current video height. + * \deprecated Use libvlc_video_get_size() instead. + * + * \param p_mi the media player + * \return the video pixel height or 0 if not applicable + */ +LIBVLC_DEPRECATED LIBVLC_API +int libvlc_video_get_height( libvlc_media_player_t *p_mi ); + +/** + * Get current video width. + * \deprecated Use libvlc_video_get_size() instead. + * + * \param p_mi the media player + * \return the video pixel width or 0 if not applicable + */ +LIBVLC_DEPRECATED LIBVLC_API +int libvlc_video_get_width( libvlc_media_player_t *p_mi ); + +/** + * Get the description of available titles. + * + * \param p_mi the media player + * \return list containing description of available titles. + * It must be freed with libvlc_track_description_list_release() + */ +LIBVLC_DEPRECATED LIBVLC_API libvlc_track_description_t * + libvlc_video_get_title_description( libvlc_media_player_t *p_mi ); + +/** + * Get the description of available chapters for specific title. + * + * \param p_mi the media player + * \param i_title selected title + * \return list containing description of available chapter for title i_title. + * It must be freed with libvlc_track_description_list_release() + */ +LIBVLC_DEPRECATED LIBVLC_API libvlc_track_description_t * + libvlc_video_get_chapter_description( libvlc_media_player_t *p_mi, int i_title ); + +/** + * Set new video subtitle file. + * \deprecated Use libvlc_media_player_add_slave() instead. + * + * \param p_mi the media player + * \param psz_subtitle new video subtitle file + * \return the success status (boolean) + */ +LIBVLC_DEPRECATED LIBVLC_API int +libvlc_video_set_subtitle_file( libvlc_media_player_t *p_mi, const char *psz_subtitle ); + +/** + * Toggle teletext transparent status on video output. + * \deprecated use libvlc_video_set_teletext() instead. + * + * \param p_mi the media player + */ +LIBVLC_DEPRECATED LIBVLC_API void +libvlc_toggle_teletext( libvlc_media_player_t *p_mi ); + +/** @}*/ + +/** + * \ingroup libvlc libvlc_audio + * @{ + */ + +/** + * Backward compatibility stub. Do not use in new code. + * \deprecated Use libvlc_audio_output_device_list_get() instead. + * \return always 0. + */ +LIBVLC_DEPRECATED LIBVLC_API +int libvlc_audio_output_device_count( libvlc_instance_t *p_instance, const char *psz_audio_output ); + +/** + * Backward compatibility stub. Do not use in new code. + * \deprecated Use libvlc_audio_output_device_list_get() instead. + * \return always NULL. + */ +LIBVLC_DEPRECATED LIBVLC_API +char *libvlc_audio_output_device_longname( libvlc_instance_t *p_instance, const char *psz_output, + int i_device ); + +/** + * Backward compatibility stub. Do not use in new code. + * \deprecated Use libvlc_audio_output_device_list_get() instead. + * \return always NULL. + */ +LIBVLC_DEPRECATED LIBVLC_API +char *libvlc_audio_output_device_id( libvlc_instance_t *p_instance, const char *psz_audio_output, int i_device ); + +/** + * Stub for backward compatibility. + * \return always -1. + */ +LIBVLC_DEPRECATED +LIBVLC_API int libvlc_audio_output_get_device_type( libvlc_media_player_t *p_mi ); + +/** + * Stub for backward compatibility. + */ +LIBVLC_DEPRECATED +LIBVLC_API void libvlc_audio_output_set_device_type( libvlc_media_player_t *p_mp, + int device_type ); + +/** @}*/ + +/** + * \ingroup libvlc libvlc_media + * @{ + */ + +/** + * Parse a media. + * + * This fetches (local) art, meta data and tracks information. + * The method is synchronous. + * + * \deprecated This function could block indefinitely. + * Use libvlc_media_parse_with_options() instead + * + * \see libvlc_media_parse_with_options + * \see libvlc_media_get_meta + * \see libvlc_media_get_tracks_info + * + * \param p_md media descriptor object + */ +LIBVLC_DEPRECATED LIBVLC_API void +libvlc_media_parse( libvlc_media_t *p_md ); + +/** + * Parse a media. + * + * This fetches (local) art, meta data and tracks information. + * The method is the asynchronous of libvlc_media_parse(). + * + * To track when this is over you can listen to libvlc_MediaParsedChanged + * event. However if the media was already parsed you will not receive this + * event. + * + * \deprecated You can't be sure to receive the libvlc_MediaParsedChanged + * event (you can wait indefinitely for this event). + * Use libvlc_media_parse_with_options() instead + * + * \see libvlc_media_parse + * \see libvlc_MediaParsedChanged + * \see libvlc_media_get_meta + * \see libvlc_media_get_tracks_info + * + * \param p_md media descriptor object + */ +LIBVLC_DEPRECATED LIBVLC_API void +libvlc_media_parse_async( libvlc_media_t *p_md ); + +/** + * Return true is the media descriptor object is parsed + * + * \deprecated This can return true in case of failure. + * Use libvlc_media_get_parsed_status() instead + * + * \see libvlc_MediaParsedChanged + * + * \param p_md media descriptor object + * \return true if media object has been parsed otherwise it returns false + * + * \libvlc_return_bool + */ +LIBVLC_DEPRECATED LIBVLC_API int + libvlc_media_is_parsed( libvlc_media_t *p_md ); + +/** + * Get media descriptor's elementary streams description + * + * Note, you need to call libvlc_media_parse() or play the media at least once + * before calling this function. + * Not doing this will result in an empty array. + * + * \deprecated Use libvlc_media_tracks_get() instead + * + * \param p_md media descriptor object + * \param tracks address to store an allocated array of Elementary Streams + * descriptions (must be freed by the caller) [OUT] + * + * \return the number of Elementary Streams + */ +LIBVLC_DEPRECATED LIBVLC_API +int libvlc_media_get_tracks_info( libvlc_media_t *p_md, + libvlc_media_track_info_t **tracks ); + +/** @}*/ + +/** + * \ingroup libvlc libvlc_media_list + * @{ + */ + +LIBVLC_DEPRECATED int + libvlc_media_list_add_file_content( libvlc_media_list_t * p_ml, + const char * psz_uri ); + +/** @}*/ + +/** + * \ingroup libvlc libvlc_media_discoverer + * @{ + */ + +/** + * \deprecated Use libvlc_media_discoverer_new() and libvlc_media_discoverer_start(). + */ +LIBVLC_DEPRECATED LIBVLC_API libvlc_media_discoverer_t * +libvlc_media_discoverer_new_from_name( libvlc_instance_t * p_inst, + const char * psz_name ); + +/** + * Get media service discover object its localized name. + * + * \deprecated Useless, use libvlc_media_discoverer_list_get() to get the + * longname of the service discovery. + * + * \param p_mdis media discover object + * \return localized name or NULL if the media_discoverer is not started + */ +LIBVLC_DEPRECATED LIBVLC_API char * +libvlc_media_discoverer_localized_name( libvlc_media_discoverer_t * p_mdis ); + +/** + * Get event manager from media service discover object. + * + * \deprecated Useless, media_discoverer events are only triggered when calling + * libvlc_media_discoverer_start() and libvlc_media_discoverer_stop(). + * + * \param p_mdis media service discover object + * \return event manager object. + */ +LIBVLC_DEPRECATED LIBVLC_API libvlc_event_manager_t * +libvlc_media_discoverer_event_manager( libvlc_media_discoverer_t * p_mdis ); + +/** @}*/ + +/** + * \ingroup libvlc libvlc_core + * @{ + */ + +/** + * Waits until an interface causes the instance to exit. + * You should start at least one interface first, using libvlc_add_intf(). + * + * \param p_instance the instance + * \warning This function wastes one thread doing basically nothing. + * libvlc_set_exit_handler() should be used instead. + */ +LIBVLC_DEPRECATED LIBVLC_API +void libvlc_wait( libvlc_instance_t *p_instance ); + + +/** @}*/ + +/** + * \ingroup libvlc_core + * \defgroup libvlc_log_deprecated LibVLC logging (legacy) + * @{ + */ + +/** This structure is opaque. It represents a libvlc log iterator */ +typedef struct libvlc_log_iterator_t libvlc_log_iterator_t; + +typedef struct libvlc_log_message_t +{ + int i_severity; /* 0=INFO, 1=ERR, 2=WARN, 3=DBG */ + const char *psz_type; /* module type */ + const char *psz_name; /* module name */ + const char *psz_header; /* optional header */ + const char *psz_message; /* message */ +} libvlc_log_message_t; + +/** + * Always returns minus one. + * This function is only provided for backward compatibility. + * + * \param p_instance ignored + * \return always -1 + */ +LIBVLC_DEPRECATED LIBVLC_API +unsigned libvlc_get_log_verbosity( const libvlc_instance_t *p_instance ); + +/** + * This function does nothing. + * It is only provided for backward compatibility. + * + * \param p_instance ignored + * \param level ignored + */ +LIBVLC_DEPRECATED LIBVLC_API +void libvlc_set_log_verbosity( libvlc_instance_t *p_instance, unsigned level ); + +/** + * This function does nothing useful. + * It is only provided for backward compatibility. + * + * \param p_instance libvlc instance + * \return an unique pointer or NULL on error + */ +LIBVLC_DEPRECATED LIBVLC_API +libvlc_log_t *libvlc_log_open( libvlc_instance_t *p_instance ); + +/** + * Frees memory allocated by libvlc_log_open(). + * + * \param p_log libvlc log instance or NULL + */ +LIBVLC_DEPRECATED LIBVLC_API +void libvlc_log_close( libvlc_log_t *p_log ); + +/** + * Always returns zero. + * This function is only provided for backward compatibility. + * + * \param p_log ignored + * \return always zero + */ +LIBVLC_DEPRECATED LIBVLC_API +unsigned libvlc_log_count( const libvlc_log_t *p_log ); + +/** + * This function does nothing. + * It is only provided for backward compatibility. + * + * \param p_log ignored + */ +LIBVLC_DEPRECATED LIBVLC_API +void libvlc_log_clear( libvlc_log_t *p_log ); + +/** + * This function does nothing useful. + * It is only provided for backward compatibility. + * + * \param p_log ignored + * \return an unique pointer or NULL on error or if the parameter was NULL + */ +LIBVLC_DEPRECATED LIBVLC_API +libvlc_log_iterator_t *libvlc_log_get_iterator( const libvlc_log_t *p_log ); + +/** + * Frees memory allocated by libvlc_log_get_iterator(). + * + * \param p_iter libvlc log iterator or NULL + */ +LIBVLC_DEPRECATED LIBVLC_API +void libvlc_log_iterator_free( libvlc_log_iterator_t *p_iter ); + +/** + * Always returns zero. + * This function is only provided for backward compatibility. + * + * \param p_iter ignored + * \return always zero + */ +LIBVLC_DEPRECATED LIBVLC_API +int libvlc_log_iterator_has_next( const libvlc_log_iterator_t *p_iter ); + +/** + * Always returns NULL. + * This function is only provided for backward compatibility. + * + * \param p_iter libvlc log iterator or NULL + * \param p_buf ignored + * \return always NULL + */ +LIBVLC_DEPRECATED LIBVLC_API +libvlc_log_message_t *libvlc_log_iterator_next( libvlc_log_iterator_t *p_iter, + libvlc_log_message_t *p_buf ); + +/** @}*/ + +/** + * \ingroup libvlc + * \defgroup libvlc_playlist LibVLC playlist (legacy) + * @deprecated Use @ref libvlc_media_list instead. + * @{ + * \file + * LibVLC deprecated playlist API + */ + +/** + * Start playing (if there is any item in the playlist). + * + * Additionnal playlist item options can be specified for addition to the + * item before it is played. + * + * \param p_instance the playlist instance + * \param i_id the item to play. If this is a negative number, the next + * item will be selected. Otherwise, the item with the given ID will be + * played + * \param i_options the number of options to add to the item + * \param ppsz_options the options to add to the item + */ +LIBVLC_DEPRECATED LIBVLC_API +void libvlc_playlist_play( libvlc_instance_t *p_instance, int i_id, + int i_options, char **ppsz_options ); + +/** @}*/ + +# ifdef __cplusplus +} +# endif + +#endif /* _LIBVLC_DEPRECATED_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc.h new file mode 100644 index 0000000..b12d900 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc.h @@ -0,0 +1,580 @@ +/***************************************************************************** + * libvlc.h: libvlc external API + ***************************************************************************** + * Copyright (C) 1998-2009 VLC authors and VideoLAN + * $Id$ + * + * Authors: Clément Stenac + * Jean-Paul Saman + * Pierre d'Herbemont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * \defgroup libvlc LibVLC + * LibVLC is the external programming interface of the VLC media player. + * It is used to embed VLC into other applications or frameworks. + * @{ + * \file + * LibVLC core external API + */ + +#ifndef VLC_LIBVLC_H +#define VLC_LIBVLC_H 1 + +#if defined (_WIN32) && defined (DLL_EXPORT) +# define LIBVLC_API __declspec(dllexport) +#elif defined (__GNUC__) && (__GNUC__ >= 4) +# define LIBVLC_API __attribute__((visibility("default"))) +#else +# define LIBVLC_API +#endif + +#ifdef __LIBVLC__ +/* Avoid unhelpful warnings from libvlc with our deprecated APIs */ +# define LIBVLC_DEPRECATED +#elif defined(__GNUC__) && \ + (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define LIBVLC_DEPRECATED __attribute__((deprecated)) +#else +# define LIBVLC_DEPRECATED +#endif + +#include +#include +#include + +# ifdef __cplusplus +extern "C" { +# endif + +/** \defgroup libvlc_core LibVLC core + * \ingroup libvlc + * Before it can do anything useful, LibVLC must be initialized. + * You can create one (or more) instance(s) of LibVLC in a given process, + * with libvlc_new() and destroy them with libvlc_release(). + * + * \version Unless otherwise stated, these functions are available + * from LibVLC versions numbered 1.1.0 or more. + * Earlier versions (0.9.x and 1.0.x) are not compatible. + * @{ + */ + +/** This structure is opaque. It represents a libvlc instance */ +typedef struct libvlc_instance_t libvlc_instance_t; + +typedef int64_t libvlc_time_t; + +/** \defgroup libvlc_error LibVLC error handling + * @{ + */ + +/** + * A human-readable error message for the last LibVLC error in the calling + * thread. The resulting string is valid until another error occurs (at least + * until the next LibVLC call). + * + * @warning + * This will be NULL if there was no error. + */ +LIBVLC_API const char *libvlc_errmsg (void); + +/** + * Clears the LibVLC error status for the current thread. This is optional. + * By default, the error status is automatically overridden when a new error + * occurs, and destroyed when the thread exits. + */ +LIBVLC_API void libvlc_clearerr (void); + +/** + * Sets the LibVLC error status and message for the current thread. + * Any previous error is overridden. + * \param fmt the format string + * \param ap the arguments + * \return a nul terminated string in any case + */ +LIBVLC_API const char *libvlc_vprinterr (const char *fmt, va_list ap); + +/** + * Sets the LibVLC error status and message for the current thread. + * Any previous error is overridden. + * \param fmt the format string + * \param args the arguments + * \return a nul terminated string in any case + */ +LIBVLC_API const char *libvlc_printerr (const char *fmt, ...); + +/**@} */ + +/** + * Create and initialize a libvlc instance. + * This functions accept a list of "command line" arguments similar to the + * main(). These arguments affect the LibVLC instance default configuration. + * + * \note + * LibVLC may create threads. Therefore, any thread-unsafe process + * initialization must be performed before calling libvlc_new(). In particular + * and where applicable: + * - setlocale() and textdomain(), + * - setenv(), unsetenv() and putenv(), + * - with the X11 display system, XInitThreads() + * (see also libvlc_media_player_set_xwindow()) and + * - on Microsoft Windows, SetErrorMode(). + * - sigprocmask() shall never be invoked; pthread_sigmask() can be used. + * + * On POSIX systems, the SIGCHLD signal must not be ignored, i.e. the + * signal handler must set to SIG_DFL or a function pointer, not SIG_IGN. + * Also while LibVLC is active, the wait() function shall not be called, and + * any call to waitpid() shall use a strictly positive value for the first + * parameter (i.e. the PID). Failure to follow those rules may lead to a + * deadlock or a busy loop. + * Also on POSIX systems, it is recommended that the SIGPIPE signal be blocked, + * even if it is not, in principles, necessary, e.g.: + * @code + sigset_t set; + + signal(SIGCHLD, SIG_DFL); + sigemptyset(&set); + sigaddset(&set, SIGPIPE); + pthread_sigmask(SIG_BLOCK, &set, NULL); + * @endcode + * + * On Microsoft Windows Vista/2008, the process error mode + * SEM_FAILCRITICALERRORS flag must be set before using LibVLC. + * On later versions, that is optional and unnecessary. + * Also on Microsoft Windows (Vista and any later version), setting the default + * DLL directories to SYSTEM32 exclusively is strongly recommended for + * security reasons: + * @code + SetErrorMode(SEM_FAILCRITICALERRORS); + SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32); + * @endcode + * + * \version + * Arguments are meant to be passed from the command line to LibVLC, just like + * VLC media player does. The list of valid arguments depends on the LibVLC + * version, the operating system and platform, and set of available LibVLC + * plugins. Invalid or unsupported arguments will cause the function to fail + * (i.e. return NULL). Also, some arguments may alter the behaviour or + * otherwise interfere with other LibVLC functions. + * + * \warning + * There is absolutely no warranty or promise of forward, backward and + * cross-platform compatibility with regards to libvlc_new() arguments. + * We recommend that you do not use them, other than when debugging. + * + * \param argc the number of arguments (should be 0) + * \param argv list of arguments (should be NULL) + * \return the libvlc instance or NULL in case of error + */ +LIBVLC_API libvlc_instance_t * +libvlc_new( int argc , const char *const *argv ); + +/** + * Decrement the reference count of a libvlc instance, and destroy it + * if it reaches zero. + * + * \param p_instance the instance to destroy + */ +LIBVLC_API void libvlc_release( libvlc_instance_t *p_instance ); + +/** + * Increments the reference count of a libvlc instance. + * The initial reference count is 1 after libvlc_new() returns. + * + * \param p_instance the instance to reference + */ +LIBVLC_API void libvlc_retain( libvlc_instance_t *p_instance ); + +/** + * Try to start a user interface for the libvlc instance. + * + * \param p_instance the instance + * \param name interface name, or NULL for default + * \return 0 on success, -1 on error. + */ +LIBVLC_API +int libvlc_add_intf( libvlc_instance_t *p_instance, const char *name ); + +/** + * Registers a callback for the LibVLC exit event. This is mostly useful if + * the VLC playlist and/or at least one interface are started with + * libvlc_playlist_play() or libvlc_add_intf() respectively. + * Typically, this function will wake up your application main loop (from + * another thread). + * + * \note This function should be called before the playlist or interface are + * started. Otherwise, there is a small race condition: the exit event could + * be raised before the handler is registered. + * + * \param p_instance LibVLC instance + * \param cb callback to invoke when LibVLC wants to exit, + * or NULL to disable the exit handler (as by default) + * \param opaque data pointer for the callback + * \warning This function and libvlc_wait() cannot be used at the same time. + */ +LIBVLC_API +void libvlc_set_exit_handler( libvlc_instance_t *p_instance, + void (*cb) (void *), void *opaque ); + +/** + * Sets the application name. LibVLC passes this as the user agent string + * when a protocol requires it. + * + * \param p_instance LibVLC instance + * \param name human-readable application name, e.g. "FooBar player 1.2.3" + * \param http HTTP User Agent, e.g. "FooBar/1.2.3 Python/2.6.0" + * \version LibVLC 1.1.1 or later + */ +LIBVLC_API +void libvlc_set_user_agent( libvlc_instance_t *p_instance, + const char *name, const char *http ); + +/** + * Sets some meta-information about the application. + * See also libvlc_set_user_agent(). + * + * \param p_instance LibVLC instance + * \param id Java-style application identifier, e.g. "com.acme.foobar" + * \param version application version numbers, e.g. "1.2.3" + * \param icon application icon name, e.g. "foobar" + * \version LibVLC 2.1.0 or later. + */ +LIBVLC_API +void libvlc_set_app_id( libvlc_instance_t *p_instance, const char *id, + const char *version, const char *icon ); + +/** + * Retrieve libvlc version. + * + * Example: "1.1.0-git The Luggage" + * + * \return a string containing the libvlc version + */ +LIBVLC_API const char * libvlc_get_version(void); + +/** + * Retrieve libvlc compiler version. + * + * Example: "gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu6)" + * + * \return a string containing the libvlc compiler version + */ +LIBVLC_API const char * libvlc_get_compiler(void); + +/** + * Retrieve libvlc changeset. + * + * Example: "aa9bce0bc4" + * + * \return a string containing the libvlc changeset + */ +LIBVLC_API const char * libvlc_get_changeset(void); + +/** + * Frees an heap allocation returned by a LibVLC function. + * If you know you're using the same underlying C run-time as the LibVLC + * implementation, then you can call ANSI C free() directly instead. + * + * \param ptr the pointer + */ +LIBVLC_API void libvlc_free( void *ptr ); + +/** \defgroup libvlc_event LibVLC asynchronous events + * LibVLC emits asynchronous events. + * + * Several LibVLC objects (such @ref libvlc_instance_t as + * @ref libvlc_media_player_t) generate events asynchronously. Each of them + * provides @ref libvlc_event_manager_t event manager. You can subscribe to + * events with libvlc_event_attach() and unsubscribe with + * libvlc_event_detach(). + * @{ + */ + +/** + * Event manager that belongs to a libvlc object, and from whom events can + * be received. + */ +typedef struct libvlc_event_manager_t libvlc_event_manager_t; + +struct libvlc_event_t; + +/** + * Type of a LibVLC event. + */ +typedef int libvlc_event_type_t; + +/** + * Callback function notification + * \param p_event the event triggering the callback + */ +typedef void ( *libvlc_callback_t )( const struct libvlc_event_t *p_event, void *p_data ); + +/** + * Register for an event notification. + * + * \param p_event_manager the event manager to which you want to attach to. + * Generally it is obtained by vlc_my_object_event_manager() where + * my_object is the object you want to listen to. + * \param i_event_type the desired event to which we want to listen + * \param f_callback the function to call when i_event_type occurs + * \param user_data user provided data to carry with the event + * \return 0 on success, ENOMEM on error + */ +LIBVLC_API int libvlc_event_attach( libvlc_event_manager_t *p_event_manager, + libvlc_event_type_t i_event_type, + libvlc_callback_t f_callback, + void *user_data ); + +/** + * Unregister an event notification. + * + * \param p_event_manager the event manager + * \param i_event_type the desired event to which we want to unregister + * \param f_callback the function to call when i_event_type occurs + * \param p_user_data user provided data to carry with the event + */ +LIBVLC_API void libvlc_event_detach( libvlc_event_manager_t *p_event_manager, + libvlc_event_type_t i_event_type, + libvlc_callback_t f_callback, + void *p_user_data ); + +/** + * Get an event's type name. + * + * \param event_type the desired event + */ +LIBVLC_API const char * libvlc_event_type_name( libvlc_event_type_t event_type ); + +/** @} */ + +/** \defgroup libvlc_log LibVLC logging + * libvlc_log_* functions provide access to the LibVLC messages log. + * This is used for logging and debugging. + * @{ + */ + +/** + * Logging messages level. + * \note Future LibVLC versions may define new levels. + */ +enum libvlc_log_level +{ + LIBVLC_DEBUG=0, /**< Debug message */ + LIBVLC_NOTICE=2, /**< Important informational message */ + LIBVLC_WARNING=3, /**< Warning (potential error) message */ + LIBVLC_ERROR=4 /**< Error message */ +}; + +typedef struct vlc_log_t libvlc_log_t; + +/** + * Gets log message debug infos. + * + * This function retrieves self-debug information about a log message: + * - the name of the VLC module emitting the message, + * - the name of the source code module (i.e. file) and + * - the line number within the source code module. + * + * The returned module name and file name will be NULL if unknown. + * The returned line number will similarly be zero if unknown. + * + * \param ctx message context (as passed to the @ref libvlc_log_cb callback) + * \param module module name storage (or NULL) [OUT] + * \param file source code file name storage (or NULL) [OUT] + * \param line source code file line number storage (or NULL) [OUT] + * \warning The returned module name and source code file name, if non-NULL, + * are only valid until the logging callback returns. + * + * \version LibVLC 2.1.0 or later + */ +LIBVLC_API void libvlc_log_get_context(const libvlc_log_t *ctx, + const char **module, const char **file, unsigned *line); + +/** + * Gets log message info. + * + * This function retrieves meta-information about a log message: + * - the type name of the VLC object emitting the message, + * - the object header if any, and + * - a temporaly-unique object identifier. + * + * This information is mainly meant for manual troubleshooting. + * + * The returned type name may be "generic" if unknown, but it cannot be NULL. + * The returned header will be NULL if unset; in current versions, the header + * is used to distinguish for VLM inputs. + * The returned object ID will be zero if the message is not associated with + * any VLC object. + * + * \param ctx message context (as passed to the @ref libvlc_log_cb callback) + * \param name object name storage (or NULL) [OUT] + * \param header object header (or NULL) [OUT] + * \param line source code file line number storage (or NULL) [OUT] + * \warning The returned module name and source code file name, if non-NULL, + * are only valid until the logging callback returns. + * + * \version LibVLC 2.1.0 or later + */ +LIBVLC_API void libvlc_log_get_object(const libvlc_log_t *ctx, + const char **name, const char **header, uintptr_t *id); + +/** + * Callback prototype for LibVLC log message handler. + * + * \param data data pointer as given to libvlc_log_set() + * \param level message level (@ref libvlc_log_level) + * \param ctx message context (meta-information about the message) + * \param fmt printf() format string (as defined by ISO C11) + * \param args variable argument list for the format + * \note Log message handlers must be thread-safe. + * \warning The message context pointer, the format string parameters and the + * variable arguments are only valid until the callback returns. + */ +typedef void (*libvlc_log_cb)(void *data, int level, const libvlc_log_t *ctx, + const char *fmt, va_list args); + +/** + * Unsets the logging callback. + * + * This function deregisters the logging callback for a LibVLC instance. + * This is rarely needed as the callback is implicitly unset when the instance + * is destroyed. + * + * \note This function will wait for any pending callbacks invocation to + * complete (causing a deadlock if called from within the callback). + * + * \param p_instance libvlc instance + * \version LibVLC 2.1.0 or later + */ +LIBVLC_API void libvlc_log_unset( libvlc_instance_t *p_instance ); + +/** + * Sets the logging callback for a LibVLC instance. + * + * This function is thread-safe: it will wait for any pending callbacks + * invocation to complete. + * + * \param cb callback function pointer + * \param data opaque data pointer for the callback function + * + * \note Some log messages (especially debug) are emitted by LibVLC while + * is being initialized. These messages cannot be captured with this interface. + * + * \warning A deadlock may occur if this function is called from the callback. + * + * \param p_instance libvlc instance + * \version LibVLC 2.1.0 or later + */ +LIBVLC_API void libvlc_log_set( libvlc_instance_t *p_instance, + libvlc_log_cb cb, void *data ); + + +/** + * Sets up logging to a file. + * \param p_instance libvlc instance + * \param stream FILE pointer opened for writing + * (the FILE pointer must remain valid until libvlc_log_unset()) + * \version LibVLC 2.1.0 or later + */ +LIBVLC_API void libvlc_log_set_file( libvlc_instance_t *p_instance, FILE *stream ); + +/** @} */ + +/** + * Description of a module. + */ +typedef struct libvlc_module_description_t +{ + char *psz_name; + char *psz_shortname; + char *psz_longname; + char *psz_help; + struct libvlc_module_description_t *p_next; +} libvlc_module_description_t; + +/** + * Release a list of module descriptions. + * + * \param p_list the list to be released + */ +LIBVLC_API +void libvlc_module_description_list_release( libvlc_module_description_t *p_list ); + +/** + * Returns a list of audio filters that are available. + * + * \param p_instance libvlc instance + * + * \return a list of module descriptions. It should be freed with libvlc_module_description_list_release(). + * In case of an error, NULL is returned. + * + * \see libvlc_module_description_t + * \see libvlc_module_description_list_release + */ +LIBVLC_API +libvlc_module_description_t *libvlc_audio_filter_list_get( libvlc_instance_t *p_instance ); + +/** + * Returns a list of video filters that are available. + * + * \param p_instance libvlc instance + * + * \return a list of module descriptions. It should be freed with libvlc_module_description_list_release(). + * In case of an error, NULL is returned. + * + * \see libvlc_module_description_t + * \see libvlc_module_description_list_release + */ +LIBVLC_API +libvlc_module_description_t *libvlc_video_filter_list_get( libvlc_instance_t *p_instance ); + +/** @} */ + +/** \defgroup libvlc_clock LibVLC time + * These functions provide access to the LibVLC time/clock. + * @{ + */ + +/** + * Return the current time as defined by LibVLC. The unit is the microsecond. + * Time increases monotonically (regardless of time zone changes and RTC + * adjustements). + * The origin is arbitrary but consistent across the whole system + * (e.g. the system uptim, the time since the system was booted). + * \note On systems that support it, the POSIX monotonic clock is used. + */ +LIBVLC_API +int64_t libvlc_clock(void); + +/** + * Return the delay (in microseconds) until a certain timestamp. + * \param pts timestamp + * \return negative if timestamp is in the past, + * positive if it is in the future + */ +static inline int64_t libvlc_delay(int64_t pts) +{ + return pts - libvlc_clock(); +} + +/** @} */ + +# ifdef __cplusplus +} +# endif + +#endif /** @} */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc_dialog.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc_dialog.h new file mode 100644 index 0000000..b176b93 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc_dialog.h @@ -0,0 +1,241 @@ +/***************************************************************************** + * libvlc_dialog.h: libvlc dialog API + ***************************************************************************** + * Copyright © 2016 VLC authors and VideoLAN + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef LIBVLC_DIALOG_H +#define LIBVLC_DIALOG_H 1 + +#include + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct libvlc_dialog_id libvlc_dialog_id; + +/** + * @defgroup libvlc_dialog LibVLC dialog + * @ingroup libvlc + * @{ + * @file + * LibVLC dialog external API + */ + +typedef enum libvlc_dialog_question_type +{ + LIBVLC_DIALOG_QUESTION_NORMAL, + LIBVLC_DIALOG_QUESTION_WARNING, + LIBVLC_DIALOG_QUESTION_CRITICAL, +} libvlc_dialog_question_type; + +/** + * Dialog callbacks to be implemented + */ +typedef struct libvlc_dialog_cbs +{ + /** + * Called when an error message needs to be displayed + * + * @param p_data opaque pointer for the callback + * @param psz_title title of the dialog + * @param psz_text text of the dialog + */ + void (*pf_display_error)(void *p_data, const char *psz_title, + const char *psz_text); + + /** + * Called when a login dialog needs to be displayed + * + * You can interact with this dialog by calling libvlc_dialog_post_login() + * to post an answer or libvlc_dialog_dismiss() to cancel this dialog. + * + * @note to receive this callback, libvlc_dialog_cbs.pf_cancel should not be + * NULL. + * + * @param p_data opaque pointer for the callback + * @param p_id id used to interact with the dialog + * @param psz_title title of the dialog + * @param psz_text text of the dialog + * @param psz_default_username user name that should be set on the user form + * @param b_ask_store if true, ask the user if he wants to save the + * credentials + */ + void (*pf_display_login)(void *p_data, libvlc_dialog_id *p_id, + const char *psz_title, const char *psz_text, + const char *psz_default_username, + bool b_ask_store); + + /** + * Called when a question dialog needs to be displayed + * + * You can interact with this dialog by calling libvlc_dialog_post_action() + * to post an answer or libvlc_dialog_dismiss() to cancel this dialog. + * + * @note to receive this callback, libvlc_dialog_cbs.pf_cancel should not be + * NULL. + * + * @param p_data opaque pointer for the callback + * @param p_id id used to interact with the dialog + * @param psz_title title of the dialog + * @param psz_text text of the dialog + * @param i_type question type (or severity) of the dialog + * @param psz_cancel text of the cancel button + * @param psz_action1 text of the first button, if NULL, don't display this + * button + * @param psz_action2 text of the second button, if NULL, don't display + * this button + */ + void (*pf_display_question)(void *p_data, libvlc_dialog_id *p_id, + const char *psz_title, const char *psz_text, + libvlc_dialog_question_type i_type, + const char *psz_cancel, const char *psz_action1, + const char *psz_action2); + + /** + * Called when a progress dialog needs to be displayed + * + * If cancellable (psz_cancel != NULL), you can cancel this dialog by + * calling libvlc_dialog_dismiss() + * + * @note to receive this callback, libvlc_dialog_cbs.pf_cancel and + * libvlc_dialog_cbs.pf_update_progress should not be NULL. + * + * @param p_data opaque pointer for the callback + * @param p_id id used to interact with the dialog + * @param psz_title title of the dialog + * @param psz_text text of the dialog + * @param b_indeterminate true if the progress dialog is indeterminate + * @param f_position initial position of the progress bar (between 0.0 and + * 1.0) + * @param psz_cancel text of the cancel button, if NULL the dialog is not + * cancellable + */ + void (*pf_display_progress)(void *p_data, libvlc_dialog_id *p_id, + const char *psz_title, const char *psz_text, + bool b_indeterminate, float f_position, + const char *psz_cancel); + + /** + * Called when a displayed dialog needs to be cancelled + * + * The implementation must call libvlc_dialog_dismiss() to really release + * the dialog. + * + * @param p_data opaque pointer for the callback + * @param p_id id of the dialog + */ + void (*pf_cancel)(void *p_data, libvlc_dialog_id *p_id); + + /** + * Called when a progress dialog needs to be updated + * + * @param p_data opaque pointer for the callback + * @param p_id id of the dialog + * @param f_position osition of the progress bar (between 0.0 and 1.0) + * @param psz_text new text of the progress dialog + */ + void (*pf_update_progress)(void *p_data, libvlc_dialog_id *p_id, + float f_position, const char *psz_text); +} libvlc_dialog_cbs; + +/** + * Register callbacks in order to handle VLC dialogs + * + * @version LibVLC 3.0.0 and later. + * + * @param p_cbs a pointer to callbacks, or NULL to unregister callbacks. + * @param p_data opaque pointer for the callback + */ +LIBVLC_API void +libvlc_dialog_set_callbacks(libvlc_instance_t *p_instance, + const libvlc_dialog_cbs *p_cbs, void *p_data); + +/** + * Associate an opaque pointer with the dialog id + * + * @version LibVLC 3.0.0 and later. + */ +LIBVLC_API void +libvlc_dialog_set_context(libvlc_dialog_id *p_id, void *p_context); + +/** + * Return the opaque pointer associated with the dialog id + * + * @version LibVLC 3.0.0 and later. + */ +LIBVLC_API void * +libvlc_dialog_get_context(libvlc_dialog_id *p_id); + +/** + * Post a login answer + * + * After this call, p_id won't be valid anymore + * + * @see libvlc_dialog_cbs.pf_display_login + * + * @version LibVLC 3.0.0 and later. + * + * @param p_id id of the dialog + * @param psz_username valid and non empty string + * @param psz_password valid string (can be empty) + * @param b_store if true, store the credentials + * @return 0 on success, or -1 on error + */ +LIBVLC_API int +libvlc_dialog_post_login(libvlc_dialog_id *p_id, const char *psz_username, + const char *psz_password, bool b_store); + +/** + * Post a question answer + * + * After this call, p_id won't be valid anymore + * + * @see libvlc_dialog_cbs.pf_display_question + * + * @version LibVLC 3.0.0 and later. + * + * @param p_id id of the dialog + * @param i_action 1 for action1, 2 for action2 + * @return 0 on success, or -1 on error + */ +LIBVLC_API int +libvlc_dialog_post_action(libvlc_dialog_id *p_id, int i_action); + +/** + * Dismiss a dialog + * + * After this call, p_id won't be valid anymore + * + * @see libvlc_dialog_cbs.pf_cancel + * + * @version LibVLC 3.0.0 and later. + * + * @param p_id id of the dialog + * @return 0 on success, or -1 on error + */ +LIBVLC_API int +libvlc_dialog_dismiss(libvlc_dialog_id *p_id); + +/** @} */ + +# ifdef __cplusplus +} +# endif + +#endif /* LIBVLC_DIALOG_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc_events.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc_events.h new file mode 100644 index 0000000..f8b0e9b --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc_events.h @@ -0,0 +1,296 @@ +/***************************************************************************** + * libvlc_events.h: libvlc_events external API structure + ***************************************************************************** + * Copyright (C) 1998-2010 VLC authors and VideoLAN + * $Id $ + * + * Authors: Filippo Carone + * Pierre d'Herbemont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef LIBVLC_EVENTS_H +#define LIBVLC_EVENTS_H 1 + +/** + * \file + * This file defines libvlc_event external API + */ + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct libvlc_renderer_item_t libvlc_renderer_item_t; + +/** + * \ingroup libvlc_event + * @{ + */ + +/** + * Event types + */ +enum libvlc_event_e { + /* Append new event types at the end of a category. + * Do not remove, insert or re-order any entry. + * Keep this in sync with lib/event.c:libvlc_event_type_name(). */ + libvlc_MediaMetaChanged=0, + libvlc_MediaSubItemAdded, + libvlc_MediaDurationChanged, + libvlc_MediaParsedChanged, + libvlc_MediaFreed, + libvlc_MediaStateChanged, + libvlc_MediaSubItemTreeAdded, + + libvlc_MediaPlayerMediaChanged=0x100, + libvlc_MediaPlayerNothingSpecial, + libvlc_MediaPlayerOpening, + libvlc_MediaPlayerBuffering, + libvlc_MediaPlayerPlaying, + libvlc_MediaPlayerPaused, + libvlc_MediaPlayerStopped, + libvlc_MediaPlayerForward, + libvlc_MediaPlayerBackward, + libvlc_MediaPlayerEndReached, + libvlc_MediaPlayerEncounteredError, + libvlc_MediaPlayerTimeChanged, + libvlc_MediaPlayerPositionChanged, + libvlc_MediaPlayerSeekableChanged, + libvlc_MediaPlayerPausableChanged, + libvlc_MediaPlayerTitleChanged, + libvlc_MediaPlayerSnapshotTaken, + libvlc_MediaPlayerLengthChanged, + libvlc_MediaPlayerVout, + libvlc_MediaPlayerScrambledChanged, + libvlc_MediaPlayerESAdded, + libvlc_MediaPlayerESDeleted, + libvlc_MediaPlayerESSelected, + libvlc_MediaPlayerCorked, + libvlc_MediaPlayerUncorked, + libvlc_MediaPlayerMuted, + libvlc_MediaPlayerUnmuted, + libvlc_MediaPlayerAudioVolume, + libvlc_MediaPlayerAudioDevice, + libvlc_MediaPlayerChapterChanged, + + libvlc_MediaListItemAdded=0x200, + libvlc_MediaListWillAddItem, + libvlc_MediaListItemDeleted, + libvlc_MediaListWillDeleteItem, + libvlc_MediaListEndReached, + + libvlc_MediaListViewItemAdded=0x300, + libvlc_MediaListViewWillAddItem, + libvlc_MediaListViewItemDeleted, + libvlc_MediaListViewWillDeleteItem, + + libvlc_MediaListPlayerPlayed=0x400, + libvlc_MediaListPlayerNextItemSet, + libvlc_MediaListPlayerStopped, + + /** + * \deprecated Useless event, it will be triggered only when calling + * libvlc_media_discoverer_start() + */ + libvlc_MediaDiscovererStarted=0x500, + /** + * \deprecated Useless event, it will be triggered only when calling + * libvlc_media_discoverer_stop() + */ + libvlc_MediaDiscovererEnded, + + libvlc_RendererDiscovererItemAdded, + libvlc_RendererDiscovererItemDeleted, + + libvlc_VlmMediaAdded=0x600, + libvlc_VlmMediaRemoved, + libvlc_VlmMediaChanged, + libvlc_VlmMediaInstanceStarted, + libvlc_VlmMediaInstanceStopped, + libvlc_VlmMediaInstanceStatusInit, + libvlc_VlmMediaInstanceStatusOpening, + libvlc_VlmMediaInstanceStatusPlaying, + libvlc_VlmMediaInstanceStatusPause, + libvlc_VlmMediaInstanceStatusEnd, + libvlc_VlmMediaInstanceStatusError +}; + +/** + * A LibVLC event + */ +typedef struct libvlc_event_t +{ + int type; /**< Event type (see @ref libvlc_event_e) */ + void *p_obj; /**< Object emitting the event */ + union + { + /* media descriptor */ + struct + { + libvlc_meta_t meta_type; + } media_meta_changed; + struct + { + libvlc_media_t * new_child; + } media_subitem_added; + struct + { + int64_t new_duration; + } media_duration_changed; + struct + { + int new_status; /**< see @ref libvlc_media_parsed_status_t */ + } media_parsed_changed; + struct + { + libvlc_media_t * md; + } media_freed; + struct + { + int new_state; /**< see @ref libvlc_state_t */ + } media_state_changed; + struct + { + libvlc_media_t * item; + } media_subitemtree_added; + + /* media instance */ + struct + { + float new_cache; + } media_player_buffering; + struct + { + int new_chapter; + } media_player_chapter_changed; + struct + { + float new_position; + } media_player_position_changed; + struct + { + libvlc_time_t new_time; + } media_player_time_changed; + struct + { + int new_title; + } media_player_title_changed; + struct + { + int new_seekable; + } media_player_seekable_changed; + struct + { + int new_pausable; + } media_player_pausable_changed; + struct + { + int new_scrambled; + } media_player_scrambled_changed; + struct + { + int new_count; + } media_player_vout; + + /* media list */ + struct + { + libvlc_media_t * item; + int index; + } media_list_item_added; + struct + { + libvlc_media_t * item; + int index; + } media_list_will_add_item; + struct + { + libvlc_media_t * item; + int index; + } media_list_item_deleted; + struct + { + libvlc_media_t * item; + int index; + } media_list_will_delete_item; + + /* media list player */ + struct + { + libvlc_media_t * item; + } media_list_player_next_item_set; + + /* snapshot taken */ + struct + { + char* psz_filename ; + } media_player_snapshot_taken ; + + /* Length changed */ + struct + { + libvlc_time_t new_length; + } media_player_length_changed; + + /* VLM media */ + struct + { + const char * psz_media_name; + const char * psz_instance_name; + } vlm_media_event; + + /* Extra MediaPlayer */ + struct + { + libvlc_media_t * new_media; + } media_player_media_changed; + + struct + { + libvlc_track_type_t i_type; + int i_id; + } media_player_es_changed; + + struct + { + float volume; + } media_player_audio_volume; + + struct + { + const char *device; + } media_player_audio_device; + + struct + { + libvlc_renderer_item_t *item; + } renderer_discoverer_item_added; + struct + { + libvlc_renderer_item_t *item; + } renderer_discoverer_item_deleted; + } u; /**< Type-dependent event description */ +} libvlc_event_t; + + +/**@} */ + +# ifdef __cplusplus +} +# endif + +#endif /* _LIBVLC_EVENTS_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc_media.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media.h new file mode 100644 index 0000000..0195049 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media.h @@ -0,0 +1,899 @@ +/***************************************************************************** + * libvlc_media.h: libvlc external API + ***************************************************************************** + * Copyright (C) 1998-2009 VLC authors and VideoLAN + * $Id$ + * + * Authors: Clément Stenac + * Jean-Paul Saman + * Pierre d'Herbemont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_LIBVLC_MEDIA_H +#define VLC_LIBVLC_MEDIA_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +#if defined(_MSC_VER) +#include +typedef SSIZE_T ssize_t; +#endif + + +/** \defgroup libvlc_media LibVLC media + * \ingroup libvlc + * @ref libvlc_media_t is an abstract representation of a playable media. + * It consists of a media location and various optional meta data. + * @{ + * \file + * LibVLC media item/descriptor external API + */ + +typedef struct libvlc_media_t libvlc_media_t; + +/** Meta data types */ +typedef enum libvlc_meta_t { + libvlc_meta_Title, + libvlc_meta_Artist, + libvlc_meta_Genre, + libvlc_meta_Copyright, + libvlc_meta_Album, + libvlc_meta_TrackNumber, + libvlc_meta_Description, + libvlc_meta_Rating, + libvlc_meta_Date, + libvlc_meta_Setting, + libvlc_meta_URL, + libvlc_meta_Language, + libvlc_meta_NowPlaying, + libvlc_meta_Publisher, + libvlc_meta_EncodedBy, + libvlc_meta_ArtworkURL, + libvlc_meta_TrackID, + libvlc_meta_TrackTotal, + libvlc_meta_Director, + libvlc_meta_Season, + libvlc_meta_Episode, + libvlc_meta_ShowName, + libvlc_meta_Actors, + libvlc_meta_AlbumArtist, + libvlc_meta_DiscNumber, + libvlc_meta_DiscTotal + /* Add new meta types HERE */ +} libvlc_meta_t; + +/** + * Note the order of libvlc_state_t enum must match exactly the order of + * \see mediacontrol_PlayerStatus, \see input_state_e enums, + * and VideoLAN.LibVLC.State (at bindings/cil/src/media.cs). + * + * Expected states by web plugins are: + * IDLE/CLOSE=0, OPENING=1, PLAYING=3, PAUSED=4, + * STOPPING=5, ENDED=6, ERROR=7 + */ +typedef enum libvlc_state_t +{ + libvlc_NothingSpecial=0, + libvlc_Opening, + libvlc_Buffering, /* XXX: Deprecated value. Check the + * libvlc_MediaPlayerBuffering event to know the + * buffering state of a libvlc_media_player */ + libvlc_Playing, + libvlc_Paused, + libvlc_Stopped, + libvlc_Ended, + libvlc_Error +} libvlc_state_t; + +enum +{ + libvlc_media_option_trusted = 0x2, + libvlc_media_option_unique = 0x100 +}; + +typedef enum libvlc_track_type_t +{ + libvlc_track_unknown = -1, + libvlc_track_audio = 0, + libvlc_track_video = 1, + libvlc_track_text = 2 +} libvlc_track_type_t; + +typedef struct libvlc_media_stats_t +{ + /* Input */ + int i_read_bytes; + float f_input_bitrate; + + /* Demux */ + int i_demux_read_bytes; + float f_demux_bitrate; + int i_demux_corrupted; + int i_demux_discontinuity; + + /* Decoders */ + int i_decoded_video; + int i_decoded_audio; + + /* Video Output */ + int i_displayed_pictures; + int i_lost_pictures; + + /* Audio output */ + int i_played_abuffers; + int i_lost_abuffers; + + /* Stream output */ + int i_sent_packets; + int i_sent_bytes; + float f_send_bitrate; +} libvlc_media_stats_t; + +typedef struct libvlc_media_track_info_t +{ + /* Codec fourcc */ + uint32_t i_codec; + int i_id; + libvlc_track_type_t i_type; + + /* Codec specific */ + int i_profile; + int i_level; + + union { + struct { + /* Audio specific */ + unsigned i_channels; + unsigned i_rate; + } audio; + struct { + /* Video specific */ + unsigned i_height; + unsigned i_width; + } video; + } u; + +} libvlc_media_track_info_t; + + +typedef struct libvlc_audio_track_t +{ + unsigned i_channels; + unsigned i_rate; +} libvlc_audio_track_t; + +typedef enum libvlc_video_orient_t +{ + libvlc_video_orient_top_left, /**< Normal. Top line represents top, left column left. */ + libvlc_video_orient_top_right, /**< Flipped horizontally */ + libvlc_video_orient_bottom_left, /**< Flipped vertically */ + libvlc_video_orient_bottom_right, /**< Rotated 180 degrees */ + libvlc_video_orient_left_top, /**< Transposed */ + libvlc_video_orient_left_bottom, /**< Rotated 90 degrees clockwise (or 270 anti-clockwise) */ + libvlc_video_orient_right_top, /**< Rotated 90 degrees anti-clockwise */ + libvlc_video_orient_right_bottom /**< Anti-transposed */ +} libvlc_video_orient_t; + +typedef enum libvlc_video_projection_t +{ + libvlc_video_projection_rectangular, + libvlc_video_projection_equirectangular, /**< 360 spherical */ + + libvlc_video_projection_cubemap_layout_standard = 0x100, +} libvlc_video_projection_t; + +/** + * Viewpoint + * + * \warning allocate using libvlc_video_new_viewpoint() + */ +typedef struct libvlc_video_viewpoint_t +{ + float f_yaw; /**< view point yaw in degrees ]-180;180] */ + float f_pitch; /**< view point pitch in degrees ]-90;90] */ + float f_roll; /**< view point roll in degrees ]-180;180] */ + float f_field_of_view; /**< field of view in degrees ]0;180[ (default 80.)*/ +} libvlc_video_viewpoint_t; + +typedef struct libvlc_video_track_t +{ + unsigned i_height; + unsigned i_width; + unsigned i_sar_num; + unsigned i_sar_den; + unsigned i_frame_rate_num; + unsigned i_frame_rate_den; + + libvlc_video_orient_t i_orientation; + libvlc_video_projection_t i_projection; + libvlc_video_viewpoint_t pose; /**< Initial view point */ +} libvlc_video_track_t; + +typedef struct libvlc_subtitle_track_t +{ + char *psz_encoding; +} libvlc_subtitle_track_t; + +typedef struct libvlc_media_track_t +{ + /* Codec fourcc */ + uint32_t i_codec; + uint32_t i_original_fourcc; + int i_id; + libvlc_track_type_t i_type; + + /* Codec specific */ + int i_profile; + int i_level; + + union { + libvlc_audio_track_t *audio; + libvlc_video_track_t *video; + libvlc_subtitle_track_t *subtitle; + }; + + unsigned int i_bitrate; + char *psz_language; + char *psz_description; + +} libvlc_media_track_t; + +/** + * Media type + * + * \see libvlc_media_get_type + */ +typedef enum libvlc_media_type_t { + libvlc_media_type_unknown, + libvlc_media_type_file, + libvlc_media_type_directory, + libvlc_media_type_disc, + libvlc_media_type_stream, + libvlc_media_type_playlist, +} libvlc_media_type_t; + +/** + * Parse flags used by libvlc_media_parse_with_options() + * + * \see libvlc_media_parse_with_options + */ +typedef enum libvlc_media_parse_flag_t +{ + /** + * Parse media if it's a local file + */ + libvlc_media_parse_local = 0x00, + /** + * Parse media even if it's a network file + */ + libvlc_media_parse_network = 0x01, + /** + * Fetch meta and covert art using local resources + */ + libvlc_media_fetch_local = 0x02, + /** + * Fetch meta and covert art using network resources + */ + libvlc_media_fetch_network = 0x04, + /** + * Interact with the user (via libvlc_dialog_cbs) when preparsing this item + * (and not its sub items). Set this flag in order to receive a callback + * when the input is asking for credentials. + */ + libvlc_media_do_interact = 0x08, +} libvlc_media_parse_flag_t; + +/** + * Parse status used sent by libvlc_media_parse_with_options() or returned by + * libvlc_media_get_parsed_status() + * + * \see libvlc_media_parse_with_options + * \see libvlc_media_get_parsed_status + */ +typedef enum libvlc_media_parsed_status_t +{ + libvlc_media_parsed_status_skipped = 1, + libvlc_media_parsed_status_failed, + libvlc_media_parsed_status_timeout, + libvlc_media_parsed_status_done, +} libvlc_media_parsed_status_t; + +/** + * Type of a media slave: subtitle or audio. + */ +typedef enum libvlc_media_slave_type_t +{ + libvlc_media_slave_type_subtitle, + libvlc_media_slave_type_audio, +} libvlc_media_slave_type_t; + +/** + * A slave of a libvlc_media_t + * \see libvlc_media_slaves_get + */ +typedef struct libvlc_media_slave_t +{ + char * psz_uri; + libvlc_media_slave_type_t i_type; + unsigned int i_priority; +} libvlc_media_slave_t; + +/** + * Callback prototype to open a custom bitstream input media. + * + * The same media item can be opened multiple times. Each time, this callback + * is invoked. It should allocate and initialize any instance-specific + * resources, then store them in *datap. The instance resources can be freed + * in the @ref libvlc_media_close_cb callback. + * + * \param opaque private pointer as passed to libvlc_media_new_callbacks() + * \param datap storage space for a private data pointer [OUT] + * \param sizep byte length of the bitstream or UINT64_MAX if unknown [OUT] + * + * \note For convenience, *datap is initially NULL and *sizep is initially 0. + * + * \return 0 on success, non-zero on error. In case of failure, the other + * callbacks will not be invoked and any value stored in *datap and *sizep is + * discarded. + */ +typedef int (*libvlc_media_open_cb)(void *opaque, void **datap, + uint64_t *sizep); + +/** + * Callback prototype to read data from a custom bitstream input media. + * + * \param opaque private pointer as set by the @ref libvlc_media_open_cb + * callback + * \param buf start address of the buffer to read data into + * \param len bytes length of the buffer + * + * \return strictly positive number of bytes read, 0 on end-of-stream, + * or -1 on non-recoverable error + * + * \note If no data is immediately available, then the callback should sleep. + * \warning The application is responsible for avoiding deadlock situations. + * In particular, the callback should return an error if playback is stopped; + * if it does not return, then libvlc_media_player_stop() will never return. + */ +typedef ssize_t (*libvlc_media_read_cb)(void *opaque, unsigned char *buf, + size_t len); + +/** + * Callback prototype to seek a custom bitstream input media. + * + * \param opaque private pointer as set by the @ref libvlc_media_open_cb + * callback + * \param offset absolute byte offset to seek to + * \return 0 on success, -1 on error. + */ +typedef int (*libvlc_media_seek_cb)(void *opaque, uint64_t offset); + +/** + * Callback prototype to close a custom bitstream input media. + * + * \param opaque private pointer as set by the @ref libvlc_media_open_cb + * callback + */ +typedef void (*libvlc_media_close_cb)(void *opaque); + +/** + * Create a media with a certain given media resource location, + * for instance a valid URL. + * + * \note To refer to a local file with this function, + * the file://... URI syntax must be used (see IETF RFC3986). + * We recommend using libvlc_media_new_path() instead when dealing with + * local files. + * + * \see libvlc_media_release + * + * \param p_instance the instance + * \param psz_mrl the media location + * \return the newly created media or NULL on error + */ +LIBVLC_API libvlc_media_t *libvlc_media_new_location( + libvlc_instance_t *p_instance, + const char * psz_mrl ); + +/** + * Create a media for a certain file path. + * + * \see libvlc_media_release + * + * \param p_instance the instance + * \param path local filesystem path + * \return the newly created media or NULL on error + */ +LIBVLC_API libvlc_media_t *libvlc_media_new_path( + libvlc_instance_t *p_instance, + const char *path ); + +/** + * Create a media for an already open file descriptor. + * The file descriptor shall be open for reading (or reading and writing). + * + * Regular file descriptors, pipe read descriptors and character device + * descriptors (including TTYs) are supported on all platforms. + * Block device descriptors are supported where available. + * Directory descriptors are supported on systems that provide fdopendir(). + * Sockets are supported on all platforms where they are file descriptors, + * i.e. all except Windows. + * + * \note This library will not automatically close the file descriptor + * under any circumstance. Nevertheless, a file descriptor can usually only be + * rendered once in a media player. To render it a second time, the file + * descriptor should probably be rewound to the beginning with lseek(). + * + * \see libvlc_media_release + * + * \version LibVLC 1.1.5 and later. + * + * \param p_instance the instance + * \param fd open file descriptor + * \return the newly created media or NULL on error + */ +LIBVLC_API libvlc_media_t *libvlc_media_new_fd( + libvlc_instance_t *p_instance, + int fd ); + +/** + * Create a media with custom callbacks to read the data from. + * + * \param instance LibVLC instance + * \param open_cb callback to open the custom bitstream input media + * \param read_cb callback to read data (must not be NULL) + * \param seek_cb callback to seek, or NULL if seeking is not supported + * \param close_cb callback to close the media, or NULL if unnecessary + * \param opaque data pointer for the open callback + * + * \return the newly created media or NULL on error + * + * \note If open_cb is NULL, the opaque pointer will be passed to read_cb, + * seek_cb and close_cb, and the stream size will be treated as unknown. + * + * \note The callbacks may be called asynchronously (from another thread). + * A single stream instance need not be reentrant. However the open_cb needs to + * be reentrant if the media is used by multiple player instances. + * + * \warning The callbacks may be used until all or any player instances + * that were supplied the media item are stopped. + * + * \see libvlc_media_release + * + * \version LibVLC 3.0.0 and later. + */ +LIBVLC_API libvlc_media_t *libvlc_media_new_callbacks( + libvlc_instance_t *instance, + libvlc_media_open_cb open_cb, + libvlc_media_read_cb read_cb, + libvlc_media_seek_cb seek_cb, + libvlc_media_close_cb close_cb, + void *opaque ); + +/** + * Create a media as an empty node with a given name. + * + * \see libvlc_media_release + * + * \param p_instance the instance + * \param psz_name the name of the node + * \return the new empty media or NULL on error + */ +LIBVLC_API libvlc_media_t *libvlc_media_new_as_node( + libvlc_instance_t *p_instance, + const char * psz_name ); + +/** + * Add an option to the media. + * + * This option will be used to determine how the media_player will + * read the media. This allows to use VLC's advanced + * reading/streaming options on a per-media basis. + * + * \note The options are listed in 'vlc --long-help' from the command line, + * e.g. "-sout-all". Keep in mind that available options and their semantics + * vary across LibVLC versions and builds. + * \warning Not all options affects libvlc_media_t objects: + * Specifically, due to architectural issues most audio and video options, + * such as text renderer options, have no effects on an individual media. + * These options must be set through libvlc_new() instead. + * + * \param p_md the media descriptor + * \param psz_options the options (as a string) + */ +LIBVLC_API void libvlc_media_add_option( + libvlc_media_t *p_md, + const char * psz_options ); + +/** + * Add an option to the media with configurable flags. + * + * This option will be used to determine how the media_player will + * read the media. This allows to use VLC's advanced + * reading/streaming options on a per-media basis. + * + * The options are detailed in vlc --long-help, for instance + * "--sout-all". Note that all options are not usable on medias: + * specifically, due to architectural issues, video-related options + * such as text renderer options cannot be set on a single media. They + * must be set on the whole libvlc instance instead. + * + * \param p_md the media descriptor + * \param psz_options the options (as a string) + * \param i_flags the flags for this option + */ +LIBVLC_API void libvlc_media_add_option_flag( + libvlc_media_t *p_md, + const char * psz_options, + unsigned i_flags ); + + +/** + * Retain a reference to a media descriptor object (libvlc_media_t). Use + * libvlc_media_release() to decrement the reference count of a + * media descriptor object. + * + * \param p_md the media descriptor + */ +LIBVLC_API void libvlc_media_retain( libvlc_media_t *p_md ); + +/** + * Decrement the reference count of a media descriptor object. If the + * reference count is 0, then libvlc_media_release() will release the + * media descriptor object. It will send out an libvlc_MediaFreed event + * to all listeners. If the media descriptor object has been released it + * should not be used again. + * + * \param p_md the media descriptor + */ +LIBVLC_API void libvlc_media_release( libvlc_media_t *p_md ); + + +/** + * Get the media resource locator (mrl) from a media descriptor object + * + * \param p_md a media descriptor object + * \return string with mrl of media descriptor object + */ +LIBVLC_API char *libvlc_media_get_mrl( libvlc_media_t *p_md ); + +/** + * Duplicate a media descriptor object. + * + * \param p_md a media descriptor object. + */ +LIBVLC_API libvlc_media_t *libvlc_media_duplicate( libvlc_media_t *p_md ); + +/** + * Read the meta of the media. + * + * If the media has not yet been parsed this will return NULL. + * + * \see libvlc_media_parse + * \see libvlc_media_parse_with_options + * \see libvlc_MediaMetaChanged + * + * \param p_md the media descriptor + * \param e_meta the meta to read + * \return the media's meta + */ +LIBVLC_API char *libvlc_media_get_meta( libvlc_media_t *p_md, + libvlc_meta_t e_meta ); + +/** + * Set the meta of the media (this function will not save the meta, call + * libvlc_media_save_meta in order to save the meta) + * + * \param p_md the media descriptor + * \param e_meta the meta to write + * \param psz_value the media's meta + */ +LIBVLC_API void libvlc_media_set_meta( libvlc_media_t *p_md, + libvlc_meta_t e_meta, + const char *psz_value ); + + +/** + * Save the meta previously set + * + * \param p_md the media desriptor + * \return true if the write operation was successful + */ +LIBVLC_API int libvlc_media_save_meta( libvlc_media_t *p_md ); + + +/** + * Get current state of media descriptor object. Possible media states are + * libvlc_NothingSpecial=0, libvlc_Opening, libvlc_Playing, libvlc_Paused, + * libvlc_Stopped, libvlc_Ended, libvlc_Error. + * + * \see libvlc_state_t + * \param p_md a media descriptor object + * \return state of media descriptor object + */ +LIBVLC_API libvlc_state_t libvlc_media_get_state( + libvlc_media_t *p_md ); + + +/** + * Get the current statistics about the media + * \param p_md: media descriptor object + * \param p_stats: structure that contain the statistics about the media + * (this structure must be allocated by the caller) + * \return true if the statistics are available, false otherwise + * + * \libvlc_return_bool + */ +LIBVLC_API int libvlc_media_get_stats( libvlc_media_t *p_md, + libvlc_media_stats_t *p_stats ); + +/* The following method uses libvlc_media_list_t, however, media_list usage is optionnal + * and this is here for convenience */ +#define VLC_FORWARD_DECLARE_OBJECT(a) struct a + +/** + * Get subitems of media descriptor object. This will increment + * the reference count of supplied media descriptor object. Use + * libvlc_media_list_release() to decrement the reference counting. + * + * \param p_md media descriptor object + * \return list of media descriptor subitems or NULL + */ +LIBVLC_API VLC_FORWARD_DECLARE_OBJECT(libvlc_media_list_t *) +libvlc_media_subitems( libvlc_media_t *p_md ); + +/** + * Get event manager from media descriptor object. + * NOTE: this function doesn't increment reference counting. + * + * \param p_md a media descriptor object + * \return event manager object + */ +LIBVLC_API libvlc_event_manager_t * + libvlc_media_event_manager( libvlc_media_t *p_md ); + +/** + * Get duration (in ms) of media descriptor object item. + * + * \param p_md media descriptor object + * \return duration of media item or -1 on error + */ +LIBVLC_API libvlc_time_t + libvlc_media_get_duration( libvlc_media_t *p_md ); + +/** + * Parse the media asynchronously with options. + * + * This fetches (local or network) art, meta data and/or tracks information. + * This method is the extended version of libvlc_media_parse_with_options(). + * + * To track when this is over you can listen to libvlc_MediaParsedChanged + * event. However if this functions returns an error, you will not receive any + * events. + * + * It uses a flag to specify parse options (see libvlc_media_parse_flag_t). All + * these flags can be combined. By default, media is parsed if it's a local + * file. + * + * \note Parsing can be aborted with libvlc_media_parse_stop(). + * + * \see libvlc_MediaParsedChanged + * \see libvlc_media_get_meta + * \see libvlc_media_tracks_get + * \see libvlc_media_get_parsed_status + * \see libvlc_media_parse_flag_t + * + * \param p_md media descriptor object + * \param parse_flag parse options: + * \param timeout maximum time allowed to preparse the media. If -1, the + * default "preparse-timeout" option will be used as a timeout. If 0, it will + * wait indefinitely. If > 0, the timeout will be used (in milliseconds). + * \return -1 in case of error, 0 otherwise + * \version LibVLC 3.0.0 or later + */ +LIBVLC_API int +libvlc_media_parse_with_options( libvlc_media_t *p_md, + libvlc_media_parse_flag_t parse_flag, + int timeout ); + +/** + * Stop the parsing of the media + * + * When the media parsing is stopped, the libvlc_MediaParsedChanged event will + * be sent with the libvlc_media_parsed_status_timeout status. + * + * \see libvlc_media_parse_with_options + * + * \param p_md media descriptor object + * \version LibVLC 3.0.0 or later + */ +LIBVLC_API void +libvlc_media_parse_stop( libvlc_media_t *p_md ); + +/** + * Get Parsed status for media descriptor object. + * + * \see libvlc_MediaParsedChanged + * \see libvlc_media_parsed_status_t + * + * \param p_md media descriptor object + * \return a value of the libvlc_media_parsed_status_t enum + * \version LibVLC 3.0.0 or later + */ +LIBVLC_API libvlc_media_parsed_status_t + libvlc_media_get_parsed_status( libvlc_media_t *p_md ); + +/** + * Sets media descriptor's user_data. user_data is specialized data + * accessed by the host application, VLC.framework uses it as a pointer to + * an native object that references a libvlc_media_t pointer + * + * \param p_md media descriptor object + * \param p_new_user_data pointer to user data + */ +LIBVLC_API void + libvlc_media_set_user_data( libvlc_media_t *p_md, void *p_new_user_data ); + +/** + * Get media descriptor's user_data. user_data is specialized data + * accessed by the host application, VLC.framework uses it as a pointer to + * an native object that references a libvlc_media_t pointer + * + * \param p_md media descriptor object + */ +LIBVLC_API void *libvlc_media_get_user_data( libvlc_media_t *p_md ); + +/** + * Get media descriptor's elementary streams description + * + * Note, you need to call libvlc_media_parse() or play the media at least once + * before calling this function. + * Not doing this will result in an empty array. + * + * \version LibVLC 2.1.0 and later. + * + * \param p_md media descriptor object + * \param tracks address to store an allocated array of Elementary Streams + * descriptions (must be freed with libvlc_media_tracks_release + by the caller) [OUT] + * + * \return the number of Elementary Streams (zero on error) + */ +LIBVLC_API +unsigned libvlc_media_tracks_get( libvlc_media_t *p_md, + libvlc_media_track_t ***tracks ); + +/** + * Get codec description from media elementary stream + * + * \version LibVLC 3.0.0 and later. + * + * \see libvlc_media_track_t + * + * \param i_type i_type from libvlc_media_track_t + * \param i_codec i_codec or i_original_fourcc from libvlc_media_track_t + * + * \return codec description + */ +LIBVLC_API +const char *libvlc_media_get_codec_description( libvlc_track_type_t i_type, + uint32_t i_codec ); + +/** + * Release media descriptor's elementary streams description array + * + * \version LibVLC 2.1.0 and later. + * + * \param p_tracks tracks info array to release + * \param i_count number of elements in the array + */ +LIBVLC_API +void libvlc_media_tracks_release( libvlc_media_track_t **p_tracks, + unsigned i_count ); + +/** + * Get the media type of the media descriptor object + * + * \version LibVLC 3.0.0 and later. + * + * \see libvlc_media_type_t + * + * \param p_md media descriptor object + * + * \return media type + */ +LIBVLC_API +libvlc_media_type_t libvlc_media_get_type( libvlc_media_t *p_md ); + +/** + * Add a slave to the current media. + * + * A slave is an external input source that may contains an additional subtitle + * track (like a .srt) or an additional audio track (like a .ac3). + * + * \note This function must be called before the media is parsed (via + * libvlc_media_parse_with_options()) or before the media is played (via + * libvlc_media_player_play()) + * + * \version LibVLC 3.0.0 and later. + * + * \param p_md media descriptor object + * \param i_type subtitle or audio + * \param i_priority from 0 (low priority) to 4 (high priority) + * \param psz_uri Uri of the slave (should contain a valid scheme). + * + * \return 0 on success, -1 on error. + */ +LIBVLC_API +int libvlc_media_slaves_add( libvlc_media_t *p_md, + libvlc_media_slave_type_t i_type, + unsigned int i_priority, + const char *psz_uri ); + +/** + * Clear all slaves previously added by libvlc_media_slaves_add() or + * internally. + * + * \version LibVLC 3.0.0 and later. + * + * \param p_md media descriptor object + */ +LIBVLC_API +void libvlc_media_slaves_clear( libvlc_media_t *p_md ); + +/** + * Get a media descriptor's slave list + * + * The list will contain slaves parsed by VLC or previously added by + * libvlc_media_slaves_add(). The typical use case of this function is to save + * a list of slave in a database for a later use. + * + * \version LibVLC 3.0.0 and later. + * + * \see libvlc_media_slaves_add + * + * \param p_md media descriptor object + * \param ppp_slaves address to store an allocated array of slaves (must be + * freed with libvlc_media_slaves_release()) [OUT] + * + * \return the number of slaves (zero on error) + */ +LIBVLC_API +unsigned int libvlc_media_slaves_get( libvlc_media_t *p_md, + libvlc_media_slave_t ***ppp_slaves ); + +/** + * Release a media descriptor's slave list + * + * \version LibVLC 3.0.0 and later. + * + * \param pp_slaves slave array to release + * \param i_count number of elements in the array + */ +LIBVLC_API +void libvlc_media_slaves_release( libvlc_media_slave_t **pp_slaves, + unsigned int i_count ); + +/** @}*/ + +# ifdef __cplusplus +} +# endif + +#endif /* VLC_LIBVLC_MEDIA_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_discoverer.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_discoverer.h new file mode 100644 index 0000000..96c0515 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_discoverer.h @@ -0,0 +1,188 @@ +/***************************************************************************** + * libvlc_media_discoverer.h: libvlc external API + ***************************************************************************** + * Copyright (C) 1998-2009 VLC authors and VideoLAN + * $Id$ + * + * Authors: Clément Stenac + * Jean-Paul Saman + * Pierre d'Herbemont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_LIBVLC_MEDIA_DISCOVERER_H +#define VLC_LIBVLC_MEDIA_DISCOVERER_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +/** + * Category of a media discoverer + * \see libvlc_media_discoverer_list_get() + */ +typedef enum libvlc_media_discoverer_category_t { + /** devices, like portable music player */ + libvlc_media_discoverer_devices, + /** LAN/WAN services, like Upnp, SMB, or SAP */ + libvlc_media_discoverer_lan, + /** Podcasts */ + libvlc_media_discoverer_podcasts, + /** Local directories, like Video, Music or Pictures directories */ + libvlc_media_discoverer_localdirs, +} libvlc_media_discoverer_category_t; + +/** + * Media discoverer description + * \see libvlc_media_discoverer_list_get() + */ +typedef struct libvlc_media_discoverer_description_t { + char *psz_name; + char *psz_longname; + libvlc_media_discoverer_category_t i_cat; +} libvlc_media_discoverer_description_t; + +/** \defgroup libvlc_media_discoverer LibVLC media discovery + * \ingroup libvlc + * LibVLC media discovery finds available media via various means. + * This corresponds to the service discovery functionality in VLC media player. + * Different plugins find potential medias locally (e.g. user media directory), + * from peripherals (e.g. video capture device), on the local network + * (e.g. SAP) or on the Internet (e.g. Internet radios). + * @{ + * \file + * LibVLC media discovery external API + */ + +typedef struct libvlc_media_discoverer_t libvlc_media_discoverer_t; + +/** + * Create a media discoverer object by name. + * + * After this object is created, you should attach to media_list events in + * order to be notified of new items discovered. + * + * You need to call libvlc_media_discoverer_start() in order to start the + * discovery. + * + * \see libvlc_media_discoverer_media_list + * \see libvlc_media_discoverer_event_manager + * \see libvlc_media_discoverer_start + * + * \param p_inst libvlc instance + * \param psz_name service name; use libvlc_media_discoverer_list_get() to get + * a list of the discoverer names available in this libVLC instance + * \return media discover object or NULL in case of error + * \version LibVLC 3.0.0 or later + */ +LIBVLC_API libvlc_media_discoverer_t * +libvlc_media_discoverer_new( libvlc_instance_t * p_inst, + const char * psz_name ); + +/** + * Start media discovery. + * + * To stop it, call libvlc_media_discoverer_stop() or + * libvlc_media_discoverer_list_release() directly. + * + * \see libvlc_media_discoverer_stop + * + * \param p_mdis media discover object + * \return -1 in case of error, 0 otherwise + * \version LibVLC 3.0.0 or later + */ +LIBVLC_API int +libvlc_media_discoverer_start( libvlc_media_discoverer_t * p_mdis ); + +/** + * Stop media discovery. + * + * \see libvlc_media_discoverer_start + * + * \param p_mdis media discover object + * \version LibVLC 3.0.0 or later + */ +LIBVLC_API void +libvlc_media_discoverer_stop( libvlc_media_discoverer_t * p_mdis ); + +/** + * Release media discover object. If the reference count reaches 0, then + * the object will be released. + * + * \param p_mdis media service discover object + */ +LIBVLC_API void +libvlc_media_discoverer_release( libvlc_media_discoverer_t * p_mdis ); + +/** + * Get media service discover media list. + * + * \param p_mdis media service discover object + * \return list of media items + */ +LIBVLC_API libvlc_media_list_t * +libvlc_media_discoverer_media_list( libvlc_media_discoverer_t * p_mdis ); + +/** + * Query if media service discover object is running. + * + * \param p_mdis media service discover object + * \return true if running, false if not + * + * \libvlc_return_bool + */ +LIBVLC_API int +libvlc_media_discoverer_is_running( libvlc_media_discoverer_t * p_mdis ); + +/** + * Get media discoverer services by category + * + * \version LibVLC 3.0.0 and later. + * + * \param p_inst libvlc instance + * \param i_cat category of services to fetch + * \param ppp_services address to store an allocated array of media discoverer + * services (must be freed with libvlc_media_discoverer_list_release() by + * the caller) [OUT] + * + * \return the number of media discoverer services (0 on error) + */ +LIBVLC_API size_t +libvlc_media_discoverer_list_get( libvlc_instance_t *p_inst, + libvlc_media_discoverer_category_t i_cat, + libvlc_media_discoverer_description_t ***ppp_services ); + +/** + * Release an array of media discoverer services + * + * \version LibVLC 3.0.0 and later. + * + * \see libvlc_media_discoverer_list_get() + * + * \param pp_services array to release + * \param i_count number of elements in the array + */ +LIBVLC_API void +libvlc_media_discoverer_list_release( libvlc_media_discoverer_description_t **pp_services, + size_t i_count ); + +/**@} */ + +# ifdef __cplusplus +} +# endif + +#endif /* */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_library.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_library.h new file mode 100644 index 0000000..facbf81 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_library.h @@ -0,0 +1,96 @@ +/***************************************************************************** + * libvlc_media_library.h: libvlc external API + ***************************************************************************** + * Copyright (C) 1998-2009 VLC authors and VideoLAN + * $Id$ + * + * Authors: Clément Stenac + * Jean-Paul Saman + * Pierre d'Herbemont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_LIBVLC_MEDIA_LIBRARY_H +#define VLC_LIBVLC_MEDIA_LIBRARY_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +/** \defgroup libvlc_media_library LibVLC media library + * \ingroup libvlc + * @{ + * \file + * LibVLC media library external API + */ + +typedef struct libvlc_media_library_t libvlc_media_library_t; + +/** + * Create an new Media Library object + * + * \param p_instance the libvlc instance + * \return a new object or NULL on error + */ +LIBVLC_API libvlc_media_library_t * + libvlc_media_library_new( libvlc_instance_t * p_instance ); + +/** + * Release media library object. This functions decrements the + * reference count of the media library object. If it reaches 0, + * then the object will be released. + * + * \param p_mlib media library object + */ +LIBVLC_API void + libvlc_media_library_release( libvlc_media_library_t * p_mlib ); + +/** + * Retain a reference to a media library object. This function will + * increment the reference counting for this object. Use + * libvlc_media_library_release() to decrement the reference count. + * + * \param p_mlib media library object + */ +LIBVLC_API void + libvlc_media_library_retain( libvlc_media_library_t * p_mlib ); + +/** + * Load media library. + * + * \param p_mlib media library object + * \return 0 on success, -1 on error + */ +LIBVLC_API int + libvlc_media_library_load( libvlc_media_library_t * p_mlib ); + +/** + * Get media library subitems. + * + * \param p_mlib media library object + * \return media list subitems + */ +LIBVLC_API libvlc_media_list_t * + libvlc_media_library_media_list( libvlc_media_library_t * p_mlib ); + + +/** @} */ + +# ifdef __cplusplus +} +# endif + +#endif /* VLC_LIBVLC_MEDIA_LIBRARY_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_list.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_list.h new file mode 100644 index 0000000..fa3b909 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_list.h @@ -0,0 +1,202 @@ +/***************************************************************************** + * libvlc_media_list.h: libvlc_media_list API + ***************************************************************************** + * Copyright (C) 1998-2008 VLC authors and VideoLAN + * $Id$ + * + * Authors: Pierre d'Herbemont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef LIBVLC_MEDIA_LIST_H +#define LIBVLC_MEDIA_LIST_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +/** \defgroup libvlc_media_list LibVLC media list + * \ingroup libvlc + * A LibVLC media list holds multiple @ref libvlc_media_t media descriptors. + * @{ + * \file + * LibVLC media list (playlist) external API + */ + +typedef struct libvlc_media_list_t libvlc_media_list_t; + +/** + * Create an empty media list. + * + * \param p_instance libvlc instance + * \return empty media list, or NULL on error + */ +LIBVLC_API libvlc_media_list_t * + libvlc_media_list_new( libvlc_instance_t *p_instance ); + +/** + * Release media list created with libvlc_media_list_new(). + * + * \param p_ml a media list created with libvlc_media_list_new() + */ +LIBVLC_API void + libvlc_media_list_release( libvlc_media_list_t *p_ml ); + +/** + * Retain reference to a media list + * + * \param p_ml a media list created with libvlc_media_list_new() + */ +LIBVLC_API void + libvlc_media_list_retain( libvlc_media_list_t *p_ml ); + +/** + * Associate media instance with this media list instance. + * If another media instance was present it will be released. + * The libvlc_media_list_lock should NOT be held upon entering this function. + * + * \param p_ml a media list instance + * \param p_md media instance to add + */ +LIBVLC_API void +libvlc_media_list_set_media( libvlc_media_list_t *p_ml, libvlc_media_t *p_md ); + +/** + * Get media instance from this media list instance. This action will increase + * the refcount on the media instance. + * The libvlc_media_list_lock should NOT be held upon entering this function. + * + * \param p_ml a media list instance + * \return media instance + */ +LIBVLC_API libvlc_media_t * + libvlc_media_list_media( libvlc_media_list_t *p_ml ); + +/** + * Add media instance to media list + * The libvlc_media_list_lock should be held upon entering this function. + * + * \param p_ml a media list instance + * \param p_md a media instance + * \return 0 on success, -1 if the media list is read-only + */ +LIBVLC_API int +libvlc_media_list_add_media( libvlc_media_list_t *p_ml, libvlc_media_t *p_md ); + +/** + * Insert media instance in media list on a position + * The libvlc_media_list_lock should be held upon entering this function. + * + * \param p_ml a media list instance + * \param p_md a media instance + * \param i_pos position in array where to insert + * \return 0 on success, -1 if the media list is read-only + */ +LIBVLC_API int +libvlc_media_list_insert_media( libvlc_media_list_t *p_ml, + libvlc_media_t *p_md, int i_pos ); + +/** + * Remove media instance from media list on a position + * The libvlc_media_list_lock should be held upon entering this function. + * + * \param p_ml a media list instance + * \param i_pos position in array where to insert + * \return 0 on success, -1 if the list is read-only or the item was not found + */ +LIBVLC_API int +libvlc_media_list_remove_index( libvlc_media_list_t *p_ml, int i_pos ); + +/** + * Get count on media list items + * The libvlc_media_list_lock should be held upon entering this function. + * + * \param p_ml a media list instance + * \return number of items in media list + */ +LIBVLC_API int + libvlc_media_list_count( libvlc_media_list_t *p_ml ); + +/** + * List media instance in media list at a position + * The libvlc_media_list_lock should be held upon entering this function. + * + * \param p_ml a media list instance + * \param i_pos position in array where to insert + * \return media instance at position i_pos, or NULL if not found. + * In case of success, libvlc_media_retain() is called to increase the refcount + * on the media. + */ +LIBVLC_API libvlc_media_t * + libvlc_media_list_item_at_index( libvlc_media_list_t *p_ml, int i_pos ); +/** + * Find index position of List media instance in media list. + * Warning: the function will return the first matched position. + * The libvlc_media_list_lock should be held upon entering this function. + * + * \param p_ml a media list instance + * \param p_md media instance + * \return position of media instance or -1 if media not found + */ +LIBVLC_API int + libvlc_media_list_index_of_item( libvlc_media_list_t *p_ml, + libvlc_media_t *p_md ); + +/** + * This indicates if this media list is read-only from a user point of view + * + * \param p_ml media list instance + * \return 1 on readonly, 0 on readwrite + * + * \libvlc_return_bool + */ +LIBVLC_API int + libvlc_media_list_is_readonly( libvlc_media_list_t * p_ml ); + +/** + * Get lock on media list items + * + * \param p_ml a media list instance + */ +LIBVLC_API void + libvlc_media_list_lock( libvlc_media_list_t *p_ml ); + +/** + * Release lock on media list items + * The libvlc_media_list_lock should be held upon entering this function. + * + * \param p_ml a media list instance + */ +LIBVLC_API void + libvlc_media_list_unlock( libvlc_media_list_t *p_ml ); + +/** + * Get libvlc_event_manager from this media list instance. + * The p_event_manager is immutable, so you don't have to hold the lock + * + * \param p_ml a media list instance + * \return libvlc_event_manager + */ +LIBVLC_API libvlc_event_manager_t * + libvlc_media_list_event_manager( libvlc_media_list_t *p_ml ); + +/** @} media_list */ + +# ifdef __cplusplus +} +# endif + +#endif /* _LIBVLC_MEDIA_LIST_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_list_player.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_list_player.h new file mode 100644 index 0000000..04f7d9b --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_list_player.h @@ -0,0 +1,239 @@ +/***************************************************************************** + * libvlc_media_list_player.h: libvlc_media_list API + ***************************************************************************** + * Copyright (C) 1998-2008 VLC authors and VideoLAN + * $Id$ + * + * Authors: Pierre d'Herbemont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef LIBVLC_MEDIA_LIST_PLAYER_H +#define LIBVLC_MEDIA_LIST_PLAYER_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +/** \defgroup libvlc_media_list_player LibVLC media list player + * \ingroup libvlc + * The LibVLC media list player plays a @ref libvlc_media_list_t list of media, + * in a certain order. + * This is required to especially support playlist files. + * The normal @ref libvlc_media_player_t LibVLC media player can only play a + * single media, and does not handle playlist files properly. + * @{ + * \file + * LibVLC media list player external API + */ + +typedef struct libvlc_media_list_player_t libvlc_media_list_player_t; + +/** + * Defines playback modes for playlist. + */ +typedef enum libvlc_playback_mode_t +{ + libvlc_playback_mode_default, + libvlc_playback_mode_loop, + libvlc_playback_mode_repeat +} libvlc_playback_mode_t; + +/** + * Create new media_list_player. + * + * \param p_instance libvlc instance + * \return media list player instance or NULL on error + */ +LIBVLC_API libvlc_media_list_player_t * + libvlc_media_list_player_new( libvlc_instance_t * p_instance ); + +/** + * Release a media_list_player after use + * Decrement the reference count of a media player object. If the + * reference count is 0, then libvlc_media_list_player_release() will + * release the media player object. If the media player object + * has been released, then it should not be used again. + * + * \param p_mlp media list player instance + */ +LIBVLC_API void + libvlc_media_list_player_release( libvlc_media_list_player_t * p_mlp ); + +/** + * Retain a reference to a media player list object. Use + * libvlc_media_list_player_release() to decrement reference count. + * + * \param p_mlp media player list object + */ +LIBVLC_API void + libvlc_media_list_player_retain( libvlc_media_list_player_t *p_mlp ); + +/** + * Return the event manager of this media_list_player. + * + * \param p_mlp media list player instance + * \return the event manager + */ +LIBVLC_API libvlc_event_manager_t * + libvlc_media_list_player_event_manager(libvlc_media_list_player_t * p_mlp); + +/** + * Replace media player in media_list_player with this instance. + * + * \param p_mlp media list player instance + * \param p_mi media player instance + */ +LIBVLC_API void + libvlc_media_list_player_set_media_player( + libvlc_media_list_player_t * p_mlp, + libvlc_media_player_t * p_mi ); + +/** + * Get media player of the media_list_player instance. + * + * \param p_mlp media list player instance + * \return media player instance + * \note the caller is responsible for releasing the returned instance + */ +LIBVLC_API libvlc_media_player_t * + libvlc_media_list_player_get_media_player(libvlc_media_list_player_t * p_mlp); + +/** + * Set the media list associated with the player + * + * \param p_mlp media list player instance + * \param p_mlist list of media + */ +LIBVLC_API void + libvlc_media_list_player_set_media_list( + libvlc_media_list_player_t * p_mlp, + libvlc_media_list_t * p_mlist ); + +/** + * Play media list + * + * \param p_mlp media list player instance + */ +LIBVLC_API +void libvlc_media_list_player_play(libvlc_media_list_player_t * p_mlp); + +/** + * Toggle pause (or resume) media list + * + * \param p_mlp media list player instance + */ +LIBVLC_API +void libvlc_media_list_player_pause(libvlc_media_list_player_t * p_mlp); + +/** + * Pause or resume media list + * + * \param p_mlp media list player instance + * \param do_pause play/resume if zero, pause if non-zero + * \version LibVLC 3.0.0 or later + */ +LIBVLC_API +void libvlc_media_list_player_set_pause(libvlc_media_list_player_t * p_mlp, + int do_pause); + +/** + * Is media list playing? + * + * \param p_mlp media list player instance + * \return true for playing and false for not playing + * + * \libvlc_return_bool + */ +LIBVLC_API int + libvlc_media_list_player_is_playing( libvlc_media_list_player_t * p_mlp ); + +/** + * Get current libvlc_state of media list player + * + * \param p_mlp media list player instance + * \return libvlc_state_t for media list player + */ +LIBVLC_API libvlc_state_t + libvlc_media_list_player_get_state( libvlc_media_list_player_t * p_mlp ); + +/** + * Play media list item at position index + * + * \param p_mlp media list player instance + * \param i_index index in media list to play + * \return 0 upon success -1 if the item wasn't found + */ +LIBVLC_API +int libvlc_media_list_player_play_item_at_index(libvlc_media_list_player_t * p_mlp, + int i_index); + +/** + * Play the given media item + * + * \param p_mlp media list player instance + * \param p_md the media instance + * \return 0 upon success, -1 if the media is not part of the media list + */ +LIBVLC_API +int libvlc_media_list_player_play_item(libvlc_media_list_player_t * p_mlp, + libvlc_media_t * p_md); + +/** + * Stop playing media list + * + * \param p_mlp media list player instance + */ +LIBVLC_API void + libvlc_media_list_player_stop( libvlc_media_list_player_t * p_mlp); + +/** + * Play next item from media list + * + * \param p_mlp media list player instance + * \return 0 upon success -1 if there is no next item + */ +LIBVLC_API +int libvlc_media_list_player_next(libvlc_media_list_player_t * p_mlp); + +/** + * Play previous item from media list + * + * \param p_mlp media list player instance + * \return 0 upon success -1 if there is no previous item + */ +LIBVLC_API +int libvlc_media_list_player_previous(libvlc_media_list_player_t * p_mlp); + + + +/** + * Sets the playback mode for the playlist + * + * \param p_mlp media list player instance + * \param e_mode playback mode specification + */ +LIBVLC_API +void libvlc_media_list_player_set_playback_mode(libvlc_media_list_player_t * p_mlp, + libvlc_playback_mode_t e_mode ); + +/** @} media_list_player */ + +# ifdef __cplusplus +} +# endif + +#endif /* LIBVLC_MEDIA_LIST_PLAYER_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_player.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_player.h new file mode 100644 index 0000000..00ac5d9 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc_media_player.h @@ -0,0 +1,2093 @@ +/***************************************************************************** + * libvlc_media_player.h: libvlc_media_player external API + ***************************************************************************** + * Copyright (C) 1998-2015 VLC authors and VideoLAN + * $Id$ + * + * Authors: Clément Stenac + * Jean-Paul Saman + * Pierre d'Herbemont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_LIBVLC_MEDIA_PLAYER_H +#define VLC_LIBVLC_MEDIA_PLAYER_H 1 + +# ifdef __cplusplus +extern "C" { +# else +# include +# endif + +/** \defgroup libvlc_media_player LibVLC media player + * \ingroup libvlc + * A LibVLC media player plays one media (usually in a custom drawable). + * @{ + * \file + * LibVLC simple media player external API + */ + +typedef struct libvlc_media_player_t libvlc_media_player_t; + +/** + * Description for video, audio tracks and subtitles. It contains + * id, name (description string) and pointer to next record. + */ +typedef struct libvlc_track_description_t +{ + int i_id; + char *psz_name; + struct libvlc_track_description_t *p_next; + +} libvlc_track_description_t; + +/** + * Description for titles + */ +enum +{ + libvlc_title_menu = 0x01, + libvlc_title_interactive = 0x02 +}; + +typedef struct libvlc_title_description_t +{ + int64_t i_duration; /**< duration in milliseconds */ + char *psz_name; /**< title name */ + unsigned i_flags; /**< info if item was recognized as a menu, interactive or plain content by the demuxer */ +} libvlc_title_description_t; + +/** + * Description for chapters + */ +typedef struct libvlc_chapter_description_t +{ + int64_t i_time_offset; /**< time-offset of the chapter in milliseconds */ + int64_t i_duration; /**< duration of the chapter in milliseconds */ + char *psz_name; /**< chapter name */ +} libvlc_chapter_description_t; + +/** + * Description for audio output. It contains + * name, description and pointer to next record. + */ +typedef struct libvlc_audio_output_t +{ + char *psz_name; + char *psz_description; + struct libvlc_audio_output_t *p_next; + +} libvlc_audio_output_t; + +/** + * Description for audio output device. + */ +typedef struct libvlc_audio_output_device_t +{ + struct libvlc_audio_output_device_t *p_next; /**< Next entry in list */ + char *psz_device; /**< Device identifier string */ + char *psz_description; /**< User-friendly device description */ + /* More fields may be added here in later versions */ +} libvlc_audio_output_device_t; + +/** + * Marq options definition + */ +typedef enum libvlc_video_marquee_option_t { + libvlc_marquee_Enable = 0, + libvlc_marquee_Text, /** string argument */ + libvlc_marquee_Color, + libvlc_marquee_Opacity, + libvlc_marquee_Position, + libvlc_marquee_Refresh, + libvlc_marquee_Size, + libvlc_marquee_Timeout, + libvlc_marquee_X, + libvlc_marquee_Y +} libvlc_video_marquee_option_t; + +/** + * Navigation mode + */ +typedef enum libvlc_navigate_mode_t +{ + libvlc_navigate_activate = 0, + libvlc_navigate_up, + libvlc_navigate_down, + libvlc_navigate_left, + libvlc_navigate_right, + libvlc_navigate_popup +} libvlc_navigate_mode_t; + +/** + * Enumeration of values used to set position (e.g. of video title). + */ +typedef enum libvlc_position_t { + libvlc_position_disable=-1, + libvlc_position_center, + libvlc_position_left, + libvlc_position_right, + libvlc_position_top, + libvlc_position_top_left, + libvlc_position_top_right, + libvlc_position_bottom, + libvlc_position_bottom_left, + libvlc_position_bottom_right +} libvlc_position_t; + +/** + * Enumeration of teletext keys than can be passed via + * libvlc_video_set_teletext() + */ +typedef enum libvlc_teletext_key_t { + libvlc_teletext_key_red = 'r' << 16, + libvlc_teletext_key_green = 'g' << 16, + libvlc_teletext_key_yellow = 'y' << 16, + libvlc_teletext_key_blue = 'b' << 16, + libvlc_teletext_key_index = 'i' << 16, +} libvlc_teletext_key_t; + +/** + * Opaque equalizer handle. + * + * Equalizer settings can be applied to a media player. + */ +typedef struct libvlc_equalizer_t libvlc_equalizer_t; + +/** + * Create an empty Media Player object + * + * \param p_libvlc_instance the libvlc instance in which the Media Player + * should be created. + * \return a new media player object, or NULL on error. + */ +LIBVLC_API libvlc_media_player_t * libvlc_media_player_new( libvlc_instance_t *p_libvlc_instance ); + +/** + * Create a Media Player object from a Media + * + * \param p_md the media. Afterwards the p_md can be safely + * destroyed. + * \return a new media player object, or NULL on error. + */ +LIBVLC_API libvlc_media_player_t * libvlc_media_player_new_from_media( libvlc_media_t *p_md ); + +/** + * Release a media_player after use + * Decrement the reference count of a media player object. If the + * reference count is 0, then libvlc_media_player_release() will + * release the media player object. If the media player object + * has been released, then it should not be used again. + * + * \param p_mi the Media Player to free + */ +LIBVLC_API void libvlc_media_player_release( libvlc_media_player_t *p_mi ); + +/** + * Retain a reference to a media player object. Use + * libvlc_media_player_release() to decrement reference count. + * + * \param p_mi media player object + */ +LIBVLC_API void libvlc_media_player_retain( libvlc_media_player_t *p_mi ); + +/** + * Set the media that will be used by the media_player. If any, + * previous md will be released. + * + * \param p_mi the Media Player + * \param p_md the Media. Afterwards the p_md can be safely + * destroyed. + */ +LIBVLC_API void libvlc_media_player_set_media( libvlc_media_player_t *p_mi, + libvlc_media_t *p_md ); + +/** + * Get the media used by the media_player. + * + * \param p_mi the Media Player + * \return the media associated with p_mi, or NULL if no + * media is associated + */ +LIBVLC_API libvlc_media_t * libvlc_media_player_get_media( libvlc_media_player_t *p_mi ); + +/** + * Get the Event Manager from which the media player send event. + * + * \param p_mi the Media Player + * \return the event manager associated with p_mi + */ +LIBVLC_API libvlc_event_manager_t * libvlc_media_player_event_manager ( libvlc_media_player_t *p_mi ); + +/** + * is_playing + * + * \param p_mi the Media Player + * \return 1 if the media player is playing, 0 otherwise + * + * \libvlc_return_bool + */ +LIBVLC_API int libvlc_media_player_is_playing ( libvlc_media_player_t *p_mi ); + +/** + * Play + * + * \param p_mi the Media Player + * \return 0 if playback started (and was already started), or -1 on error. + */ +LIBVLC_API int libvlc_media_player_play ( libvlc_media_player_t *p_mi ); + +/** + * Pause or resume (no effect if there is no media) + * + * \param mp the Media Player + * \param do_pause play/resume if zero, pause if non-zero + * \version LibVLC 1.1.1 or later + */ +LIBVLC_API void libvlc_media_player_set_pause ( libvlc_media_player_t *mp, + int do_pause ); + +/** + * Toggle pause (no effect if there is no media) + * + * \param p_mi the Media Player + */ +LIBVLC_API void libvlc_media_player_pause ( libvlc_media_player_t *p_mi ); + +/** + * Stop (no effect if there is no media) + * + * \param p_mi the Media Player + */ +LIBVLC_API void libvlc_media_player_stop ( libvlc_media_player_t *p_mi ); + +/** + * Set a renderer to the media player + * + * \note must be called before the first call of libvlc_media_player_play() to + * take effect. + * + * \see libvlc_renderer_discoverer_new + * + * \param p_mi the Media Player + * \param p_item an item discovered by libvlc_renderer_discoverer_start() + * \return 0 on success, -1 on error. + * \version LibVLC 3.0.0 or later + */ +LIBVLC_API int libvlc_media_player_set_renderer( libvlc_media_player_t *p_mi, + libvlc_renderer_item_t *p_item ); + +/** + * Callback prototype to allocate and lock a picture buffer. + * + * Whenever a new video frame needs to be decoded, the lock callback is + * invoked. Depending on the video chroma, one or three pixel planes of + * adequate dimensions must be returned via the second parameter. Those + * planes must be aligned on 32-bytes boundaries. + * + * \param opaque private pointer as passed to libvlc_video_set_callbacks() [IN] + * \param planes start address of the pixel planes (LibVLC allocates the array + * of void pointers, this callback must initialize the array) [OUT] + * \return a private pointer for the display and unlock callbacks to identify + * the picture buffers + */ +typedef void *(*libvlc_video_lock_cb)(void *opaque, void **planes); + +/** + * Callback prototype to unlock a picture buffer. + * + * When the video frame decoding is complete, the unlock callback is invoked. + * This callback might not be needed at all. It is only an indication that the + * application can now read the pixel values if it needs to. + * + * \note A picture buffer is unlocked after the picture is decoded, + * but before the picture is displayed. + * + * \param opaque private pointer as passed to libvlc_video_set_callbacks() [IN] + * \param picture private pointer returned from the @ref libvlc_video_lock_cb + * callback [IN] + * \param planes pixel planes as defined by the @ref libvlc_video_lock_cb + * callback (this parameter is only for convenience) [IN] + */ +typedef void (*libvlc_video_unlock_cb)(void *opaque, void *picture, + void *const *planes); + +/** + * Callback prototype to display a picture. + * + * When the video frame needs to be shown, as determined by the media playback + * clock, the display callback is invoked. + * + * \param opaque private pointer as passed to libvlc_video_set_callbacks() [IN] + * \param picture private pointer returned from the @ref libvlc_video_lock_cb + * callback [IN] + */ +typedef void (*libvlc_video_display_cb)(void *opaque, void *picture); + +/** + * Callback prototype to configure picture buffers format. + * This callback gets the format of the video as output by the video decoder + * and the chain of video filters (if any). It can opt to change any parameter + * as it needs. In that case, LibVLC will attempt to convert the video format + * (rescaling and chroma conversion) but these operations can be CPU intensive. + * + * \param opaque pointer to the private pointer passed to + * libvlc_video_set_callbacks() [IN/OUT] + * \param chroma pointer to the 4 bytes video format identifier [IN/OUT] + * \param width pointer to the pixel width [IN/OUT] + * \param height pointer to the pixel height [IN/OUT] + * \param pitches table of scanline pitches in bytes for each pixel plane + * (the table is allocated by LibVLC) [OUT] + * \param lines table of scanlines count for each plane [OUT] + * \return the number of picture buffers allocated, 0 indicates failure + * + * \note + * For each pixels plane, the scanline pitch must be bigger than or equal to + * the number of bytes per pixel multiplied by the pixel width. + * Similarly, the number of scanlines must be bigger than of equal to + * the pixel height. + * Furthermore, we recommend that pitches and lines be multiple of 32 + * to not break assumptions that might be held by optimized code + * in the video decoders, video filters and/or video converters. + */ +typedef unsigned (*libvlc_video_format_cb)(void **opaque, char *chroma, + unsigned *width, unsigned *height, + unsigned *pitches, + unsigned *lines); + +/** + * Callback prototype to configure picture buffers format. + * + * \param opaque private pointer as passed to libvlc_video_set_callbacks() + * (and possibly modified by @ref libvlc_video_format_cb) [IN] + */ +typedef void (*libvlc_video_cleanup_cb)(void *opaque); + + +/** + * Set callbacks and private data to render decoded video to a custom area + * in memory. + * Use libvlc_video_set_format() or libvlc_video_set_format_callbacks() + * to configure the decoded format. + * + * \warning Rendering video into custom memory buffers is considerably less + * efficient than rendering in a custom window as normal. + * + * For optimal perfomances, VLC media player renders into a custom window, and + * does not use this function and associated callbacks. It is highly + * recommended that other LibVLC-based application do likewise. + * To embed video in a window, use libvlc_media_player_set_xid() or equivalent + * depending on the operating system. + * + * If window embedding does not fit the application use case, then a custom + * LibVLC video output display plugin is required to maintain optimal video + * rendering performances. + * + * The following limitations affect performance: + * - Hardware video decoding acceleration will either be disabled completely, + * or require (relatively slow) copy from video/DSP memory to main memory. + * - Sub-pictures (subtitles, on-screen display, etc.) must be blent into the + * main picture by the CPU instead of the GPU. + * - Depending on the video format, pixel format conversion, picture scaling, + * cropping and/or picture re-orientation, must be performed by the CPU + * instead of the GPU. + * - Memory copying is required between LibVLC reference picture buffers and + * application buffers (between lock and unlock callbacks). + * + * \param mp the media player + * \param lock callback to lock video memory (must not be NULL) + * \param unlock callback to unlock video memory (or NULL if not needed) + * \param display callback to display video (or NULL if not needed) + * \param opaque private pointer for the three callbacks (as first parameter) + * \version LibVLC 1.1.1 or later + */ +LIBVLC_API +void libvlc_video_set_callbacks( libvlc_media_player_t *mp, + libvlc_video_lock_cb lock, + libvlc_video_unlock_cb unlock, + libvlc_video_display_cb display, + void *opaque ); + +/** + * Set decoded video chroma and dimensions. + * This only works in combination with libvlc_video_set_callbacks(), + * and is mutually exclusive with libvlc_video_set_format_callbacks(). + * + * \param mp the media player + * \param chroma a four-characters string identifying the chroma + * (e.g. "RV32" or "YUYV") + * \param width pixel width + * \param height pixel height + * \param pitch line pitch (in bytes) + * \version LibVLC 1.1.1 or later + * \bug All pixel planes are expected to have the same pitch. + * To use the YCbCr color space with chrominance subsampling, + * consider using libvlc_video_set_format_callbacks() instead. + */ +LIBVLC_API +void libvlc_video_set_format( libvlc_media_player_t *mp, const char *chroma, + unsigned width, unsigned height, + unsigned pitch ); + +/** + * Set decoded video chroma and dimensions. This only works in combination with + * libvlc_video_set_callbacks(). + * + * \param mp the media player + * \param setup callback to select the video format (cannot be NULL) + * \param cleanup callback to release any allocated resources (or NULL) + * \version LibVLC 2.0.0 or later + */ +LIBVLC_API +void libvlc_video_set_format_callbacks( libvlc_media_player_t *mp, + libvlc_video_format_cb setup, + libvlc_video_cleanup_cb cleanup ); + +/** + * Set the NSView handler where the media player should render its video output. + * + * Use the vout called "macosx". + * + * The drawable is an NSObject that follow the VLCOpenGLVideoViewEmbedding + * protocol: + * + * @code{.m} + * \@protocol VLCOpenGLVideoViewEmbedding + * - (void)addVoutSubview:(NSView *)view; + * - (void)removeVoutSubview:(NSView *)view; + * \@end + * @endcode + * + * Or it can be an NSView object. + * + * If you want to use it along with Qt see the QMacCocoaViewContainer. Then + * the following code should work: + * @code{.mm} + * { + * NSView *video = [[NSView alloc] init]; + * QMacCocoaViewContainer *container = new QMacCocoaViewContainer(video, parent); + * libvlc_media_player_set_nsobject(mp, video); + * [video release]; + * } + * @endcode + * + * You can find a live example in VLCVideoView in VLCKit.framework. + * + * \param p_mi the Media Player + * \param drawable the drawable that is either an NSView or an object following + * the VLCOpenGLVideoViewEmbedding protocol. + */ +LIBVLC_API void libvlc_media_player_set_nsobject ( libvlc_media_player_t *p_mi, void * drawable ); + +/** + * Get the NSView handler previously set with libvlc_media_player_set_nsobject(). + * + * \param p_mi the Media Player + * \return the NSView handler or 0 if none where set + */ +LIBVLC_API void * libvlc_media_player_get_nsobject ( libvlc_media_player_t *p_mi ); + +/** + * Set an X Window System drawable where the media player should render its + * video output. The call takes effect when the playback starts. If it is + * already started, it might need to be stopped before changes apply. + * If LibVLC was built without X11 output support, then this function has no + * effects. + * + * By default, LibVLC will capture input events on the video rendering area. + * Use libvlc_video_set_mouse_input() and libvlc_video_set_key_input() to + * disable that and deliver events to the parent window / to the application + * instead. By design, the X11 protocol delivers input events to only one + * recipient. + * + * \warning + * The application must call the XInitThreads() function from Xlib before + * libvlc_new(), and before any call to XOpenDisplay() directly or via any + * other library. Failure to call XInitThreads() will seriously impede LibVLC + * performance. Calling XOpenDisplay() before XInitThreads() will eventually + * crash the process. That is a limitation of Xlib. + * + * \param p_mi media player + * \param drawable X11 window ID + * + * \note + * The specified identifier must correspond to an existing Input/Output class + * X11 window. Pixmaps are not currently supported. The default X11 + * server is assumed, i.e. that specified in the DISPLAY environment variable. + * + * \warning + * LibVLC can deal with invalid X11 handle errors, however some display drivers + * (EGL, GLX, VA and/or VDPAU) can unfortunately not. Thus the window handle + * must remain valid until playback is stopped, otherwise the process may + * abort or crash. + * + * \bug + * No more than one window handle per media player instance can be specified. + * If the media has multiple simultaneously active video tracks, extra tracks + * will be rendered into external windows beyond the control of the + * application. + */ +LIBVLC_API void libvlc_media_player_set_xwindow(libvlc_media_player_t *p_mi, + uint32_t drawable); + +/** + * Get the X Window System window identifier previously set with + * libvlc_media_player_set_xwindow(). Note that this will return the identifier + * even if VLC is not currently using it (for instance if it is playing an + * audio-only input). + * + * \param p_mi the Media Player + * \return an X window ID, or 0 if none where set. + */ +LIBVLC_API uint32_t libvlc_media_player_get_xwindow ( libvlc_media_player_t *p_mi ); + +/** + * Set a Win32/Win64 API window handle (HWND) where the media player should + * render its video output. If LibVLC was built without Win32/Win64 API output + * support, then this has no effects. + * + * \warning the HWND must have the WS_CLIPCHILDREN set in its style. + * + * \param p_mi the Media Player + * \param drawable windows handle of the drawable + */ +LIBVLC_API void libvlc_media_player_set_hwnd ( libvlc_media_player_t *p_mi, void *drawable ); + +/** + * Get the Windows API window handle (HWND) previously set with + * libvlc_media_player_set_hwnd(). The handle will be returned even if LibVLC + * is not currently outputting any video to it. + * + * \param p_mi the Media Player + * \return a window handle or NULL if there are none. + */ +LIBVLC_API void *libvlc_media_player_get_hwnd ( libvlc_media_player_t *p_mi ); + +/** + * Set the android context. + * + * \version LibVLC 3.0.0 and later. + * + * \param p_mi the media player + * \param p_awindow_handler org.videolan.libvlc.AWindow jobject owned by the + * org.videolan.libvlc.MediaPlayer class from the libvlc-android project. + */ +LIBVLC_API void libvlc_media_player_set_android_context( libvlc_media_player_t *p_mi, + void *p_awindow_handler ); + +/** + * Set the EFL Evas Object. + * + * \version LibVLC 3.0.0 and later. + * + * \param p_mi the media player + * \param p_evas_object a valid EFL Evas Object (Evas_Object) + * \return -1 if an error was detected, 0 otherwise. + */ +LIBVLC_API int libvlc_media_player_set_evas_object( libvlc_media_player_t *p_mi, + void *p_evas_object ); + + +/** + * Callback prototype for audio playback. + * + * The LibVLC media player decodes and post-processes the audio signal + * asynchronously (in an internal thread). Whenever audio samples are ready + * to be queued to the output, this callback is invoked. + * + * The number of samples provided per invocation may depend on the file format, + * the audio coding algorithm, the decoder plug-in, the post-processing + * filters and timing. Application must not assume a certain number of samples. + * + * The exact format of audio samples is determined by libvlc_audio_set_format() + * or libvlc_audio_set_format_callbacks() as is the channels layout. + * + * Note that the number of samples is per channel. For instance, if the audio + * track sampling rate is 48000 Hz, then 1200 samples represent 25 milliseconds + * of audio signal - regardless of the number of audio channels. + * + * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] + * \param samples pointer to a table of audio samples to play back [IN] + * \param count number of audio samples to play back + * \param pts expected play time stamp (see libvlc_delay()) + */ +typedef void (*libvlc_audio_play_cb)(void *data, const void *samples, + unsigned count, int64_t pts); + +/** + * Callback prototype for audio pause. + * + * LibVLC invokes this callback to pause audio playback. + * + * \note The pause callback is never called if the audio is already paused. + * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] + * \param pts time stamp of the pause request (should be elapsed already) + */ +typedef void (*libvlc_audio_pause_cb)(void *data, int64_t pts); + +/** + * Callback prototype for audio resumption. + * + * LibVLC invokes this callback to resume audio playback after it was + * previously paused. + * + * \note The resume callback is never called if the audio is not paused. + * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] + * \param pts time stamp of the resumption request (should be elapsed already) + */ +typedef void (*libvlc_audio_resume_cb)(void *data, int64_t pts); + +/** + * Callback prototype for audio buffer flush. + * + * LibVLC invokes this callback if it needs to discard all pending buffers and + * stop playback as soon as possible. This typically occurs when the media is + * stopped. + * + * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] + */ +typedef void (*libvlc_audio_flush_cb)(void *data, int64_t pts); + +/** + * Callback prototype for audio buffer drain. + * + * LibVLC may invoke this callback when the decoded audio track is ending. + * There will be no further decoded samples for the track, but playback should + * nevertheless continue until all already pending buffers are rendered. + * + * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] + */ +typedef void (*libvlc_audio_drain_cb)(void *data); + +/** + * Callback prototype for audio volume change. + * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] + * \param volume software volume (1. = nominal, 0. = mute) + * \param mute muted flag + */ +typedef void (*libvlc_audio_set_volume_cb)(void *data, + float volume, bool mute); + +/** + * Sets callbacks and private data for decoded audio. + * + * Use libvlc_audio_set_format() or libvlc_audio_set_format_callbacks() + * to configure the decoded audio format. + * + * \note The audio callbacks override any other audio output mechanism. + * If the callbacks are set, LibVLC will not output audio in any way. + * + * \param mp the media player + * \param play callback to play audio samples (must not be NULL) + * \param pause callback to pause playback (or NULL to ignore) + * \param resume callback to resume playback (or NULL to ignore) + * \param flush callback to flush audio buffers (or NULL to ignore) + * \param drain callback to drain audio buffers (or NULL to ignore) + * \param opaque private pointer for the audio callbacks (as first parameter) + * \version LibVLC 2.0.0 or later + */ +LIBVLC_API +void libvlc_audio_set_callbacks( libvlc_media_player_t *mp, + libvlc_audio_play_cb play, + libvlc_audio_pause_cb pause, + libvlc_audio_resume_cb resume, + libvlc_audio_flush_cb flush, + libvlc_audio_drain_cb drain, + void *opaque ); + +/** + * Set callbacks and private data for decoded audio. This only works in + * combination with libvlc_audio_set_callbacks(). + * Use libvlc_audio_set_format() or libvlc_audio_set_format_callbacks() + * to configure the decoded audio format. + * + * \param mp the media player + * \param set_volume callback to apply audio volume, + * or NULL to apply volume in software + * \version LibVLC 2.0.0 or later + */ +LIBVLC_API +void libvlc_audio_set_volume_callback( libvlc_media_player_t *mp, + libvlc_audio_set_volume_cb set_volume ); + +/** + * Callback prototype to setup the audio playback. + * + * This is called when the media player needs to create a new audio output. + * \param opaque pointer to the data pointer passed to + * libvlc_audio_set_callbacks() [IN/OUT] + * \param format 4 bytes sample format [IN/OUT] + * \param rate sample rate [IN/OUT] + * \param channels channels count [IN/OUT] + * \return 0 on success, anything else to skip audio playback + */ +typedef int (*libvlc_audio_setup_cb)(void **data, char *format, unsigned *rate, + unsigned *channels); + +/** + * Callback prototype for audio playback cleanup. + * + * This is called when the media player no longer needs an audio output. + * \param opaque data pointer as passed to libvlc_audio_set_callbacks() [IN] + */ +typedef void (*libvlc_audio_cleanup_cb)(void *data); + +/** + * Sets decoded audio format via callbacks. + * + * This only works in combination with libvlc_audio_set_callbacks(). + * + * \param mp the media player + * \param setup callback to select the audio format (cannot be NULL) + * \param cleanup callback to release any allocated resources (or NULL) + * \version LibVLC 2.0.0 or later + */ +LIBVLC_API +void libvlc_audio_set_format_callbacks( libvlc_media_player_t *mp, + libvlc_audio_setup_cb setup, + libvlc_audio_cleanup_cb cleanup ); + +/** + * Sets a fixed decoded audio format. + * + * This only works in combination with libvlc_audio_set_callbacks(), + * and is mutually exclusive with libvlc_audio_set_format_callbacks(). + * + * \param mp the media player + * \param format a four-characters string identifying the sample format + * (e.g. "S16N" or "f32l") + * \param rate sample rate (expressed in Hz) + * \param channels channels count + * \version LibVLC 2.0.0 or later + */ +LIBVLC_API +void libvlc_audio_set_format( libvlc_media_player_t *mp, const char *format, + unsigned rate, unsigned channels ); + +/** \bug This might go away ... to be replaced by a broader system */ + +/** + * Get the current movie length (in ms). + * + * \param p_mi the Media Player + * \return the movie length (in ms), or -1 if there is no media. + */ +LIBVLC_API libvlc_time_t libvlc_media_player_get_length( libvlc_media_player_t *p_mi ); + +/** + * Get the current movie time (in ms). + * + * \param p_mi the Media Player + * \return the movie time (in ms), or -1 if there is no media. + */ +LIBVLC_API libvlc_time_t libvlc_media_player_get_time( libvlc_media_player_t *p_mi ); + +/** + * Set the movie time (in ms). This has no effect if no media is being played. + * Not all formats and protocols support this. + * + * \param p_mi the Media Player + * \param i_time the movie time (in ms). + */ +LIBVLC_API void libvlc_media_player_set_time( libvlc_media_player_t *p_mi, libvlc_time_t i_time ); + +/** + * Get movie position as percentage between 0.0 and 1.0. + * + * \param p_mi the Media Player + * \return movie position, or -1. in case of error + */ +LIBVLC_API float libvlc_media_player_get_position( libvlc_media_player_t *p_mi ); + +/** + * Set movie position as percentage between 0.0 and 1.0. + * This has no effect if playback is not enabled. + * This might not work depending on the underlying input format and protocol. + * + * \param p_mi the Media Player + * \param f_pos the position + */ +LIBVLC_API void libvlc_media_player_set_position( libvlc_media_player_t *p_mi, float f_pos ); + +/** + * Set movie chapter (if applicable). + * + * \param p_mi the Media Player + * \param i_chapter chapter number to play + */ +LIBVLC_API void libvlc_media_player_set_chapter( libvlc_media_player_t *p_mi, int i_chapter ); + +/** + * Get movie chapter. + * + * \param p_mi the Media Player + * \return chapter number currently playing, or -1 if there is no media. + */ +LIBVLC_API int libvlc_media_player_get_chapter( libvlc_media_player_t *p_mi ); + +/** + * Get movie chapter count + * + * \param p_mi the Media Player + * \return number of chapters in movie, or -1. + */ +LIBVLC_API int libvlc_media_player_get_chapter_count( libvlc_media_player_t *p_mi ); + +/** + * Is the player able to play + * + * \param p_mi the Media Player + * \return boolean + * + * \libvlc_return_bool + */ +LIBVLC_API int libvlc_media_player_will_play( libvlc_media_player_t *p_mi ); + +/** + * Get title chapter count + * + * \param p_mi the Media Player + * \param i_title title + * \return number of chapters in title, or -1 + */ +LIBVLC_API int libvlc_media_player_get_chapter_count_for_title( + libvlc_media_player_t *p_mi, int i_title ); + +/** + * Set movie title + * + * \param p_mi the Media Player + * \param i_title title number to play + */ +LIBVLC_API void libvlc_media_player_set_title( libvlc_media_player_t *p_mi, int i_title ); + +/** + * Get movie title + * + * \param p_mi the Media Player + * \return title number currently playing, or -1 + */ +LIBVLC_API int libvlc_media_player_get_title( libvlc_media_player_t *p_mi ); + +/** + * Get movie title count + * + * \param p_mi the Media Player + * \return title number count, or -1 + */ +LIBVLC_API int libvlc_media_player_get_title_count( libvlc_media_player_t *p_mi ); + +/** + * Set previous chapter (if applicable) + * + * \param p_mi the Media Player + */ +LIBVLC_API void libvlc_media_player_previous_chapter( libvlc_media_player_t *p_mi ); + +/** + * Set next chapter (if applicable) + * + * \param p_mi the Media Player + */ +LIBVLC_API void libvlc_media_player_next_chapter( libvlc_media_player_t *p_mi ); + +/** + * Get the requested movie play rate. + * @warning Depending on the underlying media, the requested rate may be + * different from the real playback rate. + * + * \param p_mi the Media Player + * \return movie play rate + */ +LIBVLC_API float libvlc_media_player_get_rate( libvlc_media_player_t *p_mi ); + +/** + * Set movie play rate + * + * \param p_mi the Media Player + * \param rate movie play rate to set + * \return -1 if an error was detected, 0 otherwise (but even then, it might + * not actually work depending on the underlying media protocol) + */ +LIBVLC_API int libvlc_media_player_set_rate( libvlc_media_player_t *p_mi, float rate ); + +/** + * Get current movie state + * + * \param p_mi the Media Player + * \return the current state of the media player (playing, paused, ...) \see libvlc_state_t + */ +LIBVLC_API libvlc_state_t libvlc_media_player_get_state( libvlc_media_player_t *p_mi ); + +/** + * How many video outputs does this media player have? + * + * \param p_mi the media player + * \return the number of video outputs + */ +LIBVLC_API unsigned libvlc_media_player_has_vout( libvlc_media_player_t *p_mi ); + +/** + * Is this media player seekable? + * + * \param p_mi the media player + * \return true if the media player can seek + * + * \libvlc_return_bool + */ +LIBVLC_API int libvlc_media_player_is_seekable( libvlc_media_player_t *p_mi ); + +/** + * Can this media player be paused? + * + * \param p_mi the media player + * \return true if the media player can pause + * + * \libvlc_return_bool + */ +LIBVLC_API int libvlc_media_player_can_pause( libvlc_media_player_t *p_mi ); + +/** + * Check if the current program is scrambled + * + * \param p_mi the media player + * \return true if the current program is scrambled + * + * \libvlc_return_bool + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API int libvlc_media_player_program_scrambled( libvlc_media_player_t *p_mi ); + +/** + * Display the next frame (if supported) + * + * \param p_mi the media player + */ +LIBVLC_API void libvlc_media_player_next_frame( libvlc_media_player_t *p_mi ); + +/** + * Navigate through DVD Menu + * + * \param p_mi the Media Player + * \param navigate the Navigation mode + * \version libVLC 2.0.0 or later + */ +LIBVLC_API void libvlc_media_player_navigate( libvlc_media_player_t* p_mi, + unsigned navigate ); + +/** + * Set if, and how, the video title will be shown when media is played. + * + * \param p_mi the media player + * \param position position at which to display the title, or libvlc_position_disable to prevent the title from being displayed + * \param timeout title display timeout in milliseconds (ignored if libvlc_position_disable) + * \version libVLC 2.1.0 or later + */ +LIBVLC_API void libvlc_media_player_set_video_title_display( libvlc_media_player_t *p_mi, libvlc_position_t position, unsigned int timeout ); + +/** + * Add a slave to the current media player. + * + * \note If the player is playing, the slave will be added directly. This call + * will also update the slave list of the attached libvlc_media_t. + * + * \version LibVLC 3.0.0 and later. + * + * \see libvlc_media_slaves_add + * + * \param p_mi the media player + * \param i_type subtitle or audio + * \param psz_uri Uri of the slave (should contain a valid scheme). + * \param b_select True if this slave should be selected when it's loaded + * + * \return 0 on success, -1 on error. + */ +LIBVLC_API +int libvlc_media_player_add_slave( libvlc_media_player_t *p_mi, + libvlc_media_slave_type_t i_type, + const char *psz_uri, bool b_select ); + +/** + * Release (free) libvlc_track_description_t + * + * \param p_track_description the structure to release + */ +LIBVLC_API void libvlc_track_description_list_release( libvlc_track_description_t *p_track_description ); + +/** \defgroup libvlc_video LibVLC video controls + * @{ + */ + +/** + * Toggle fullscreen status on non-embedded video outputs. + * + * @warning The same limitations applies to this function + * as to libvlc_set_fullscreen(). + * + * \param p_mi the media player + */ +LIBVLC_API void libvlc_toggle_fullscreen( libvlc_media_player_t *p_mi ); + +/** + * Enable or disable fullscreen. + * + * @warning With most window managers, only a top-level windows can be in + * full-screen mode. Hence, this function will not operate properly if + * libvlc_media_player_set_xwindow() was used to embed the video in a + * non-top-level window. In that case, the embedding window must be reparented + * to the root window before fullscreen mode is enabled. You will want + * to reparent it back to its normal parent when disabling fullscreen. + * + * \param p_mi the media player + * \param b_fullscreen boolean for fullscreen status + */ +LIBVLC_API void libvlc_set_fullscreen( libvlc_media_player_t *p_mi, int b_fullscreen ); + +/** + * Get current fullscreen status. + * + * \param p_mi the media player + * \return the fullscreen status (boolean) + * + * \libvlc_return_bool + */ +LIBVLC_API int libvlc_get_fullscreen( libvlc_media_player_t *p_mi ); + +/** + * Enable or disable key press events handling, according to the LibVLC hotkeys + * configuration. By default and for historical reasons, keyboard events are + * handled by the LibVLC video widget. + * + * \note On X11, there can be only one subscriber for key press and mouse + * click events per window. If your application has subscribed to those events + * for the X window ID of the video widget, then LibVLC will not be able to + * handle key presses and mouse clicks in any case. + * + * \warning This function is only implemented for X11 and Win32 at the moment. + * + * \param p_mi the media player + * \param on true to handle key press events, false to ignore them. + */ +LIBVLC_API +void libvlc_video_set_key_input( libvlc_media_player_t *p_mi, unsigned on ); + +/** + * Enable or disable mouse click events handling. By default, those events are + * handled. This is needed for DVD menus to work, as well as a few video + * filters such as "puzzle". + * + * \see libvlc_video_set_key_input(). + * + * \warning This function is only implemented for X11 and Win32 at the moment. + * + * \param p_mi the media player + * \param on true to handle mouse click events, false to ignore them. + */ +LIBVLC_API +void libvlc_video_set_mouse_input( libvlc_media_player_t *p_mi, unsigned on ); + +/** + * Get the pixel dimensions of a video. + * + * \param p_mi media player + * \param num number of the video (starting from, and most commonly 0) + * \param px pointer to get the pixel width [OUT] + * \param py pointer to get the pixel height [OUT] + * \return 0 on success, -1 if the specified video does not exist + */ +LIBVLC_API +int libvlc_video_get_size( libvlc_media_player_t *p_mi, unsigned num, + unsigned *px, unsigned *py ); + +/** + * Get the mouse pointer coordinates over a video. + * Coordinates are expressed in terms of the decoded video resolution, + * not in terms of pixels on the screen/viewport (to get the latter, + * you can query your windowing system directly). + * + * Either of the coordinates may be negative or larger than the corresponding + * dimension of the video, if the cursor is outside the rendering area. + * + * @warning The coordinates may be out-of-date if the pointer is not located + * on the video rendering area. LibVLC does not track the pointer if it is + * outside of the video widget. + * + * @note LibVLC does not support multiple pointers (it does of course support + * multiple input devices sharing the same pointer) at the moment. + * + * \param p_mi media player + * \param num number of the video (starting from, and most commonly 0) + * \param px pointer to get the abscissa [OUT] + * \param py pointer to get the ordinate [OUT] + * \return 0 on success, -1 if the specified video does not exist + */ +LIBVLC_API +int libvlc_video_get_cursor( libvlc_media_player_t *p_mi, unsigned num, + int *px, int *py ); + +/** + * Get the current video scaling factor. + * See also libvlc_video_set_scale(). + * + * \param p_mi the media player + * \return the currently configured zoom factor, or 0. if the video is set + * to fit to the output window/drawable automatically. + */ +LIBVLC_API float libvlc_video_get_scale( libvlc_media_player_t *p_mi ); + +/** + * Set the video scaling factor. That is the ratio of the number of pixels on + * screen to the number of pixels in the original decoded video in each + * dimension. Zero is a special value; it will adjust the video to the output + * window/drawable (in windowed mode) or the entire screen. + * + * Note that not all video outputs support scaling. + * + * \param p_mi the media player + * \param f_factor the scaling factor, or zero + */ +LIBVLC_API void libvlc_video_set_scale( libvlc_media_player_t *p_mi, float f_factor ); + +/** + * Get current video aspect ratio. + * + * \param p_mi the media player + * \return the video aspect ratio or NULL if unspecified + * (the result must be released with free() or libvlc_free()). + */ +LIBVLC_API char *libvlc_video_get_aspect_ratio( libvlc_media_player_t *p_mi ); + +/** + * Set new video aspect ratio. + * + * \param p_mi the media player + * \param psz_aspect new video aspect-ratio or NULL to reset to default + * \note Invalid aspect ratios are ignored. + */ +LIBVLC_API void libvlc_video_set_aspect_ratio( libvlc_media_player_t *p_mi, const char *psz_aspect ); + +/** + * Create a video viewpoint structure. + * + * \version LibVLC 3.0.0 and later + * + * \return video viewpoint or NULL + * (the result must be released with free() or libvlc_free()). + */ +LIBVLC_API libvlc_video_viewpoint_t *libvlc_video_new_viewpoint(void); + +/** + * Update the video viewpoint information. + * + * \note It is safe to call this function before the media player is started. + * + * \version LibVLC 3.0.0 and later + * + * \param p_mi the media player + * \param p_viewpoint video viewpoint allocated via libvlc_video_new_viewpoint() + * \param b_absolute if true replace the old viewpoint with the new one. If + * false, increase/decrease it. + * \return -1 in case of error, 0 otherwise + * + * \note the values are set asynchronously, it will be used by the next frame displayed. + */ +LIBVLC_API int libvlc_video_update_viewpoint( libvlc_media_player_t *p_mi, + const libvlc_video_viewpoint_t *p_viewpoint, + bool b_absolute); + +/** + * Get current video subtitle. + * + * \param p_mi the media player + * \return the video subtitle selected, or -1 if none + */ +LIBVLC_API int libvlc_video_get_spu( libvlc_media_player_t *p_mi ); + +/** + * Get the number of available video subtitles. + * + * \param p_mi the media player + * \return the number of available video subtitles + */ +LIBVLC_API int libvlc_video_get_spu_count( libvlc_media_player_t *p_mi ); + +/** + * Get the description of available video subtitles. + * + * \param p_mi the media player + * \return list containing description of available video subtitles. + * It must be freed with libvlc_track_description_list_release() + */ +LIBVLC_API libvlc_track_description_t * + libvlc_video_get_spu_description( libvlc_media_player_t *p_mi ); + +/** + * Set new video subtitle. + * + * \param p_mi the media player + * \param i_spu video subtitle track to select (i_id from track description) + * \return 0 on success, -1 if out of range + */ +LIBVLC_API int libvlc_video_set_spu( libvlc_media_player_t *p_mi, int i_spu ); + +/** + * Get the current subtitle delay. Positive values means subtitles are being + * displayed later, negative values earlier. + * + * \param p_mi media player + * \return time (in microseconds) the display of subtitles is being delayed + * \version LibVLC 2.0.0 or later + */ +LIBVLC_API int64_t libvlc_video_get_spu_delay( libvlc_media_player_t *p_mi ); + +/** + * Set the subtitle delay. This affects the timing of when the subtitle will + * be displayed. Positive values result in subtitles being displayed later, + * while negative values will result in subtitles being displayed earlier. + * + * The subtitle delay will be reset to zero each time the media changes. + * + * \param p_mi media player + * \param i_delay time (in microseconds) the display of subtitles should be delayed + * \return 0 on success, -1 on error + * \version LibVLC 2.0.0 or later + */ +LIBVLC_API int libvlc_video_set_spu_delay( libvlc_media_player_t *p_mi, int64_t i_delay ); + +/** + * Get the full description of available titles + * + * \version LibVLC 3.0.0 and later. + * + * \param p_mi the media player + * \param titles address to store an allocated array of title descriptions + * descriptions (must be freed with libvlc_title_descriptions_release() + * by the caller) [OUT] + * + * \return the number of titles (-1 on error) + */ +LIBVLC_API int libvlc_media_player_get_full_title_descriptions( libvlc_media_player_t *p_mi, + libvlc_title_description_t ***titles ); + +/** + * Release a title description + * + * \version LibVLC 3.0.0 and later + * + * \param p_titles title description array to release + * \param i_count number of title descriptions to release + */ +LIBVLC_API + void libvlc_title_descriptions_release( libvlc_title_description_t **p_titles, + unsigned i_count ); + +/** + * Get the full description of available chapters + * + * \version LibVLC 3.0.0 and later. + * + * \param p_mi the media player + * \param i_chapters_of_title index of the title to query for chapters (uses current title if set to -1) + * \param pp_chapters address to store an allocated array of chapter descriptions + * descriptions (must be freed with libvlc_chapter_descriptions_release() + * by the caller) [OUT] + * + * \return the number of chapters (-1 on error) + */ +LIBVLC_API int libvlc_media_player_get_full_chapter_descriptions( libvlc_media_player_t *p_mi, + int i_chapters_of_title, + libvlc_chapter_description_t *** pp_chapters ); + +/** + * Release a chapter description + * + * \version LibVLC 3.0.0 and later + * + * \param p_chapters chapter description array to release + * \param i_count number of chapter descriptions to release + */ +LIBVLC_API +void libvlc_chapter_descriptions_release( libvlc_chapter_description_t **p_chapters, + unsigned i_count ); + +/** + * Get current crop filter geometry. + * + * \param p_mi the media player + * \return the crop filter geometry or NULL if unset + */ +LIBVLC_API char *libvlc_video_get_crop_geometry( libvlc_media_player_t *p_mi ); + +/** + * Set new crop filter geometry. + * + * \param p_mi the media player + * \param psz_geometry new crop filter geometry (NULL to unset) + */ +LIBVLC_API +void libvlc_video_set_crop_geometry( libvlc_media_player_t *p_mi, const char *psz_geometry ); + +/** + * Get current teletext page requested or 0 if it's disabled. + * + * Teletext is disabled by default, call libvlc_video_set_teletext() to enable + * it. + * + * \param p_mi the media player + * \return the current teletext page requested. + */ +LIBVLC_API int libvlc_video_get_teletext( libvlc_media_player_t *p_mi ); + +/** + * Set new teletext page to retrieve. + * + * This function can also be used to send a teletext key. + * + * \param p_mi the media player + * \param i_page teletex page number requested. This value can be 0 to disable + * teletext, a number in the range ]0;1000[ to show the requested page, or a + * \ref libvlc_teletext_key_t. 100 is the default teletext page. + */ +LIBVLC_API void libvlc_video_set_teletext( libvlc_media_player_t *p_mi, int i_page ); + +/** + * Get number of available video tracks. + * + * \param p_mi media player + * \return the number of available video tracks (int) + */ +LIBVLC_API int libvlc_video_get_track_count( libvlc_media_player_t *p_mi ); + +/** + * Get the description of available video tracks. + * + * \param p_mi media player + * \return list with description of available video tracks, or NULL on error. + * It must be freed with libvlc_track_description_list_release() + */ +LIBVLC_API libvlc_track_description_t * + libvlc_video_get_track_description( libvlc_media_player_t *p_mi ); + +/** + * Get current video track. + * + * \param p_mi media player + * \return the video track ID (int) or -1 if no active input + */ +LIBVLC_API int libvlc_video_get_track( libvlc_media_player_t *p_mi ); + +/** + * Set video track. + * + * \param p_mi media player + * \param i_track the track ID (i_id field from track description) + * \return 0 on success, -1 if out of range + */ +LIBVLC_API +int libvlc_video_set_track( libvlc_media_player_t *p_mi, int i_track ); + +/** + * Take a snapshot of the current video window. + * + * If i_width AND i_height is 0, original size is used. + * If i_width XOR i_height is 0, original aspect-ratio is preserved. + * + * \param p_mi media player instance + * \param num number of video output (typically 0 for the first/only one) + * \param psz_filepath the path of a file or a folder to save the screenshot into + * \param i_width the snapshot's width + * \param i_height the snapshot's height + * \return 0 on success, -1 if the video was not found + */ +LIBVLC_API +int libvlc_video_take_snapshot( libvlc_media_player_t *p_mi, unsigned num, + const char *psz_filepath, unsigned int i_width, + unsigned int i_height ); + +/** + * Enable or disable deinterlace filter + * + * \param p_mi libvlc media player + * \param psz_mode type of deinterlace filter, NULL to disable + */ +LIBVLC_API void libvlc_video_set_deinterlace( libvlc_media_player_t *p_mi, + const char *psz_mode ); + +/** + * Get an integer marquee option value + * + * \param p_mi libvlc media player + * \param option marq option to get \see libvlc_video_marquee_int_option_t + */ +LIBVLC_API int libvlc_video_get_marquee_int( libvlc_media_player_t *p_mi, + unsigned option ); + +/** + * Get a string marquee option value + * + * \param p_mi libvlc media player + * \param option marq option to get \see libvlc_video_marquee_string_option_t + */ +LIBVLC_API char *libvlc_video_get_marquee_string( libvlc_media_player_t *p_mi, + unsigned option ); + +/** + * Enable, disable or set an integer marquee option + * + * Setting libvlc_marquee_Enable has the side effect of enabling (arg !0) + * or disabling (arg 0) the marq filter. + * + * \param p_mi libvlc media player + * \param option marq option to set \see libvlc_video_marquee_int_option_t + * \param i_val marq option value + */ +LIBVLC_API void libvlc_video_set_marquee_int( libvlc_media_player_t *p_mi, + unsigned option, int i_val ); + +/** + * Set a marquee string option + * + * \param p_mi libvlc media player + * \param option marq option to set \see libvlc_video_marquee_string_option_t + * \param psz_text marq option value + */ +LIBVLC_API void libvlc_video_set_marquee_string( libvlc_media_player_t *p_mi, + unsigned option, const char *psz_text ); + +/** option values for libvlc_video_{get,set}_logo_{int,string} */ +enum libvlc_video_logo_option_t { + libvlc_logo_enable, + libvlc_logo_file, /**< string argument, "file,d,t;file,d,t;..." */ + libvlc_logo_x, + libvlc_logo_y, + libvlc_logo_delay, + libvlc_logo_repeat, + libvlc_logo_opacity, + libvlc_logo_position +}; + +/** + * Get integer logo option. + * + * \param p_mi libvlc media player instance + * \param option logo option to get, values of libvlc_video_logo_option_t + */ +LIBVLC_API int libvlc_video_get_logo_int( libvlc_media_player_t *p_mi, + unsigned option ); + +/** + * Set logo option as integer. Options that take a different type value + * are ignored. + * Passing libvlc_logo_enable as option value has the side effect of + * starting (arg !0) or stopping (arg 0) the logo filter. + * + * \param p_mi libvlc media player instance + * \param option logo option to set, values of libvlc_video_logo_option_t + * \param value logo option value + */ +LIBVLC_API void libvlc_video_set_logo_int( libvlc_media_player_t *p_mi, + unsigned option, int value ); + +/** + * Set logo option as string. Options that take a different type value + * are ignored. + * + * \param p_mi libvlc media player instance + * \param option logo option to set, values of libvlc_video_logo_option_t + * \param psz_value logo option value + */ +LIBVLC_API void libvlc_video_set_logo_string( libvlc_media_player_t *p_mi, + unsigned option, const char *psz_value ); + + +/** option values for libvlc_video_{get,set}_adjust_{int,float,bool} */ +enum libvlc_video_adjust_option_t { + libvlc_adjust_Enable = 0, + libvlc_adjust_Contrast, + libvlc_adjust_Brightness, + libvlc_adjust_Hue, + libvlc_adjust_Saturation, + libvlc_adjust_Gamma +}; + +/** + * Get integer adjust option. + * + * \param p_mi libvlc media player instance + * \param option adjust option to get, values of libvlc_video_adjust_option_t + * \version LibVLC 1.1.1 and later. + */ +LIBVLC_API int libvlc_video_get_adjust_int( libvlc_media_player_t *p_mi, + unsigned option ); + +/** + * Set adjust option as integer. Options that take a different type value + * are ignored. + * Passing libvlc_adjust_enable as option value has the side effect of + * starting (arg !0) or stopping (arg 0) the adjust filter. + * + * \param p_mi libvlc media player instance + * \param option adust option to set, values of libvlc_video_adjust_option_t + * \param value adjust option value + * \version LibVLC 1.1.1 and later. + */ +LIBVLC_API void libvlc_video_set_adjust_int( libvlc_media_player_t *p_mi, + unsigned option, int value ); + +/** + * Get float adjust option. + * + * \param p_mi libvlc media player instance + * \param option adjust option to get, values of libvlc_video_adjust_option_t + * \version LibVLC 1.1.1 and later. + */ +LIBVLC_API float libvlc_video_get_adjust_float( libvlc_media_player_t *p_mi, + unsigned option ); + +/** + * Set adjust option as float. Options that take a different type value + * are ignored. + * + * \param p_mi libvlc media player instance + * \param option adust option to set, values of libvlc_video_adjust_option_t + * \param value adjust option value + * \version LibVLC 1.1.1 and later. + */ +LIBVLC_API void libvlc_video_set_adjust_float( libvlc_media_player_t *p_mi, + unsigned option, float value ); + +/** @} video */ + +/** \defgroup libvlc_audio LibVLC audio controls + * @{ + */ + +/** + * Audio device types + */ +typedef enum libvlc_audio_output_device_types_t { + libvlc_AudioOutputDevice_Error = -1, + libvlc_AudioOutputDevice_Mono = 1, + libvlc_AudioOutputDevice_Stereo = 2, + libvlc_AudioOutputDevice_2F2R = 4, + libvlc_AudioOutputDevice_3F2R = 5, + libvlc_AudioOutputDevice_5_1 = 6, + libvlc_AudioOutputDevice_6_1 = 7, + libvlc_AudioOutputDevice_7_1 = 8, + libvlc_AudioOutputDevice_SPDIF = 10 +} libvlc_audio_output_device_types_t; + +/** + * Audio channels + */ +typedef enum libvlc_audio_output_channel_t { + libvlc_AudioChannel_Error = -1, + libvlc_AudioChannel_Stereo = 1, + libvlc_AudioChannel_RStereo = 2, + libvlc_AudioChannel_Left = 3, + libvlc_AudioChannel_Right = 4, + libvlc_AudioChannel_Dolbys = 5 +} libvlc_audio_output_channel_t; + + +/** + * Gets the list of available audio output modules. + * + * \param p_instance libvlc instance + * \return list of available audio outputs. It must be freed with +* \see libvlc_audio_output_list_release \see libvlc_audio_output_t . + * In case of error, NULL is returned. + */ +LIBVLC_API libvlc_audio_output_t * +libvlc_audio_output_list_get( libvlc_instance_t *p_instance ); + +/** + * Frees the list of available audio output modules. + * + * \param p_list list with audio outputs for release + */ +LIBVLC_API +void libvlc_audio_output_list_release( libvlc_audio_output_t *p_list ); + +/** + * Selects an audio output module. + * \note Any change will take be effect only after playback is stopped and + * restarted. Audio output cannot be changed while playing. + * + * \param p_mi media player + * \param psz_name name of audio output, + * use psz_name of \see libvlc_audio_output_t + * \return 0 if function succeeded, -1 on error + */ +LIBVLC_API int libvlc_audio_output_set( libvlc_media_player_t *p_mi, + const char *psz_name ); + +/** + * Gets a list of potential audio output devices, + * \see libvlc_audio_output_device_set(). + * + * \note Not all audio outputs support enumerating devices. + * The audio output may be functional even if the list is empty (NULL). + * + * \note The list may not be exhaustive. + * + * \warning Some audio output devices in the list might not actually work in + * some circumstances. By default, it is recommended to not specify any + * explicit audio device. + * + * \param mp media player + * \return A NULL-terminated linked list of potential audio output devices. + * It must be freed with libvlc_audio_output_device_list_release() + * \version LibVLC 2.2.0 or later. + */ +LIBVLC_API libvlc_audio_output_device_t * +libvlc_audio_output_device_enum( libvlc_media_player_t *mp ); + +/** + * Gets a list of audio output devices for a given audio output module, + * \see libvlc_audio_output_device_set(). + * + * \note Not all audio outputs support this. In particular, an empty (NULL) + * list of devices does not imply that the specified audio output does + * not work. + * + * \note The list might not be exhaustive. + * + * \warning Some audio output devices in the list might not actually work in + * some circumstances. By default, it is recommended to not specify any + * explicit audio device. + * + * \param p_instance libvlc instance + * \param aout audio output name + * (as returned by libvlc_audio_output_list_get()) + * \return A NULL-terminated linked list of potential audio output devices. + * It must be freed with libvlc_audio_output_device_list_release() + * \version LibVLC 2.1.0 or later. + */ +LIBVLC_API libvlc_audio_output_device_t * +libvlc_audio_output_device_list_get( libvlc_instance_t *p_instance, + const char *aout ); + +/** + * Frees a list of available audio output devices. + * + * \param p_list list with audio outputs for release + * \version LibVLC 2.1.0 or later. + */ +LIBVLC_API void libvlc_audio_output_device_list_release( + libvlc_audio_output_device_t *p_list ); + +/** + * Configures an explicit audio output device. + * + * If the module paramater is NULL, audio output will be moved to the device + * specified by the device identifier string immediately. This is the + * recommended usage. + * + * A list of adequate potential device strings can be obtained with + * libvlc_audio_output_device_enum(). + * + * However passing NULL is supported in LibVLC version 2.2.0 and later only; + * in earlier versions, this function would have no effects when the module + * parameter was NULL. + * + * If the module parameter is not NULL, the device parameter of the + * corresponding audio output, if it exists, will be set to the specified + * string. Note that some audio output modules do not have such a parameter + * (notably MMDevice and PulseAudio). + * + * A list of adequate potential device strings can be obtained with + * libvlc_audio_output_device_list_get(). + * + * \note This function does not select the specified audio output plugin. + * libvlc_audio_output_set() is used for that purpose. + * + * \warning The syntax for the device parameter depends on the audio output. + * + * Some audio output modules require further parameters (e.g. a channels map + * in the case of ALSA). + * + * \param mp media player + * \param module If NULL, current audio output module. + * if non-NULL, name of audio output module + (\see libvlc_audio_output_t) + * \param device_id device identifier string + * \return Nothing. Errors are ignored (this is a design bug). + */ +LIBVLC_API void libvlc_audio_output_device_set( libvlc_media_player_t *mp, + const char *module, + const char *device_id ); + +/** + * Get the current audio output device identifier. + * + * This complements libvlc_audio_output_device_set(). + * + * \warning The initial value for the current audio output device identifier + * may not be set or may be some unknown value. A LibVLC application should + * compare this value against the known device identifiers (e.g. those that + * were previously retrieved by a call to libvlc_audio_output_device_enum or + * libvlc_audio_output_device_list_get) to find the current audio output device. + * + * It is possible that the selected audio output device changes (an external + * change) without a call to libvlc_audio_output_device_set. That may make this + * method unsuitable to use if a LibVLC application is attempting to track + * dynamic audio device changes as they happen. + * + * \param mp media player + * \return the current audio output device identifier + * NULL if no device is selected or in case of error + * (the result must be released with free() or libvlc_free()). + * \version LibVLC 3.0.0 or later. + */ +LIBVLC_API char *libvlc_audio_output_device_get( libvlc_media_player_t *mp ); + +/** + * Toggle mute status. + * + * \param p_mi media player + * \warning Toggling mute atomically is not always possible: On some platforms, + * other processes can mute the VLC audio playback stream asynchronously. Thus, + * there is a small race condition where toggling will not work. + * See also the limitations of libvlc_audio_set_mute(). + */ +LIBVLC_API void libvlc_audio_toggle_mute( libvlc_media_player_t *p_mi ); + +/** + * Get current mute status. + * + * \param p_mi media player + * \return the mute status (boolean) if defined, -1 if undefined/unapplicable + */ +LIBVLC_API int libvlc_audio_get_mute( libvlc_media_player_t *p_mi ); + +/** + * Set mute status. + * + * \param p_mi media player + * \param status If status is true then mute, otherwise unmute + * \warning This function does not always work. If there are no active audio + * playback stream, the mute status might not be available. If digital + * pass-through (S/PDIF, HDMI...) is in use, muting may be unapplicable. Also + * some audio output plugins do not support muting at all. + * \note To force silent playback, disable all audio tracks. This is more + * efficient and reliable than mute. + */ +LIBVLC_API void libvlc_audio_set_mute( libvlc_media_player_t *p_mi, int status ); + +/** + * Get current software audio volume. + * + * \param p_mi media player + * \return the software volume in percents + * (0 = mute, 100 = nominal / 0dB) + */ +LIBVLC_API int libvlc_audio_get_volume( libvlc_media_player_t *p_mi ); + +/** + * Set current software audio volume. + * + * \param p_mi media player + * \param i_volume the volume in percents (0 = mute, 100 = 0dB) + * \return 0 if the volume was set, -1 if it was out of range + */ +LIBVLC_API int libvlc_audio_set_volume( libvlc_media_player_t *p_mi, int i_volume ); + +/** + * Get number of available audio tracks. + * + * \param p_mi media player + * \return the number of available audio tracks (int), or -1 if unavailable + */ +LIBVLC_API int libvlc_audio_get_track_count( libvlc_media_player_t *p_mi ); + +/** + * Get the description of available audio tracks. + * + * \param p_mi media player + * \return list with description of available audio tracks, or NULL. + * It must be freed with libvlc_track_description_list_release() + */ +LIBVLC_API libvlc_track_description_t * + libvlc_audio_get_track_description( libvlc_media_player_t *p_mi ); + +/** + * Get current audio track. + * + * \param p_mi media player + * \return the audio track ID or -1 if no active input. + */ +LIBVLC_API int libvlc_audio_get_track( libvlc_media_player_t *p_mi ); + +/** + * Set current audio track. + * + * \param p_mi media player + * \param i_track the track ID (i_id field from track description) + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_audio_set_track( libvlc_media_player_t *p_mi, int i_track ); + +/** + * Get current audio channel. + * + * \param p_mi media player + * \return the audio channel \see libvlc_audio_output_channel_t + */ +LIBVLC_API int libvlc_audio_get_channel( libvlc_media_player_t *p_mi ); + +/** + * Set current audio channel. + * + * \param p_mi media player + * \param channel the audio channel, \see libvlc_audio_output_channel_t + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_audio_set_channel( libvlc_media_player_t *p_mi, int channel ); + +/** + * Get current audio delay. + * + * \param p_mi media player + * \return the audio delay (microseconds) + * \version LibVLC 1.1.1 or later + */ +LIBVLC_API int64_t libvlc_audio_get_delay( libvlc_media_player_t *p_mi ); + +/** + * Set current audio delay. The audio delay will be reset to zero each time the media changes. + * + * \param p_mi media player + * \param i_delay the audio delay (microseconds) + * \return 0 on success, -1 on error + * \version LibVLC 1.1.1 or later + */ +LIBVLC_API int libvlc_audio_set_delay( libvlc_media_player_t *p_mi, int64_t i_delay ); + +/** + * Get the number of equalizer presets. + * + * \return number of presets + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API unsigned libvlc_audio_equalizer_get_preset_count( void ); + +/** + * Get the name of a particular equalizer preset. + * + * This name can be used, for example, to prepare a preset label or menu in a user + * interface. + * + * \param u_index index of the preset, counting from zero + * \return preset name, or NULL if there is no such preset + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API const char *libvlc_audio_equalizer_get_preset_name( unsigned u_index ); + +/** + * Get the number of distinct frequency bands for an equalizer. + * + * \return number of frequency bands + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API unsigned libvlc_audio_equalizer_get_band_count( void ); + +/** + * Get a particular equalizer band frequency. + * + * This value can be used, for example, to create a label for an equalizer band control + * in a user interface. + * + * \param u_index index of the band, counting from zero + * \return equalizer band frequency (Hz), or -1 if there is no such band + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API float libvlc_audio_equalizer_get_band_frequency( unsigned u_index ); + +/** + * Create a new default equalizer, with all frequency values zeroed. + * + * The new equalizer can subsequently be applied to a media player by invoking + * libvlc_media_player_set_equalizer(). + * + * The returned handle should be freed via libvlc_audio_equalizer_release() when + * it is no longer needed. + * + * \return opaque equalizer handle, or NULL on error + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API libvlc_equalizer_t *libvlc_audio_equalizer_new( void ); + +/** + * Create a new equalizer, with initial frequency values copied from an existing + * preset. + * + * The new equalizer can subsequently be applied to a media player by invoking + * libvlc_media_player_set_equalizer(). + * + * The returned handle should be freed via libvlc_audio_equalizer_release() when + * it is no longer needed. + * + * \param u_index index of the preset, counting from zero + * \return opaque equalizer handle, or NULL on error + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API libvlc_equalizer_t *libvlc_audio_equalizer_new_from_preset( unsigned u_index ); + +/** + * Release a previously created equalizer instance. + * + * The equalizer was previously created by using libvlc_audio_equalizer_new() or + * libvlc_audio_equalizer_new_from_preset(). + * + * It is safe to invoke this method with a NULL p_equalizer parameter for no effect. + * + * \param p_equalizer opaque equalizer handle, or NULL + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API void libvlc_audio_equalizer_release( libvlc_equalizer_t *p_equalizer ); + +/** + * Set a new pre-amplification value for an equalizer. + * + * The new equalizer settings are subsequently applied to a media player by invoking + * libvlc_media_player_set_equalizer(). + * + * The supplied amplification value will be clamped to the -20.0 to +20.0 range. + * + * \param p_equalizer valid equalizer handle, must not be NULL + * \param f_preamp preamp value (-20.0 to 20.0 Hz) + * \return zero on success, -1 on error + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API int libvlc_audio_equalizer_set_preamp( libvlc_equalizer_t *p_equalizer, float f_preamp ); + +/** + * Get the current pre-amplification value from an equalizer. + * + * \param p_equalizer valid equalizer handle, must not be NULL + * \return preamp value (Hz) + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API float libvlc_audio_equalizer_get_preamp( libvlc_equalizer_t *p_equalizer ); + +/** + * Set a new amplification value for a particular equalizer frequency band. + * + * The new equalizer settings are subsequently applied to a media player by invoking + * libvlc_media_player_set_equalizer(). + * + * The supplied amplification value will be clamped to the -20.0 to +20.0 range. + * + * \param p_equalizer valid equalizer handle, must not be NULL + * \param f_amp amplification value (-20.0 to 20.0 Hz) + * \param u_band index, counting from zero, of the frequency band to set + * \return zero on success, -1 on error + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API int libvlc_audio_equalizer_set_amp_at_index( libvlc_equalizer_t *p_equalizer, float f_amp, unsigned u_band ); + +/** + * Get the amplification value for a particular equalizer frequency band. + * + * \param p_equalizer valid equalizer handle, must not be NULL + * \param u_band index, counting from zero, of the frequency band to get + * \return amplification value (Hz); NaN if there is no such frequency band + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API float libvlc_audio_equalizer_get_amp_at_index( libvlc_equalizer_t *p_equalizer, unsigned u_band ); + +/** + * Apply new equalizer settings to a media player. + * + * The equalizer is first created by invoking libvlc_audio_equalizer_new() or + * libvlc_audio_equalizer_new_from_preset(). + * + * It is possible to apply new equalizer settings to a media player whether the media + * player is currently playing media or not. + * + * Invoking this method will immediately apply the new equalizer settings to the audio + * output of the currently playing media if there is any. + * + * If there is no currently playing media, the new equalizer settings will be applied + * later if and when new media is played. + * + * Equalizer settings will automatically be applied to subsequently played media. + * + * To disable the equalizer for a media player invoke this method passing NULL for the + * p_equalizer parameter. + * + * The media player does not keep a reference to the supplied equalizer so it is safe + * for an application to release the equalizer reference any time after this method + * returns. + * + * \param p_mi opaque media player handle + * \param p_equalizer opaque equalizer handle, or NULL to disable the equalizer for this media player + * \return zero on success, -1 on error + * \version LibVLC 2.2.0 or later + */ +LIBVLC_API int libvlc_media_player_set_equalizer( libvlc_media_player_t *p_mi, libvlc_equalizer_t *p_equalizer ); + +/** + * Media player roles. + * + * \version LibVLC 3.0.0 and later. + * + * See \ref libvlc_media_player_set_role() + */ +typedef enum libvlc_media_player_role { + libvlc_role_None = 0, /**< Don't use a media player role */ + libvlc_role_Music, /**< Music (or radio) playback */ + libvlc_role_Video, /**< Video playback */ + libvlc_role_Communication, /**< Speech, real-time communication */ + libvlc_role_Game, /**< Video game */ + libvlc_role_Notification, /**< User interaction feedback */ + libvlc_role_Animation, /**< Embedded animation (e.g. in web page) */ + libvlc_role_Production, /**< Audio editting/production */ + libvlc_role_Accessibility, /**< Accessibility */ + libvlc_role_Test /** Testing */ +#define libvlc_role_Last libvlc_role_Test +} libvlc_media_player_role_t; + +/** + * Gets the media role. + * + * \version LibVLC 3.0.0 and later. + * + * \param p_mi media player + * \return the media player role (\ref libvlc_media_player_role_t) + */ +LIBVLC_API int libvlc_media_player_get_role(libvlc_media_player_t *p_mi); + +/** + * Sets the media role. + * + * \param p_mi media player + * \param role the media player role (\ref libvlc_media_player_role_t) + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_media_player_set_role(libvlc_media_player_t *p_mi, + unsigned role); + +/** @} audio */ + +/** @} media_player */ + +# ifdef __cplusplus +} +# endif + +#endif /* VLC_LIBVLC_MEDIA_PLAYER_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc_renderer_discoverer.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc_renderer_discoverer.h new file mode 100644 index 0000000..e63a8c9 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc_renderer_discoverer.h @@ -0,0 +1,255 @@ +/***************************************************************************** + * libvlc_renderer_discoverer.h: libvlc external API + ***************************************************************************** + * Copyright © 2016 VLC authors and VideoLAN + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_LIBVLC_RENDERER_DISCOVERER_H +#define VLC_LIBVLC_RENDERER_DISCOVERER_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +/** + * @defgroup libvlc_renderer_discoverer LibVLC renderer discoverer + * @ingroup libvlc + * LibVLC renderer discoverer finds available renderers available on the local + * network + * @{ + * @file + * LibVLC renderer discoverer external API + */ + +typedef struct libvlc_renderer_discoverer_t libvlc_renderer_discoverer_t; + +/** + * Renderer discoverer description + * + * \see libvlc_renderer_discoverer_list_get() + */ +typedef struct libvlc_rd_description_t +{ + char *psz_name; + char *psz_longname; +} libvlc_rd_description_t; + +/** The renderer can render audio */ +#define LIBVLC_RENDERER_CAN_AUDIO 0x0001 +/** The renderer can render video */ +#define LIBVLC_RENDERER_CAN_VIDEO 0x0002 + +/** + * Renderer item + * + * This struct is passed by a @ref libvlc_event_t when a new renderer is added + * or deleted. + * + * An item is valid until the @ref libvlc_RendererDiscovererItemDeleted event + * is called with the same pointer. + * + * \see libvlc_renderer_discoverer_event_manager() + */ +typedef struct libvlc_renderer_item_t libvlc_renderer_item_t; + + +/** + * Hold a renderer item, i.e. creates a new reference + * + * This functions need to called from the libvlc_RendererDiscovererItemAdded + * callback if the libvlc user wants to use this item after. (for display or + * for passing it to the mediaplayer for example). + * + * \version LibVLC 3.0.0 or later + * + * \return the current item + */ +LIBVLC_API libvlc_renderer_item_t * +libvlc_renderer_item_hold(libvlc_renderer_item_t *p_item); + +/** + * Releases a renderer item, i.e. decrements its reference counter + * + * \version LibVLC 3.0.0 or later + */ +LIBVLC_API void +libvlc_renderer_item_release(libvlc_renderer_item_t *p_item); + +/** + * Get the human readable name of a renderer item + * + * \version LibVLC 3.0.0 or later + * + * \return the name of the item (can't be NULL, must *not* be freed) + */ +LIBVLC_API const char * +libvlc_renderer_item_name(const libvlc_renderer_item_t *p_item); + +/** + * Get the type (not translated) of a renderer item. For now, the type can only + * be "chromecast" ("upnp", "airplay" may come later). + * + * \version LibVLC 3.0.0 or later + * + * \return the type of the item (can't be NULL, must *not* be freed) + */ +LIBVLC_API const char * +libvlc_renderer_item_type(const libvlc_renderer_item_t *p_item); + +/** + * Get the icon uri of a renderer item + * + * \version LibVLC 3.0.0 or later + * + * \return the uri of the item's icon (can be NULL, must *not* be freed) + */ +LIBVLC_API const char * +libvlc_renderer_item_icon_uri(const libvlc_renderer_item_t *p_item); + +/** + * Get the flags of a renderer item + * + * \see LIBVLC_RENDERER_CAN_AUDIO + * \see LIBVLC_RENDERER_CAN_VIDEO + * + * \version LibVLC 3.0.0 or later + * + * \return bitwise flag: capabilities of the renderer, see + */ +LIBVLC_API int +libvlc_renderer_item_flags(const libvlc_renderer_item_t *p_item); + +/** + * Create a renderer discoverer object by name + * + * After this object is created, you should attach to events in order to be + * notified of the discoverer events. + * + * You need to call libvlc_renderer_discoverer_start() in order to start the + * discovery. + * + * \see libvlc_renderer_discoverer_event_manager() + * \see libvlc_renderer_discoverer_start() + * + * \version LibVLC 3.0.0 or later + * + * \param p_inst libvlc instance + * \param psz_name service name; use libvlc_renderer_discoverer_list_get() to + * get a list of the discoverer names available in this libVLC instance + * \return media discover object or NULL in case of error + */ +LIBVLC_API libvlc_renderer_discoverer_t * +libvlc_renderer_discoverer_new( libvlc_instance_t *p_inst, + const char *psz_name ); + +/** + * Release a renderer discoverer object + * + * \version LibVLC 3.0.0 or later + * + * \param p_rd renderer discoverer object + */ +LIBVLC_API void +libvlc_renderer_discoverer_release( libvlc_renderer_discoverer_t *p_rd ); + +/** + * Start renderer discovery + * + * To stop it, call libvlc_renderer_discoverer_stop() or + * libvlc_renderer_discoverer_release() directly. + * + * \see libvlc_renderer_discoverer_stop() + * + * \version LibVLC 3.0.0 or later + * + * \param p_rd renderer discoverer object + * \return -1 in case of error, 0 otherwise + */ +LIBVLC_API int +libvlc_renderer_discoverer_start( libvlc_renderer_discoverer_t *p_rd ); + +/** + * Stop renderer discovery. + * + * \see libvlc_renderer_discoverer_start() + * + * \version LibVLC 3.0.0 or later + * + * \param p_rd renderer discoverer object + */ +LIBVLC_API void +libvlc_renderer_discoverer_stop( libvlc_renderer_discoverer_t *p_rd ); + +/** + * Get the event manager of the renderer discoverer + * + * The possible events to attach are @ref libvlc_RendererDiscovererItemAdded + * and @ref libvlc_RendererDiscovererItemDeleted. + * + * The @ref libvlc_renderer_item_t struct passed to event callbacks is owned by + * VLC, users should take care of holding/releasing this struct for their + * internal usage. + * + * \see libvlc_event_t.u.renderer_discoverer_item_added.item + * \see libvlc_event_t.u.renderer_discoverer_item_removed.item + * + * \version LibVLC 3.0.0 or later + * + * \return a valid event manager (can't fail) + */ +LIBVLC_API libvlc_event_manager_t * +libvlc_renderer_discoverer_event_manager( libvlc_renderer_discoverer_t *p_rd ); + +/** + * Get media discoverer services + * + * \see libvlc_renderer_list_release() + * + * \version LibVLC 3.0.0 and later + * + * \param p_inst libvlc instance + * \param ppp_services address to store an allocated array of renderer + * discoverer services (must be freed with libvlc_renderer_list_release() by + * the caller) [OUT] + * + * \return the number of media discoverer services (0 on error) + */ +LIBVLC_API size_t +libvlc_renderer_discoverer_list_get( libvlc_instance_t *p_inst, + libvlc_rd_description_t ***ppp_services ); + +/** + * Release an array of media discoverer services + * + * \see libvlc_renderer_discoverer_list_get() + * + * \version LibVLC 3.0.0 and later + * + * \param pp_services array to release + * \param i_count number of elements in the array + */ +LIBVLC_API void +libvlc_renderer_discoverer_list_release( libvlc_rd_description_t **pp_services, + size_t i_count ); + +/** @} */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc_version.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc_version.h new file mode 100644 index 0000000..6590ebe --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc_version.h @@ -0,0 +1,55 @@ +/***************************************************************************** + * libvlc_version.h + ***************************************************************************** + * Copyright (C) 2010 Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * \file + * This file defines version macros for LibVLC. + * Those macros are primilarly intended for conditional (pre)compilation. + * To get the run-time LibVLC version, use libvlc_get_version() instead + * (the run-time version may be more recent than build-time one, thanks to + * backward binary compatibility). + * + * \version This header file is available in LibVLC 1.1.4 and higher. + */ + +#ifndef LIBVLC_VERSION_H +# define LIBVLC_VERSION_H 1 + +/** LibVLC major version number */ +# define LIBVLC_VERSION_MAJOR (3) + +/** LibVLC minor version number */ +# define LIBVLC_VERSION_MINOR (0) + +/** LibVLC revision */ +# define LIBVLC_VERSION_REVISION (21) + +# define LIBVLC_VERSION_EXTRA (0) + +/** Makes a single integer from a LibVLC version numbers */ +# define LIBVLC_VERSION(maj,min,rev,extra) \ + ((maj << 24) | (min << 16) | (rev << 8) | (extra)) + +/** LibVLC full version as a single integer (for comparison) */ +# define LIBVLC_VERSION_INT \ + LIBVLC_VERSION(LIBVLC_VERSION_MAJOR, LIBVLC_VERSION_MINOR, \ + LIBVLC_VERSION_REVISION, LIBVLC_VERSION_EXTRA) + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/libvlc_vlm.h b/support/3rd_party/vlc/sdk/include/vlc/libvlc_vlm.h new file mode 100644 index 0000000..cfa2d95 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/libvlc_vlm.h @@ -0,0 +1,342 @@ +/***************************************************************************** + * libvlc_vlm.h: libvlc_* new external API + ***************************************************************************** + * Copyright (C) 1998-2008 VLC authors and VideoLAN + * $Id$ + * + * Authors: Clément Stenac + * Jean-Paul Saman + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef LIBVLC_VLM_H +#define LIBVLC_VLM_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +/** \defgroup libvlc_vlm LibVLC VLM + * \ingroup libvlc + * @{ + * \file + * LibVLC stream output manager external API + */ + +/** + * Release the vlm instance related to the given libvlc_instance_t + * + * \param p_instance the instance + */ +LIBVLC_API void libvlc_vlm_release( libvlc_instance_t *p_instance ); + +/** + * Add a broadcast, with one input. + * + * \param p_instance the instance + * \param psz_name the name of the new broadcast + * \param psz_input the input MRL + * \param psz_output the output MRL (the parameter to the "sout" variable) + * \param i_options number of additional options + * \param ppsz_options additional options + * \param b_enabled boolean for enabling the new broadcast + * \param b_loop Should this broadcast be played in loop ? + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_add_broadcast( libvlc_instance_t *p_instance, + const char *psz_name, const char *psz_input, + const char *psz_output, int i_options, + const char * const* ppsz_options, + int b_enabled, int b_loop ); + +/** + * Add a vod, with one input. + * + * \param p_instance the instance + * \param psz_name the name of the new vod media + * \param psz_input the input MRL + * \param i_options number of additional options + * \param ppsz_options additional options + * \param b_enabled boolean for enabling the new vod + * \param psz_mux the muxer of the vod media + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_add_vod( libvlc_instance_t * p_instance, + const char *psz_name, const char *psz_input, + int i_options, const char * const* ppsz_options, + int b_enabled, const char *psz_mux ); + +/** + * Delete a media (VOD or broadcast). + * + * \param p_instance the instance + * \param psz_name the media to delete + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_del_media( libvlc_instance_t * p_instance, + const char *psz_name ); + +/** + * Enable or disable a media (VOD or broadcast). + * + * \param p_instance the instance + * \param psz_name the media to work on + * \param b_enabled the new status + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_set_enabled( libvlc_instance_t *p_instance, + const char *psz_name, int b_enabled ); + +/** + * Set the output for a media. + * + * \param p_instance the instance + * \param psz_name the media to work on + * \param psz_output the output MRL (the parameter to the "sout" variable) + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_set_output( libvlc_instance_t *p_instance, + const char *psz_name, + const char *psz_output ); + +/** + * Set a media's input MRL. This will delete all existing inputs and + * add the specified one. + * + * \param p_instance the instance + * \param psz_name the media to work on + * \param psz_input the input MRL + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_set_input( libvlc_instance_t *p_instance, + const char *psz_name, + const char *psz_input ); + +/** + * Add a media's input MRL. This will add the specified one. + * + * \param p_instance the instance + * \param psz_name the media to work on + * \param psz_input the input MRL + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_add_input( libvlc_instance_t *p_instance, + const char *psz_name, + const char *psz_input ); + +/** + * Set a media's loop status. + * + * \param p_instance the instance + * \param psz_name the media to work on + * \param b_loop the new status + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_set_loop( libvlc_instance_t *p_instance, + const char *psz_name, + int b_loop ); + +/** + * Set a media's vod muxer. + * + * \param p_instance the instance + * \param psz_name the media to work on + * \param psz_mux the new muxer + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_set_mux( libvlc_instance_t *p_instance, + const char *psz_name, + const char *psz_mux ); + +/** + * Edit the parameters of a media. This will delete all existing inputs and + * add the specified one. + * + * \param p_instance the instance + * \param psz_name the name of the new broadcast + * \param psz_input the input MRL + * \param psz_output the output MRL (the parameter to the "sout" variable) + * \param i_options number of additional options + * \param ppsz_options additional options + * \param b_enabled boolean for enabling the new broadcast + * \param b_loop Should this broadcast be played in loop ? + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_change_media( libvlc_instance_t *p_instance, + const char *psz_name, const char *psz_input, + const char *psz_output, int i_options, + const char * const *ppsz_options, + int b_enabled, int b_loop ); + +/** + * Play the named broadcast. + * + * \param p_instance the instance + * \param psz_name the name of the broadcast + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_play_media ( libvlc_instance_t *p_instance, + const char *psz_name ); + +/** + * Stop the named broadcast. + * + * \param p_instance the instance + * \param psz_name the name of the broadcast + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_stop_media ( libvlc_instance_t *p_instance, + const char *psz_name ); + +/** + * Pause the named broadcast. + * + * \param p_instance the instance + * \param psz_name the name of the broadcast + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_pause_media( libvlc_instance_t *p_instance, + const char *psz_name ); + +/** + * Seek in the named broadcast. + * + * \param p_instance the instance + * \param psz_name the name of the broadcast + * \param f_percentage the percentage to seek to + * \return 0 on success, -1 on error + */ +LIBVLC_API int libvlc_vlm_seek_media( libvlc_instance_t *p_instance, + const char *psz_name, + float f_percentage ); + +/** + * Return information about the named media as a JSON + * string representation. + * + * This function is mainly intended for debugging use, + * if you want programmatic access to the state of + * a vlm_media_instance_t, please use the corresponding + * libvlc_vlm_get_media_instance_xxx -functions. + * Currently there are no such functions available for + * vlm_media_t though. + * + * \param p_instance the instance + * \param psz_name the name of the media, + * if the name is an empty string, all media is described + * \return string with information about named media, or NULL on error + */ +LIBVLC_API const char* libvlc_vlm_show_media( libvlc_instance_t *p_instance, + const char *psz_name ); + +/** + * Get vlm_media instance position by name or instance id + * + * \param p_instance a libvlc instance + * \param psz_name name of vlm media instance + * \param i_instance instance id + * \return position as float or -1. on error + */ +LIBVLC_API float libvlc_vlm_get_media_instance_position( libvlc_instance_t *p_instance, + const char *psz_name, + int i_instance ); + +/** + * Get vlm_media instance time by name or instance id + * + * \param p_instance a libvlc instance + * \param psz_name name of vlm media instance + * \param i_instance instance id + * \return time as integer or -1 on error + */ +LIBVLC_API int libvlc_vlm_get_media_instance_time( libvlc_instance_t *p_instance, + const char *psz_name, + int i_instance ); + +/** + * Get vlm_media instance length by name or instance id + * + * \param p_instance a libvlc instance + * \param psz_name name of vlm media instance + * \param i_instance instance id + * \return length of media item or -1 on error + */ +LIBVLC_API int libvlc_vlm_get_media_instance_length( libvlc_instance_t *p_instance, + const char *psz_name, + int i_instance ); + +/** + * Get vlm_media instance playback rate by name or instance id + * + * \param p_instance a libvlc instance + * \param psz_name name of vlm media instance + * \param i_instance instance id + * \return playback rate or -1 on error + */ +LIBVLC_API int libvlc_vlm_get_media_instance_rate( libvlc_instance_t *p_instance, + const char *psz_name, + int i_instance ); +#if 0 +/** + * Get vlm_media instance title number by name or instance id + * \bug will always return 0 + * \param p_instance a libvlc instance + * \param psz_name name of vlm media instance + * \param i_instance instance id + * \return title as number or -1 on error + */ +LIBVLC_API int libvlc_vlm_get_media_instance_title( libvlc_instance_t *p_instance, + const char *psz_name, int i_instance ); + +/** + * Get vlm_media instance chapter number by name or instance id + * \bug will always return 0 + * \param p_instance a libvlc instance + * \param psz_name name of vlm media instance + * \param i_instance instance id + * \return chapter as number or -1 on error + */ +LIBVLC_API int libvlc_vlm_get_media_instance_chapter( libvlc_instance_t *p_instance, + const char *psz_name, int i_instance ); + +/** + * Is libvlc instance seekable ? + * \bug will always return 0 + * \param p_instance a libvlc instance + * \param psz_name name of vlm media instance + * \param i_instance instance id + * \return 1 if seekable, 0 if not, -1 if media does not exist + */ +LIBVLC_API int libvlc_vlm_get_media_instance_seekable( libvlc_instance_t *p_instance, + const char *psz_name, int i_instance ); +#endif +/** + * Get libvlc_event_manager from a vlm media. + * The p_event_manager is immutable, so you don't have to hold the lock + * + * \param p_instance a libvlc instance + * \return libvlc_event_manager + */ +LIBVLC_API libvlc_event_manager_t * + libvlc_vlm_get_event_manager( libvlc_instance_t *p_instance ); + +/** @} */ + +# ifdef __cplusplus +} +# endif + +#endif /* */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_about.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_about.h new file mode 100644 index 0000000..a878a41 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_about.h @@ -0,0 +1,1525 @@ +/* Automatically generated file - DO NOT EDIT */ +static const char psz_license[] = +" GNU GENERAL PUBLIC LICENSE\n" +" Version 2, June 1991\n" +"\n" +" Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\n" +" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n" +" Everyone is permitted to copy and distribute verbatim copies\n" +" of this license document, but changing it is not allowed.\n" +"\n" +" Preamble\n" +"\n" +" The licenses for most software are designed to take away your\n" +"freedom to share and change it. By contrast, the GNU General Public\n" +"License is intended to guarantee your freedom to share and change free\n" +"software--to make sure the software is free for all its users. This\n" +"General Public License applies to most of the Free Software\n" +"Foundation's software and to any other program whose authors commit to\n" +"using it. (Some other Free Software Foundation software is covered by\n" +"the GNU Lesser General Public License instead.) You can apply it to\n" +"your programs, too.\n" +"\n" +" When we speak of free software, we are referring to freedom, not\n" +"price. Our General Public Licenses are designed to make sure that you\n" +"have the freedom to distribute copies of free software (and charge for\n" +"this service if you wish), that you receive source code or can get it\n" +"if you want it, that you can change the software or use pieces of it\n" +"in new free programs; and that you know you can do these things.\n" +"\n" +" To protect your rights, we need to make restrictions that forbid\n" +"anyone to deny you these rights or to ask you to surrender the rights.\n" +"These restrictions translate to certain responsibilities for you if you\n" +"distribute copies of the software, or if you modify it.\n" +"\n" +" For example, if you distribute copies of such a program, whether\n" +"gratis or for a fee, you must give the recipients all the rights that\n" +"you have. You must make sure that they, too, receive or can get the\n" +"source code. And you must show them these terms so they know their\n" +"rights.\n" +"\n" +" We protect your rights with two steps: (1) copyright the software, and\n" +"(2) offer you this license which gives you legal permission to copy,\n" +"distribute and/or modify the software.\n" +"\n" +" Also, for each author's protection and ours, we want to make certain\n" +"that everyone understands that there is no warranty for this free\n" +"software. If the software is modified by someone else and passed on, we\n" +"want its recipients to know that what they have is not the original, so\n" +"that any problems introduced by others will not reflect on the original\n" +"authors' reputations.\n" +"\n" +" Finally, any free program is threatened constantly by software\n" +"patents. We wish to avoid the danger that redistributors of a free\n" +"program will individually obtain patent licenses, in effect making the\n" +"program proprietary. To prevent this, we have made it clear that any\n" +"patent must be licensed for everyone's free use or not licensed at all.\n" +"\n" +" The precise terms and conditions for copying, distribution and\n" +"modification follow.\n" +"\n" +" GNU GENERAL PUBLIC LICENSE\n" +" TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n" +"\n" +" 0. This License applies to any program or other work which contains\n" +"a notice placed by the copyright holder saying it may be distributed\n" +"under the terms of this General Public License. The \"Program\", below,\n" +"refers to any such program or work, and a \"work based on the Program\"\n" +"means either the Program or any derivative work under copyright law:\n" +"that is to say, a work containing the Program or a portion of it,\n" +"either verbatim or with modifications and/or translated into another\n" +"language. (Hereinafter, translation is included without limitation in\n" +"the term \"modification\".) Each licensee is addressed as \"you\".\n" +"\n" +"Activities other than copying, distribution and modification are not\n" +"covered by this License; they are outside its scope. The act of\n" +"running the Program is not restricted, and the output from the Program\n" +"is covered only if its contents constitute a work based on the\n" +"Program (independent of having been made by running the Program).\n" +"Whether that is true depends on what the Program does.\n" +"\n" +" 1. You may copy and distribute verbatim copies of the Program's\n" +"source code as you receive it, in any medium, provided that you\n" +"conspicuously and appropriately publish on each copy an appropriate\n" +"copyright notice and disclaimer of warranty; keep intact all the\n" +"notices that refer to this License and to the absence of any warranty;\n" +"and give any other recipients of the Program a copy of this License\n" +"along with the Program.\n" +"\n" +"You may charge a fee for the physical act of transferring a copy, and\n" +"you may at your option offer warranty protection in exchange for a fee.\n" +"\n" +" 2. You may modify your copy or copies of the Program or any portion\n" +"of it, thus forming a work based on the Program, and copy and\n" +"distribute such modifications or work under the terms of Section 1\n" +"above, provided that you also meet all of these conditions:\n" +"\n" +" a) You must cause the modified files to carry prominent notices\n" +" stating that you changed the files and the date of any change.\n" +"\n" +" b) You must cause any work that you distribute or publish, that in\n" +" whole or in part contains or is derived from the Program or any\n" +" part thereof, to be licensed as a whole at no charge to all third\n" +" parties under the terms of this License.\n" +"\n" +" c) If the modified program normally reads commands interactively\n" +" when run, you must cause it, when started running for such\n" +" interactive use in the most ordinary way, to print or display an\n" +" announcement including an appropriate copyright notice and a\n" +" notice that there is no warranty (or else, saying that you provide\n" +" a warranty) and that users may redistribute the program under\n" +" these conditions, and telling the user how to view a copy of this\n" +" License. (Exception: if the Program itself is interactive but\n" +" does not normally print such an announcement, your work based on\n" +" the Program is not required to print an announcement.)\n" +"\n" +"These requirements apply to the modified work as a whole. If\n" +"identifiable sections of that work are not derived from the Program,\n" +"and can be reasonably considered independent and separate works in\n" +"themselves, then this License, and its terms, do not apply to those\n" +"sections when you distribute them as separate works. But when you\n" +"distribute the same sections as part of a whole which is a work based\n" +"on the Program, the distribution of the whole must be on the terms of\n" +"this License, whose permissions for other licensees extend to the\n" +"entire whole, and thus to each and every part regardless of who wrote it.\n" +"\n" +"Thus, it is not the intent of this section to claim rights or contest\n" +"your rights to work written entirely by you; rather, the intent is to\n" +"exercise the right to control the distribution of derivative or\n" +"collective works based on the Program.\n" +"\n" +"In addition, mere aggregation of another work not based on the Program\n" +"with the Program (or with a work based on the Program) on a volume of\n" +"a storage or distribution medium does not bring the other work under\n" +"the scope of this License.\n" +"\n" +" 3. You may copy and distribute the Program (or a work based on it,\n" +"under Section 2) in object code or executable form under the terms of\n" +"Sections 1 and 2 above provided that you also do one of the following:\n" +"\n" +" a) Accompany it with the complete corresponding machine-readable\n" +" source code, which must be distributed under the terms of Sections\n" +" 1 and 2 above on a medium customarily used for software interchange; or,\n" +"\n" +" b) Accompany it with a written offer, valid for at least three\n" +" years, to give any third party, for a charge no more than your\n" +" cost of physically performing source distribution, a complete\n" +" machine-readable copy of the corresponding source code, to be\n" +" distributed under the terms of Sections 1 and 2 above on a medium\n" +" customarily used for software interchange; or,\n" +"\n" +" c) Accompany it with the information you received as to the offer\n" +" to distribute corresponding source code. (This alternative is\n" +" allowed only for noncommercial distribution and only if you\n" +" received the program in object code or executable form with such\n" +" an offer, in accord with Subsection b above.)\n" +"\n" +"The source code for a work means the preferred form of the work for\n" +"making modifications to it. For an executable work, complete source\n" +"code means all the source code for all modules it contains, plus any\n" +"associated interface definition files, plus the scripts used to\n" +"control compilation and installation of the executable. However, as a\n" +"special exception, the source code distributed need not include\n" +"anything that is normally distributed (in either source or binary\n" +"form) with the major components (compiler, kernel, and so on) of the\n" +"operating system on which the executable runs, unless that component\n" +"itself accompanies the executable.\n" +"\n" +"If distribution of executable or object code is made by offering\n" +"access to copy from a designated place, then offering equivalent\n" +"access to copy the source code from the same place counts as\n" +"distribution of the source code, even though third parties are not\n" +"compelled to copy the source along with the object code.\n" +"\n" +" 4. You may not copy, modify, sublicense, or distribute the Program\n" +"except as expressly provided under this License. Any attempt\n" +"otherwise to copy, modify, sublicense or distribute the Program is\n" +"void, and will automatically terminate your rights under this License.\n" +"However, parties who have received copies, or rights, from you under\n" +"this License will not have their licenses terminated so long as such\n" +"parties remain in full compliance.\n" +"\n" +" 5. You are not required to accept this License, since you have not\n" +"signed it. However, nothing else grants you permission to modify or\n" +"distribute the Program or its derivative works. These actions are\n" +"prohibited by law if you do not accept this License. Therefore, by\n" +"modifying or distributing the Program (or any work based on the\n" +"Program), you indicate your acceptance of this License to do so, and\n" +"all its terms and conditions for copying, distributing or modifying\n" +"the Program or works based on it.\n" +"\n" +" 6. Each time you redistribute the Program (or any work based on the\n" +"Program), the recipient automatically receives a license from the\n" +"original licensor to copy, distribute or modify the Program subject to\n" +"these terms and conditions. You may not impose any further\n" +"restrictions on the recipients' exercise of the rights granted herein.\n" +"You are not responsible for enforcing compliance by third parties to\n" +"this License.\n" +"\n" +" 7. If, as a consequence of a court judgment or allegation of patent\n" +"infringement or for any other reason (not limited to patent issues),\n" +"conditions are imposed on you (whether by court order, agreement or\n" +"otherwise) that contradict the conditions of this License, they do not\n" +"excuse you from the conditions of this License. If you cannot\n" +"distribute so as to satisfy simultaneously your obligations under this\n" +"License and any other pertinent obligations, then as a consequence you\n" +"may not distribute the Program at all. For example, if a patent\n" +"license would not permit royalty-free redistribution of the Program by\n" +"all those who receive copies directly or indirectly through you, then\n" +"the only way you could satisfy both it and this License would be to\n" +"refrain entirely from distribution of the Program.\n" +"\n" +"If any portion of this section is held invalid or unenforceable under\n" +"any particular circumstance, the balance of the section is intended to\n" +"apply and the section as a whole is intended to apply in other\n" +"circumstances.\n" +"\n" +"It is not the purpose of this section to induce you to infringe any\n" +"patents or other property right claims or to contest validity of any\n" +"such claims; this section has the sole purpose of protecting the\n" +"integrity of the free software distribution system, which is\n" +"implemented by public license practices. Many people have made\n" +"generous contributions to the wide range of software distributed\n" +"through that system in reliance on consistent application of that\n" +"system; it is up to the author/donor to decide if he or she is willing\n" +"to distribute software through any other system and a licensee cannot\n" +"impose that choice.\n" +"\n" +"This section is intended to make thoroughly clear what is believed to\n" +"be a consequence of the rest of this License.\n" +"\n" +" 8. If the distribution and/or use of the Program is restricted in\n" +"certain countries either by patents or by copyrighted interfaces, the\n" +"original copyright holder who places the Program under this License\n" +"may add an explicit geographical distribution limitation excluding\n" +"those countries, so that distribution is permitted only in or among\n" +"countries not thus excluded. In such case, this License incorporates\n" +"the limitation as if written in the body of this License.\n" +"\n" +" 9. The Free Software Foundation may publish revised and/or new versions\n" +"of the General Public License from time to time. Such new versions will\n" +"be similar in spirit to the present version, but may differ in detail to\n" +"address new problems or concerns.\n" +"\n" +"Each version is given a distinguishing version number. If the Program\n" +"specifies a version number of this License which applies to it and \"any\n" +"later version\", you have the option of following the terms and conditions\n" +"either of that version or of any later version published by the Free\n" +"Software Foundation. If the Program does not specify a version number of\n" +"this License, you may choose any version ever published by the Free Software\n" +"Foundation.\n" +"\n" +" 10. If you wish to incorporate parts of the Program into other free\n" +"programs whose distribution conditions are different, write to the author\n" +"to ask for permission. For software which is copyrighted by the Free\n" +"Software Foundation, write to the Free Software Foundation; we sometimes\n" +"make exceptions for this. Our decision will be guided by the two goals\n" +"of preserving the free status of all derivatives of our free software and\n" +"of promoting the sharing and reuse of software generally.\n" +"\n" +" NO WARRANTY\n" +"\n" +" 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n" +"FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n" +"OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n" +"PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n" +"OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n" +"MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n" +"TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n" +"PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n" +"REPAIR OR CORRECTION.\n" +"\n" +" 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n" +"WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n" +"REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n" +"INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n" +"OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n" +"TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n" +"YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n" +"PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n" +"POSSIBILITY OF SUCH DAMAGES.\n" +"\n" +" END OF TERMS AND CONDITIONS\n" +"\n" +" How to Apply These Terms to Your New Programs\n" +"\n" +" If you develop a new program, and you want it to be of the greatest\n" +"possible use to the public, the best way to achieve this is to make it\n" +"free software which everyone can redistribute and change under these terms.\n" +"\n" +" To do so, attach the following notices to the program. It is safest\n" +"to attach them to the start of each source file to most effectively\n" +"convey the exclusion of warranty; and each file should have at least\n" +"the \"copyright\" line and a pointer to where the full notice is found.\n" +"\n" +" \n" +" Copyright (C) \n" +"\n" +" This program is free software; you can redistribute it and/or modify\n" +" it under the terms of the GNU General Public License as published by\n" +" the Free Software Foundation; either version 2 of the License, or\n" +" (at your option) any later version.\n" +"\n" +" This program is distributed in the hope that it will be useful,\n" +" but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" +" GNU General Public License for more details.\n" +"\n" +" You should have received a copy of the GNU General Public License along\n" +" with this program; if not, write to the Free Software Foundation, Inc.,\n" +" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n" +"\n" +"Also add information on how to contact you by electronic and paper mail.\n" +"\n" +"If the program is interactive, make it output a short notice like this\n" +"when it starts in an interactive mode:\n" +"\n" +" Gnomovision version 69, Copyright (C) year name of author\n" +" Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n" +" This is free software, and you are welcome to redistribute it\n" +" under certain conditions; type `show c' for details.\n" +"\n" +"The hypothetical commands `show w' and `show c' should show the appropriate\n" +"parts of the General Public License. Of course, the commands you use may\n" +"be called something other than `show w' and `show c'; they could even be\n" +"mouse-clicks or menu items--whatever suits your program.\n" +"\n" +"You should also get your employer (if you work as a programmer) or your\n" +"school, if any, to sign a \"copyright disclaimer\" for the program, if\n" +"necessary. Here is a sample; alter the names:\n" +"\n" +" Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n" +" `Gnomovision' (which makes passes at compilers) written by James Hacker.\n" +"\n" +" , 1 April 1989\n" +" Ty Coon, President of Vice\n" +"\n" +"This General Public License does not permit incorporating your program into\n" +"proprietary programs. If your program is a subroutine library, you may\n" +"consider it more useful to permit linking proprietary applications with the\n" +"library. If this is what you want to do, use the GNU Lesser General\n" +"Public License instead of this License.\n" +; +static const char psz_thanks[] = +"Some VLC plugins use external libraries and make extensive use of the\n" +"following persons' or companies' code:\n" +"\n" +"FAAD2 - Copyright (c) Nero AG, www.nero.com\" - GPLv2 or later\n" +"FFmpeg - Copyright (c) 2000-2017 the FFmpeg developers - LGPLv2.1 or later\n" +"FluidLite - Copyright (c) 2016 Robin Lobel - LGPLv2.1 or later\n" +"FluidSynth - Copyright (c) 2003-2010 Peter Hanappe, Conrad Berhörster, Antoine\n" +" Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson - LGPLv2.1 or\n" +" later\n" +"Fontconfig - Copyright (c) 2000,2001,2002,2003,2004,2006,2007 Keith Packard,\n" +" (c) 2005 Patrick Lam, (c) 2009 Roozbeh Pournader, (c) 2008,2009 Red Hat,\n" +" Inc., (c) 2008 Danilo Šegan, (c) 2012 Google, Inc. - MIT License\n" +"freetype - David Turner, Robert Wilhelm, and Werner Lemberg - FreeType License\n" +"GSM - Copyright (c) 1992 - 1994, 2009 Jutta Degener & Carsten Bormann - GSM\n" +" permissive license\n" +"GNU FriBidi - Copyright (c) 2004-2012 Behdad Esfahbod, Dov Grobgeld, Roozbeh\n" +" Pournader - LGPLv2.1 or later\n" +"GnuTLS - Copyright (C) 2000-2012 Free Software Foundation, Inc. - LGPLv2.1 or\n" +" later\n" +"harfbuzz - Copyright (c) 2010, 2011, 2012 Google, Inc., (c) 2012 Mozilla\n" +" Foundation, (c) 2011 Codethink Limited, (c) 2008, 2010 Nokia Corporation\n" +" and/or its subsidiary(-ies), (c) 2009 Keith Stribley, (c) 2009 Martin Hosken\n" +" and SIL International, (c) 2007 Chris Wilson, (c) 2006 Behdad Esfahbod,\n" +" (c) 2005 David Turner, (c) 2004, 2007, 2008, 2009, 2010 Red Hat, Inc.,\n" +" (c) 1998-2004 David Turner and Werner Lemberg - Old MIT License\n" +"liba52 - Aaron Holtzman & Michel Lespinasse, et al. - GPLv2 or later\n" +"libav - Copyright (c) 2000 - 2015 the libav developers - LGPLv2.1 or later\n" +"libass - Copyright (c) 2006-2015 Grigori Goronzy et al. - ISC License\n" +"libbluray - Copyright (c) 2009-2015 VideoLAN and authors - LGPLv2.1 or later\n" +"libcaca - Copyright (c) 2004 Sam Hocevar - WTFPL / LGPLv2.1 or later /\n" +" GPLv2 or later / ISC\n" +"libdca - Copyright (c) 2004-2007 VideoLAN and authors - GPLv2 or later\n" +"libdvbpsi - Copyright (c) 2001-2017 VideoLAN and authors - LGPLv2.1 or later\n" +"libdvdcss - Copyright (c) 2001-2017 VideoLAN and authors - GPLv2 or later\n" +"libdvdread - GPLv2 or later\n" +"libdvdnav - GPLv2 or later\n" +"libebml - Copyright (c) 2002-2015 Steve Lhomme - LGPLv2.1 or later\n" +"libFLAC - Copyright (c) 2001 - 2014 Josh Coalson et al. - Xiph.org BSD license\n" +"libgme - LGPLv2.1 or later\n" +"libgpg-error - Copyright 2003, 2004, 2005, 2006, 2007, 2013 g10 Code GmbH\n" +" - LGPLv2.1 or later\n" +"libkate - Copyright (c) 2008-2011 Vincent Penquerc'h - 3-clause BSD License\n" +"liblive555 - Copyright (c) 1996-2015 Live Networks, Inc. - LGPLv2.1 or later\n" +"libmad - Copyright (c) 2000-2004 Robert Leslie, et al. - GPLv2 or later\n" +"libmatroska - Copyright (c) 2002-2015 Steve Lhomme - LGPLv2.1 or later\n" +"libmpeg2 - Aaron Holtzman & Michel Lespinasse, et al. - GPLv2 or later\n" +"libmodplug - Oliver Lapicque, Konstanty - Public domain\n" +"libogg, libvorbis - Copyright (c) 2002-2015 Xiph.org Foundation - Xiph.org BSD\n" +" license\n" +"libpostproc - Copyright (C) 2001-2015 Michael Niedermayer, et al. - GPLv2 or\n" +" later\n" +"libpng - Copyright (c) 2004, 2006-2014 Glenn Randers-Perhson, et al. - libpng\n" +" license\n" +"libsamplerate - Copyright (c) 2002-2011 Erik de Castro Lopo - GPLv2 or later\n" +"libschroedinger - Copyright (c) 2006 BBC and Fluendo - MIT License\n" +"libsdl - Copyright (c) 1997-2014 Sam Lantinga et al. - LGPLv2.1 or later\n" +"libshout - Copyright (c) 2012 - LGPLv2.1 or later\n" +"libtheora - Copyright (c) Xiph.org Foundation - Xiph.org BSD license\n" +"libtiff - Copyright (c) 1988-1997 Sam Leffler, (c) 1991-1997 Silicon Graphics,\n" +" Inc. - BSD-like\n" +"libtwolame - Copyright (c) 2001-2004 Michael Cheng, (c) 2004-2006 The TwoLAME\n" +" Project - LGPLv2.1 or later\n" +"libupnp - Copyright (c) 2000-2003 Intel Corporation - 3-clause BSD License\n" +"libvpx - Copyright (c) 2010-2015, Google Inc. - 3-clause BSD License\n" +"libxml2 - Copyright (c) 1998-2014 Daniel Veillard - MIT License\n" +"lua - Copyright (c) 1994-2008 Lua.org, PUC-Rio. - MIT License\n" +"Musepack decoder library - Copyright (c) 2005-2011, The Musepack Development\n" +" Team - 3-clause BSD License\n" +"OpenJPEG - Copyright (c) 2002-2014, Communcations and Remote Sensing\n" +" Laboratory, UCL, Belgium - ISC License\n" +"Opus - Copyright 2001-2013 Xiph.Org, Skype Limited, Octasic, Jean-Marc Valin,\n" +" Timothy B. Terriberry, CSIRO, Gregory Maxwell, Mark Borgerding,\n" +" Erik de Castro Lopo - Xiph.org BSD License\n" +"Sparkle — Andy Matuschak et al. - MIT License\n" +"Speex, Speexdsp - Copyright (c) 1992-2015 Xiph.org Foundation, Jean-Marc Valin,\n" +" Analog Devices Inc. Commonwealth Scientific and Industrial Research\n" +" Organisation, David Row, Jutta Degener, Carsten Bormann - 3-clause BSD\n" +" License\n" +"taglib - Copyright (c) 2004-2016 Scott Wheeler, et al. - LGPLv2.1 or later\n" +"x264 - Copyright (c) 2004-2017 VideoLAN and authors - GPLv2 or later\n" +"x265 - Copyright (c) 2004-2015 x265 project - GPLv2 or later\n" +"Zapping VBI library - Copyright (c) 2000-2003 Michael H. Schimek, Iñaki García\n" +" Etxebarria - LGPLv2.1 or later\n" +"zlib - Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler - zlib license\n" +"\n" +"The VideoLAN team would like to thank the following donators:\n" +"\n" +"Julian Cain, who made a $1000 donation\n" +"The French website MacBidouille gave €500 to help us buy a PowerMac G5\n" +"The French magazine à vos MAC gave €500 to help us buy a PowerMac G5\n" +"Laurent Dupuy, who made a €540 donation\n" +"The French company Cybervia (Actech) gave €2000 to pay for webserver hosting\n" +"Dennis Perov - Hardware donation\n" +"\n" +"...the following active members of our user community:\n" +"\n" +"Alan Wright\n" +"David J LaBarre \"DJ\"\n" +"Eric Adler\n" +"Julien Bouquillon\n" +"\n" +"...and code auditors and testers:\n" +"\n" +"David Thiel\n" +"Philippe A. aka \"Lotesdelère\"\n" +"Sebastien Chaumat\n" +; +static const char psz_authors[] = +"VideoLAN and the VLC team would like to acknowledge the following contributors:\n" +"\n" +"Programming\n" +"-----------\n" +"Rémi Denis-Courmont\n" +"Jean-Baptiste Kempf\n" +"Laurent Aimar\n" +"François Cartegnie\n" +"Gildas Bazin\n" +"Felix Paul Kühne\n" +"Rafaël Carré\n" +"Pierre d'Herbemont\n" +"Thomas Guillem\n" +"Rémi Duraffort\n" +"Derk-Jan Hartman\n" +"Antoine Cellerier\n" +"Samuel Hocevar\n" +"Jean-Paul Saman\n" +"Steve Lhomme\n" +"Christophe Mutricy\n" +"Clément Stenac\n" +"Christophe Massiot\n" +"Ilkka Ollakka\n" +"Pierre Ynard\n" +"Filip Roséen\n" +"Damien Fouilleul\n" +"Sigmund Augdal Helberg\n" +"Erwan Tulou\n" +"David Fuhrmann\n" +"Marvin Scholz\n" +"Olivier Teulière\n" +"Cyril Deguet\n" +"Eric Petit\n" +"Filippo Carone\n" +"Rocky Bernstein\n" +"Hugo Beauzée-Luyssen\n" +"Olivier Aubert\n" +"Pavlov Konstantin\n" +"Jakob Leben\n" +"Benjamin Pracht\n" +"Jean-Philippe André\n" +"Stéphane Borel\n" +"JP Dinger\n" +"Geoffroy Couprie\n" +"Martin Storsjö\n" +"Marian Ďurkovič\n" +"Ludovic Fauvet\n" +"Petri Hintukainen\n" +"Yoann Peronneau\n" +"Denis Charmet\n" +"Sébastien Escudier\n" +"Jon Lech Johansen\n" +"KO Myung-Hun\n" +"Edward Wang\n" +"Dennis van Amerongen\n" +"Faustino Osuna\n" +"Mirsal Ennaime\n" +"Sean McGovern\n" +"Jérôme Decoodt\n" +"Loïc Minier\n" +"David Flynn\n" +"Frédéric Yhuel\n" +"Kaarlo Raiha\n" +"Mark Moriarty\n" +"Christopher Mueller\n" +"Fabio Ritrovato\n" +"Tony Castley\n" +"Srikanth Raju\n" +"Michel Kaempf\n" +"Jean-Marc Dressler\n" +"Johan Bilien\n" +"Vincent Seguin\n" +"Simon Latapie\n" +"Bernie Purcell\n" +"Henri Fallon\n" +"Sebastien Zwickert\n" +"Christoph Miebach\n" +"Adrien Maglo\n" +"Emmanuel Puig\n" +"Renaud Dartus\n" +"Alexis de Lattre\n" +"Vincent Penquerc'h\n" +"Arnaud de Bossoreille de Ribou\n" +"Mohammed Adnène Trojette\n" +"Salah-Eddin Shaban\n" +"Vittorio Giovara\n" +"Boris Dorès\n" +"Jai Menon\n" +"Anil Daoud\n" +"Daniel Mierswa\n" +"Naohiro Koriyama\n" +"Rob Jonson\n" +"Pierre Baillet\n" +"Dominique Leuenberger\n" +"Andre Pang\n" +"Zoran Turalija\n" +"Akash Mehrotra\n" +"André Weber\n" +"Anthony Loiseau\n" +"Lukas Durfina\n" +"Xavier Marchesini\n" +"Cyril Mathé\n" +"Devin Heitmueller\n" +"Juho Vähä-Herttua\n" +"Ken Self\n" +"Alexis Ballier\n" +"Juha Jeronen\n" +"Nicolas Chauvet\n" +"Richard Hosking\n" +"Éric Lassauge\n" +"Marc Ariberti\n" +"Sébastien Toque\n" +"Tobias Güntner\n" +"Benoit Steiner\n" +"Michel Lespinasse\n" +"Carlo Calabrò\n" +"Cheng Sun\n" +"Michał Trzebiatowski\n" +"Brad Smith\n" +"Brendon Justin\n" +"Alexey Sokolov\n" +"Basos G\n" +"Philippe Morin\n" +"Steinar H. Gunderson\n" +"Vicente Jimenez Aguilar\n" +"Yuval Tze\n" +"Yves Duret\n" +"Benjamin Drung\n" +"Michael Hanselmann\n" +"Alex Merry\n" +"Damien Lucas\n" +"Grigori Goronzy\n" +"Richard Shepherd\n" +"Gaël Hendryckx\n" +"Michael Feurstein\n" +"Stephan Assmus\n" +"Adrien Grand\n" +"Colin Guthrie\n" +"David Menestrina\n" +"Dominique Martinet\n" +"Gleb Pinigin\n" +"Jason Luka\n" +"Luc Saillard\n" +"Luca Barbato\n" +"Mario Speiß\n" +"Pankaj Yadav\n" +"Ramiro Polla\n" +"Ronald Wright\n" +"Rui Zhang\n" +"Can Wu\n" +"Christophe Courtaut\n" +"FUJISAWA Tooru\n" +"Hannes Domani\n" +"Manol Manolov\n" +"Timothy B. Terriberry\n" +"Antoine Lejeune\n" +"Arnaud Schauly\n" +"Branko Kokanovic\n" +"Dylan Yudaken\n" +"Florian G. Pflug\n" +"François Revol\n" +"G Finch\n" +"Keary Griffin\n" +"Konstanty Bialkowski\n" +"Ming Hu\n" +"Philippe Coent\n" +"Przemyslaw Fiala\n" +"Tanguy Krotoff\n" +"Vianney BOYER\n" +"Casian Andrei\n" +"Chris Smowton\n" +"David Kaplan\n" +"Eugenio Jarosiewicz\n" +"Fabian Keil\n" +"Guillaume Poussel\n" +"John Peterson\n" +"Justus Piater\n" +"Mark Lee\n" +"Martin T. H. Sandsmark\n" +"Rune Botten\n" +"Søren Bøg\n" +"Toralf Niebuhr\n" +"Tristan Matthews\n" +"Angelo Haller\n" +"Aurélien Nephtali\n" +"Austin Burrow\n" +"Bill C. Riemers\n" +"Colin Delacroix\n" +"Cristian Maglie\n" +"Elminster2031\n" +"Jakub Wieczorek\n" +"John Freed\n" +"Mark Hassman\n" +"Martin Briza\n" +"Mike Houben\n" +"Romain Goyet\n" +"Adrian Yanes\n" +"Alexander Lakhin\n" +"Anatoliy Anischovich\n" +"Barry Wardell\n" +"Ben Hutchings\n" +"Besnard Jean-Baptiste\n" +"Brian Weaver\n" +"Clement Chesnin\n" +"David Geldreich\n" +"Diego Elio Pettenò\n" +"Diego Fernando Nieto\n" +"Georgi Chorbadzhiyski\n" +"Jon Stacey\n" +"Jonathan Rosser\n" +"Joris van Rooij\n" +"Kaloyan Kovachev\n" +"Katsushi Kobayashi\n" +"Kelly Anderson\n" +"Loren Merritt\n" +"Maciej Blizinski\n" +"Mark Bidewell\n" +"Miguel Angel Cabrera Moya\n" +"Niles Bindel\n" +"Samuel Pitoiset\n" +"Scott Caudle\n" +"Sean Robinson\n" +"Sergey Radionov\n" +"Simon Hailes\n" +"Stephen Parry\n" +"Sukrit Sangwan\n" +"Thierry Reding\n" +"Xavier Martin\n" +"Alex Converse\n" +"Alexander Bethke\n" +"Alexandre Ratchov\n" +"Andres Krapf\n" +"Andrey Utkin\n" +"Andri Pálsson\n" +"Andy Chenee\n" +"Anuradha Suraparaju\n" +"Benjamin Poulain\n" +"Brieuc Jeunhomme\n" +"Chris Clayton\n" +"Clément Lecigne\n" +"Cédric Cocquebert\n" +"Daniel Peng\n" +"Danny Wood\n" +"David K\n" +"Edouard Gomez\n" +"Emmanuel de Roux\n" +"Frode Tennebø\n" +"GBX\n" +"Gaurav Narula\n" +"Geraud CONTINSOUZAS\n" +"Hugues Fruchet\n" +"Jan Winter\n" +"Jean-François Massol\n" +"Jean-Philippe Grimaldi\n" +"Josh Watzman\n" +"Kai Lauterbach\n" +"Konstantin Bogdanov\n" +"Kuan-Chung Chiu\n" +"Kuang Rufan\n" +"Matthias Dahl\n" +"Michael McEll\n" +"Michael Ploujnikov\n" +"Mike Schrag\n" +"Nickolai Zeldovich\n" +"Nicolas Bertrand\n" +"Niklas Hayer\n" +"Olafs Vandāns\n" +"Olivier Gambier\n" +"Paul Corke\n" +"Ron Frederick\n" +"Rov Juvano\n" +"Sabourin Gilles\n" +"Sam Lade\n" +"Sandeep Kumar\n" +"Sasha Koruga\n" +"Sreng Jean\n" +"Sven Petai\n" +"Tomas Krotil\n" +"Tomer Barletz\n" +"Tristan Leteurtre\n" +"Wang Bo\n" +"maxime Ripard\n" +"xxcv\n" +"Adam Hoka\n" +"Adrian Knoth\n" +"Adrien Cunin\n" +"Alan Fischer\n" +"Alan McCosh\n" +"Alex Helfet\n" +"Alexander Terentyev\n" +"Alexandre Ferreira\n" +"Alina Friedrichsen\n" +"An L. Ber\n" +"Andreas Schlick\n" +"Andrew Schubert\n" +"Andrey Makhnutin\n" +"Arnaud Vallat\n" +"Asad Mehmood\n" +"Ashok Bhat\n" +"Austin English\n" +"Baptiste Coudurier\n" +"Benoit Calvez\n" +"Björn Stenberg\n" +"Blake Livingston\n" +"Brandon Brooks\n" +"Brian Johnson\n" +"Brian Kurle\n" +"Cezar Elnazli\n" +"Chris White\n" +"Christian Masus\n" +"Christoph Pfister\n" +"Christoph Seibert\n" +"Christopher Key\n" +"Christopher Rath\n" +"Claudio Ortelli\n" +"Cody Russell\n" +"Cristian Morales Vega\n" +"Dan Rosenberg\n" +"Daniel Marth\n" +"Daniel Tisza\n" +"Detlef Schroeder\n" +"Diego Biurrun\n" +"Dominik 'Rathann' Mierzejewski\n" +"Duncan Salerno\n" +"Edward Sheldrake\n" +"Elliot Murphy\n" +"Eren Inan Canpolat\n" +"Ernest E. Teem III\n" +"Etienne Membrives\n" +"Fargier Sylvain\n" +"Fathi Boudra\n" +"Felix Geyer\n" +"Filipe Azevedo\n" +"Finn Hughes\n" +"Florian Hubold\n" +"Florian Roeske\n" +"Frank Enderle\n" +"Frédéric Crozat\n" +"Georg Seifert\n" +"Gertjan Van Droogenbroeck\n" +"Gilles Chanteperdrix\n" +"Greg Farrell\n" +"Gregory Maxwell\n" +"Gwenole Beauchesne\n" +"Götz Waschk\n" +"Hans-Kristian Arntzen\n" +"Harry Sintonen\n" +"Iain Wade\n" +"Ibraheem Paredath\n" +"Isamu Arimoto\n" +"Ismael Luceno\n" +"James Bates\n" +"James Bond\n" +"James Turner\n" +"Janne Grunau\n" +"Janne Kujanpää\n" +"Jarmo Torvinen\n" +"Jason Scheunemann\n" +"Jeff Lu\n" +"Jeroen Ost\n" +"Joe Taber\n" +"Johann Ransay\n" +"Johannes Weißl\n" +"John Hendrikx\n" +"John Stebbins\n" +"Jonas Gehring\n" +"Joseph S. Atkinson\n" +"Juergen Lock\n" +"Julien 'Lta' BALLET\n" +"Julien / Gellule\n" +"Julien Humbert\n" +"Kamil Baldyga\n" +"Kamil Klimek\n" +"Karlheinz Wohlmuth\n" +"Kevin Anthony\n" +"Kevin DuBois\n" +"Lari Natri\n" +"Lorenzo Pistone\n" +"Lucas C. Villa Real\n" +"Lukáš Lalinský\n" +"Mal Graty\n" +"Malte Tancred\n" +"Martin Pöhlmann\n" +"Martin Zeman\n" +"Marton Balint\n" +"Mathew King\n" +"Mathieu Sonet\n" +"Matthew A. Townsend\n" +"Matthias Bauer\n" +"Mika Tiainen\n" +"Mike Cardillo\n" +"Mounir Lamouri (volkmar)\n" +"Natanael Copa\n" +"Nathan Phillip Brink\n" +"Nick Briggs\n" +"Nick Pope\n" +"Nil Geiswiller\n" +"Pascal Thomet\n" +"Pere Orga\n" +"Peter Bak Nielsen\n" +"Phil Roffe and David Grellscheid\n" +"Philip Sequeira\n" +"Pierre Souchay\n" +"Piotr Fusik\n" +"Pádraig Brady\n" +"R.M\n" +"Ralph Giles\n" +"Ramon Gabarró\n" +"Robert Forsman\n" +"Robert Jedrzejczyk\n" +"Robert Paciorek\n" +"Rolf Ahrenberg\n" +"Roman Pen\n" +"Ruud Althuizen\n" +"Samuli Suominen\n" +"Scott Lyons\n" +"Sebastian Birk\n" +"Sergey Puzanov\n" +"Sergio Ammirata\n" +"Sharad Dixit\n" +"Song Ye Wen\n" +"Stephan Krempel\n" +"Steven Kramer\n" +"Steven Sheehy\n" +"Sveinung Kvilhaugsvik\n" +"Sylvain Cadhillac\n" +"Sylver Bruneau\n" +"Takahito HIRANO\n" +"Theron Lewis\n" +"Thijs Alkemade\n" +"Tillmann Karras\n" +"Timo Paulssen\n" +"Timo Rothenpieler\n" +"Tobias Rapp\n" +"Tomasen\n" +"Tony Vankrunkelsven\n" +"Tristan Heaven\n" +"Varphone Wong\n" +"Vasily Fomin\n" +"Vikram Narayanan\n" +"Yannick Bréhon\n" +"Yavor Doganov\n" +"Yohann Martineau\n" +"dharani.prabhu.s\n" +"suheaven\n" +"wucan\n" +"김정은\n" +"Adam Sampson\n" +"Alexander Gall\n" +"Alex Antropoff\n" +"Alexis Guillard\n" +"Alex Izvorski\n" +"Amir Gouini\n" +"Andrea Guzzo\n" +"Andrew Flintham\n" +"Andrew Zaikin\n" +"Andy Lindsay\n" +"Arai/Fujisawa Tooru\n" +"Arkadiusz Miskiewicz\n" +"Arnaud Gomes-do-Vale\n" +"Arwed v. Merkatz\n" +"Barak Ori\n" +"Basil Achermann\n" +"Benjamin Mironer\n" +"Bill\n" +"Bob Maguire\n" +"Brian C. Wiles\n" +"Brian Raymond\n" +"Brian Robb\n" +"Carsten Gottbehüt\n" +"Carsten Haitzler\n" +"Charles Hordis\n" +"Chris Clepper\n" +"Christian Henz\n" +"Christof Baumgaertner\n" +"Christophe Burgalat\n" +"Christopher Johnson\n" +"Cian Duffy\n" +"Colin Simmonds\n" +"Damian Ivereigh\n" +"Daniel Fischer\n" +"Daniel Stränger\n" +"Danko Dolch\n" +"Dennis Lou\n" +"Dermot McGahon\n" +"Douglas West\n" +"Dugal Harris\n" +"Emmanuel Blindauer\n" +"Enrico Gueli\n" +"Enrique Osuna\n" +"Eren Türkay\n" +"Eric Dudiak\n" +"Espen Skoglund\n" +"Ethan C. Baldridge\n" +"François Seingier\n" +"Frans van Veen\n" +"Frédéric Ruget\n" +"Gerald Hansink\n" +"Gisle Vanem\n" +"Glen Gray\n" +"Goetz Waschk\n" +"Gregory Hazel\n" +"Gustaf Neumann\n" +"Hang Su\n" +"Hans Lambermont\n" +"Hans-Peter Jansen\n" +"Harris Dugal\n" +"Heiko Panther\n" +"Igor Helman\n" +"Isaac Osunkunle\n" +"Jan David Mol\n" +"Jan Gerber\n" +"Jan Van Boghout\n" +"Jasper Alias\n" +"Jean-Alexis Montignies\n" +"Jean-Baptiste Le Stang\n" +"Jeffrey Baker\n" +"Jeroen Massar\n" +"Jérôme Guilbaud\n" +"Johannes Buchner\n" +"Johen Michael Zorko\n" +"Johnathan Rosser\n" +"John Dalgliesh\n" +"John Paul Lorenti\n" +"Jörg\n" +"Joseph Tulou\n" +"Julien Blache\n" +"Julien Plissonneau Duquène\n" +"Julien Robert\n" +"Kenneth Ostby\n" +"Kenneth Self\n" +"Kevin H. Patterson\n" +"Koehler, Vitally\n" +"K. Staring\n" +"Lahiru Lakmal Priyadarshana\n" +"Laurent Mutricy\n" +"Leo Spalteholz\n" +"Loox Thefuture\n" +"Marc Nolette\n" +"Marco Munderloh\n" +"Mark Gritter\n" +"Markus Kern\n" +"Markus Kuespert\n" +"Martin Hamrle\n" +"Martin Kahr\n" +"Mateus Krepsky Ludwich\n" +"Mathias Kretschmer\n" +"Mats Rojestal\n" +"Matthias P. Nowak\n" +"Matthieu Lochegnies\n" +"Michael Mondragon\n" +"Michael S. Feurstein\n" +"Michel Lanners\n" +"Mickael Hoerdt\n" +"Miguel Angel Cabrera\n" +"Mikko Hirvonen\n" +"Moritz Bunkus\n" +"Nilmoni Deb\n" +"Olivier Houchard\n" +"Olivier Pomel\n" +"Ondrej Kuda aka Albert\n" +"Øyvind Kolbu\n" +"Pascal Levesque\n" +"Patrick Horn\n" +"Patrick McLean\n" +"Pauline Castets\n" +"Paul Mackerras\n" +"Peter Surda\n" +"Petr Vacek\n" +"Philippe Van Hecke\n" +"Pierre-Luc Beaudoin\n" +"Pierre Marc Dumuid\n" +"Régis Duchesne\n" +"Remco Poortinga\n" +"Rene Gollent\n" +"Rob Casey\n" +"Robson Braga Araujo\n" +"Roine Gustafsson\n" +"Roman Bednarek\n" +"Rudolf Cornelissen\n" +"Sašo Kiselkov\n" +"Sebastian Jenny\n" +"Shane Harper\n" +"Stefán Freyr Stefánsson\n" +"Steve Brown\n" +"Steven M. Schultz\n" +"Tapio Hiltunen\n" +"Thomas L. Wood\n" +"Thomas Mühlgrabner\n" +"Thomas Parmelan\n" +"Tim 'O Callagha\n" +"Tim Schuerewegen\n" +"Tong Ka Man\n" +"Torsten Spindler\n" +"Udo Richter\n" +"Vincent Dimar\n" +"Vincent Penne\n" +"Vitalijus Slavinskas\n" +"Vitaly V. Bursov\n" +"Vladimir Chernyshov\n" +"Wade Majors\n" +"Wallace Wadge\n" +"Watanabe Go\n" +"William Hawkins\n" +"Xavier Maillard\n" +"Ye zhang\n" +"Yuehua Zhao\n" +"Abylay Ospan\n" +"Adam Leggett\n" +"Adrian Haensler\n" +"Ago Allikmaa\n" +"Ajith Manjula Senarathne\n" +"Alain Degreffe\n" +"Alan Pope\n" +"Aleksandr Pasechnik\n" +"Alexandre Fernandez\n" +"Alexandre Pereira Nunes\n" +"Alexandre Perraud\n" +"Alex Peak\n" +"Alex Warhawk\n" +"Alex Woods\n" +"Allan Odgaard\n" +"Ancelot Mark Pinto\n" +"Andrea Giudiceandrea\n" +"Andreas Hartmetz\n" +"Andreas Mieke\n" +"André Silva\n" +"Andrew Clayton\n" +"Andrey Gursky\n" +"Andrii Zui\n" +"Andy Tather\n" +"Antti Ajanki\n" +"Ara Qadir\n" +"Arjun Sreedharan\n" +"Arne de Bruijn\n" +"Arun Pandian G\n" +"A S Alam\n" +"Avani Sharma\n" +"Avishay Spitzer\n" +"Bastien Penavayre\n" +"Benjamin Adolphi\n" +"Ben Littler\n" +"Benoit du Payrat\n" +"Benoît Noël du Payrat\n" +"Bernd Kuhls\n" +"Boris Egorov\n" +"Boy van Amstel\n" +"Brian Schmidt\n" +"Brion Vibber\n" +"Cameron Mozie\n" +"Carlos Fenollosa\n" +"Carola Nitz\n" +"Christian Suloway\n" +"Clemens Werther\n" +"C.W. Betts\n" +"Daniel Amm\n" +"Daniel Verkamp\n" +"Darko Jankovic\n" +"Darrell Walisser\n" +"David Robison\n" +"David R Robison\n" +"Dennis Hamester\n" +"Derek Buitenhuis\n" +"Diogo Silva\n" +"Dominko Azdajic\n" +"Donald Campbell\n" +"Doney den Ouden\n" +"Duncan McNamara\n" +"Duncan McNAMARA\n" +"Elodie Thomann\n" +"Emeric Grange\n" +"Eric Engestrom\n" +"Etienne BRATEAU\n" +"Eugen Geist\n" +"Fabian Yamaguchi\n" +"Fabrizio Ge\n" +"Fabrizio Gennari\n" +"Fahad Al-Saidi\n" +"Felix Abecassis\n" +"Florent Pillet\n" +"Forteve Zepushisti\n" +"Frank Praznik\n" +"Gabriel de Perthuis\n" +"Gal Vinograd\n" +"Gaurav Pruthi\n" +"Geoffrey Métais\n" +"Gian Marco Sibilla\n" +"Gilles Sabourin\n" +"Gina Dobrescu\n" +"Gonzalo Higuera Díaz\n" +"Goran Dokic\n" +"Guillaume Gomez\n" +"Harald Sitter\n" +"Heorhi Valakhanovich\n" +"Ian Chamberlain\n" +"Ibrahima SARR\n" +"Igor Prokopenkov\n" +"Ion Agorria\n" +"Jarrad Whitaker\n" +"Jean-Yves Avenard\n" +"Jed Smith\n" +"Jérémy Carrier\n" +"Jeremy Huddleston Sequoia\n" +"Jerome Forissier\n" +"Jim Bankoski\n" +"Jonas Lundqvist\n" +"Jonatan \"jaw\" Wallmander\n" +"Jonathan Calmels\n" +"Jonathan Heard\n" +"Jonathan McGowan\n" +"Jonathan Thambidurai\n" +"Joni Räsänen\n" +"Josef Andersson\n" +"Joseph DeVore\n" +"Julian Scheel\n" +"Justin Kim\n" +"Kaarlo Räihä\n" +"Kamil Rytarowski\n" +"Kazuki Yamaguchi\n" +"Konstantin K. Beliak\n" +"Konstantinos Tsanaktsidis\n" +"Konstantin Pavlov\n" +"Kornel Lesiński\n" +"Olivier Langlois\n" +"Lochlin Duperron\n" +"Lukas Juhrich\n" +"Lyndon Brown\n" +"Marc Aldorasi\n" +"Marcel Schnirring\n" +"Marc Etcheverry\n" +"Mariusz Wasak\n" +"Mark Becwar\n" +"Martell Malone\n" +"Mathieu Malaterre\n" +"Mathieu Parent\n" +"Mathieu Velten\n" +"Matthias Keiser\n" +"Matthias Treydte\n" +"Max Dilipovich\n" +"Maxim Bublis\n" +"Maxime CHAPELET\n" +"Maxime Mouchet\n" +"Michael Tänzer\n" +"Miha Sokolov\n" +"Mohammed (Shaan) Huzaifa Danish\n" +"Moti Zilberman\n" +"Nathan Egge\n" +"Niklas Haas\n" +"Odd-Arild Kristensen\n" +"O. Hartmann\n" +"Olaf Hering\n" +"Oliver Collyer\n" +"Paul B Mahol\n" +"Paul Clark\n" +"Paulo Vitor Magacho da Silva\n" +"Pavol Babincak\n" +"Paweł Stankowski\n" +"Petter Reinholdtsen\n" +"Philip Höhlein\n" +"Pierre-Hugues Husson\n" +"Pierre Lamot\n" +"Pyry Kontio\n" +"Radek Vybiral\n" +"Rafael Waldo Delgado Doblas\n" +"Rajeesh K V\n" +"Ray Tiley\n" +"Reka Inovan\n" +"Remita Amine\n" +"Ricardo Ribalda Delgado\n" +"Richard Diamond\n" +"Rinat Ibragimov\n" +"Robert Mourning\n" +"Romain Bentz\n" +"Romain Fliedel\n" +"Romain Vimont\n" +"Ronald S. Bultje\n" +"Ross Finlayson\n" +"Sam Malone\n" +"Samuel Martin\n" +"Samuel Thibault\n" +"Sanchit Arora\n" +"Santiago Gimeno\n" +"Sebastian Ramacher\n" +"Sebastian Roth\n" +"Sergey Bolshakov\n" +"Shaleen Jain\n" +"Shlomi Fish\n" +"Simona-Marinela Prodea\n" +"Stanislas Plessia\n" +"Stefan Pöschel\n" +"Steven Toth\n" +"Sushma Reddy\n" +"Takahito Hirano\n" +"T. Chomphuming\n" +"Thierry Foucu\n" +"Thomas Nigro\n" +"Tim Allen\n" +"Tim Walker\n" +"Tobias Conradi\n" +"Tony Gaillard\n" +"Benoît Tuduri\n" +"Tzu-Jung Lee\n" +"Uwe L. Korn\n" +"Valentin Deniaud\n" +"Valentin Vetter\n" +"Valter Correia\n" +"Vianney Boyer\n" +"Victorien Le Couviour--Tuffet\n" +"Vikram Fugro\n" +"Vinson Lee\n" +"Wayne McDougall\n" +"Wieland Hoffmann\n" +"Wills Wang\n" +"Xabier Aramendi\n" +"Yaşar Tay\n" +"Yidong Ren\n" +"Yuudai Yamashigi\n" +"Zhao Zhili\n" +"أحمد المحم ودي (Ahmed El-Mahmoudy)\n" +"Баярсайхан Энхтайван\n" +"Сергей Дарьичев\n" +"\n" +"Artwork\n" +"-------\n" +"Damien Erambert\n" +"Daniel Dreibrodt, aka aLtgLasS\n" +"David Weber\n" +"Davor Orel\n" +"Dominic Spitaler\n" +"Doney den Ouden\n" +"Eurodata Computer Club\n" +"Geoffrey Roussel\n" +"Joeri van Dooren\n" +"kty0ne\n" +"Max Rudberg\n" +"Richard Øiestad\n" +"Simon Damkjær Andersen\n" +"Tom Bigelajzen\n" +"Vincent van den Heuvel\n" +"\n" +"Documentation\n" +"-------------\n" +"Bill Eldridge\n" +"\n" +"Localization\n" +"------------\n" +"Abdul Fousan - Tamil\n" +"A. Decorte - Friulian\n" +"A. Regnander - Swedish\n" +"Adem Gunes - Turkish\n" +"Adi Nugroho - Tagalog\n" +"Adnan Memija - Bosnian\n" +"airplanez - Korean\n" +"Ajith Manjula - Sinhala\n" +"Aled Powell - Welsh\n" +"Alexander Didebulidze - Georgian\n" +"Alexander Henket - Dutch\n" +"Alexander Jansen - Norwegian Bokmål\n" +"Alexander Lakhin - Russian\n" +"Alexey Lugin - Ukrainian\n" +"Alexey Salmin - Russian\n" +"Alfred John - Acoli\n" +"Amanpreet Singh Alam - Punjabi\n" +"André de Barros Martins Ribeiro - Brazilian portuguese\n" +"Andrey Brilevskiy - Russian\n" +"Andrey Wolk - Russian\n" +"Andri Pálsson - Icelandic\n" +"Andriy Bandura - Ukrainian\n" +"Anh Phan - Vietnamese\n" +"Aniket Eknath Kudale - Marathi\n" +"Animesh Swar - Nepalese\n" +"Aputsiaĸ Niels Janussen - Danish\n" +"Ara Bextiyar - Sorani (Kurdish)\n" +"Ari Constâncio - Portuguese\n" +"Arkadiusz Lipiec - Polish\n" +"Ask Hjorth Larsen - Danish\n" +"Audrey Prevost - French\n" +"Auk Piseth - Khmer\n" +"Bayarsaikhan Enkhtaivan Баярсайхан Энхтайван - Mongolian\n" +"Biraj Karmakar - Bengali (India)\n" +"Bruno Queirós - Portuguese\n" +"Bruno Vella - Italian\n" +"Caner Başaran - Turkish\n" +"Carlo Calabrò - Italian\n" +"Chandan Kumar - Hindi\n" +"Chesús Daniel Trigo - Aragonese\n" +"Christoph Miebach - German\n" +"Chynggyz Jumaliev - Kirgyz\n" +"Circo Radu - Romanian\n" +"Cristian Secară - Romanian\n" +"Daniel Nylander - Swedish\n" +"Daniel Winzen - German\n" +"David González - Spanish\n" +"David Planella - Catalan\n" +"Dean Lee - Simplified Chinese\n" +"Denis Arnaud - Breton\n" +"Derk-Jan Hartman - Dutch\n" +"DirektX - Hungarian\n" +"Dominko Aždajić - Croatian\n" +"Dylan Aïssi - French\n" +"Đorđe Vasiljević - Serbian\n" +"Eduard Babayan - Armenian\n" +"Eero - Estonian\n" +"Eirik U. Birkeland - Norwegian Nynorsk\n" +"Elizabeth Da Conceicao Baptista - Tetum\n" +"Emilio Sepúlveda - Interlingua\n" +"Emin Mastizada - Azerbaijani\n" +"Éric Lassauge - French\n" +"Farzaneh Sarafraz - Persian\n" +"Florence Tushabe - Chiga\n" +"Fouzia Bourai - Arabic\n" +"Frank Chao - Traditional Chinese\n" +"Freyr Gunnar Ólafsson - Icelandic\n" +"Friedel Wolff - Afrikaans\n" +"Fumio Nakayama - Japanese\n" +"Gabor Kelemen - Hungarian\n" +"Gaurav Kumar - Hindi\n" +"Gaëtan Rousseaux - Walloon\n" +"Ghjuvan Pasquinu - Corsican\n" +"Goce Manevski - Macedonian\n" +"Golam Maruf Oovee - Bengali\n" +"Gonçalo Cordeiro - Galician\n" +"Gorana Milicevic - Serbian\n" +"Goswami Hardikpuri Kishorpuri - Gujarati\n" +"Haakon Meland Eriksen - Norwegian\n" +"Han HoJoong - Korean\n" +"Hardik Kishorpuri Goswami - Gujarati\n" +"Hemanta Nandi - Bengali (India)\n" +"Huw Waters - Welsh\n" +"H.Shalitha Vikum - Sinhala\n" +"Ibrahima Sarr - Fulah\n" +"Ingmārs Dīriņš - Latvian\n" +"Israt Jahan - Bengali\n" +"Ivar Smolin - Estonian\n" +"Iván Seoane Pardo - Galician\n" +"Ivo Ivanov - Bulgarian\n" +"Iñaki Larrañaga Murgoitio - Basque\n" +"Iñigo Varela - Asturian; Bable\n" +"Jakub Žáček - Czech\n" +"James Olweny - Ganda\n" +"Jamil Ahmed - Bengali\n" +"Javier Varela - Spanish\n" +"Jean-Pierre Kuypers - French\n" +"Jens Seidel - German\n" +"Joao Almeida - Portuguese\n" +"Joel Arvidsson - Swedish\n" +"jogijs - Latvian\n" +"Jonas Larsen - Danish\n" +"Jon Stødle - Norwegian Nynorsk\n" +"Jouni Kähkönen - Finnish\n" +"Juha Jeronen - Finnish\n" +"Julen Ruiz Aizpuru - Basque\n" +"Kai Hermann - German\n" +"Kamil Páral - Czech\n" +"Kang Jeong-Hee - Korean\n" +"Kasper Tvede - Danish\n" +"Kaya Zeren - Turkish\n" +"Kenneth Nielsen - Danish\n" +"Khin Mi Mi Aung - Burmese\n" +"Khoem Sokhem - Khmer\n" +"Kola - Albanian\n" +"Kypchak Kypchak - Kazakh\n" +"Laurent Jonqueres - Occitan\n" +"Loba Yeasmeen - Bengali\n" +"Lorena Gomes - Catalan\n" +"Lorenzo Porta - Italian\n" +"Luqman Hakim - Indonesian\n" +"L. Balasubramaniam - Hindi\n" +"Mahrazi Mohd Kamal - Malay\n" +"Manolis Stefanis - Modern Greek\n" +"Manuela Silva/Alfredo Silva - Portuguese\n" +"Marián Hikaník - Slovak\n" +"Mario Siegmann - German\n" +"Marko Uskokovic - Serbian\n" +"Martin Srebotnjak - Slovenian\n" +"Martin Zicha - Czech\n" +"Matej Urbančič - Slovenian\n" +"Mathias C. Berens, welcome-soft - German\n" +"Mattias Põldaru - Estonian\n" +"Md. Rezwan Shahid - Bengali\n" +"Meelad Zakaria - Persian\n" +"Michael Bauer - Scottish Gaelic\n" +"Michal Halenka - Czech\n" +"Michał Trzebiatowski - Polish\n" +"Miguel Sousa - Portuguese\n" +"Mihkel Kirjutas - Estonian\n" +"Mindaugas Baranauskas - Lithuanian\n" +"Miroslav Oujeský - Czech\n" +"Morten Brix Pedersen - Danish\n" +"Mustafa Sandal - Czech\n" +"Myckel Habets - Dutch\n" +"Namhyung Kim - Korean\n" +"Niels Fanøe - Danish\n" +"Niklas 'Nille' Åkerström - Swedish\n" +"Olav Dahlum - Norwegian Bokmål\n" +"Oleksandr Natalenko - Ukrainian\n" +"Omer Ensari - Kurmanji (Kurdish)\n" +"Osama Khalid - Arabic\n" +"Otto Kekäläinen - Finnish\n" +"Paras Nath Chaudhary - Nepali\n" +"Pasindu Kavinda - Sinhala\n" +"Pau Iranzo - Catalan\n" +"Paula Iglesias - Galician\n" +"Pedro Valadares - Portuguese\n" +"Peter Jespersen - Danish\n" +"Petr Šimáček - Czech\n" +"Phan Anh - Vietnamese\n" +"Philipp Weissenbacher - German\n" +"Pittayakom Saingtong - Thai\n" +"Prasannajit Acharya - Oriya\n" +"Praveen Illa - Telugu\n" +"Predrag Ljubenović - Serbian\n" +"Pyae Sone - Burmese\n" +"Rajnikant Kumbhar - Marathi\n" +"Ricardo Perdigão - Portuguese\n" +"Ricardo Pérez López - Spanish\n" +"Roustam Ghizdatov - Russian\n" +"Ruei-Yuan Lu - Traditional Chinese\n" +"Saad Liaquat Kiani - Urdu\n" +"Sadia Afroz - Bengali\n" +"Said Marjan Zazai - Pashto\n" +"Salar Khalilzadeh - Persian\n" +"Sam Askari - Spanish\n" +"Sam Hocevar - British\n" +"Samuel Hocevar - French\n" +"Saúl Ortega - Spanish\n" +"Savvas Nesseris - Modern Greek\n" +"Sayan Chowdhury - Hindi\n" +"Seanán Ó Coistín - Irish\n" +"Semsudin Abdic - Bosnian\n" +"Shambhu Kumar - Hindi\n" +"Shantanu Sarkar - Hindi\n" +"Shashi Ranjan - Hindi\n" +"Siarhei Daryichau Дар'ічаў Сяргей - Belarusian\n" +"Sidney Doria - Brazilian Portuguese\n" +"Sigmund Augdal - Norwegian Bokmål\n" +"Simos Xenitellis - Modern Greek\n" +"Sipho Sibiya - Zulu\n" +"Sok Sophea - Khmer\n" +"Solomon Gizaw - Amharic\n" +"Sreejith P - Malayalam\n" +"Suraj Kawade - Marathi\n" +"Stian Jørgensrud - Norwegian Bokmål\n" +"Sveinn í Felli - Icelandic\n" +"Tadashi Jokagi - Japanese\n" +"Tarsem Singh - Hindi\n" +"Thanakrit Chomphuming - Thai\n" +"Tero Pelander - Finnish\n" +"Thomas De Rocker - Dutch\n" +"Thomas Graf - gettext support, German\n" +"Tomáš Chvátal - Czech\n" +"Tòni Galhard - Occitan\n" +"Umesh Agarwal - Bengali (India)\n" +"Umidjon Almasov - Uzbek\n" +"Václav Pavlíček - Czech\n" +"Valek Filippov - Russian\n" +"Vicente Jimenez Aguilar - Spanish\n" +"Vincenzo Reale - Italian\n" +"Vít Pelčák - Czech\n" +"viyyer - Hindi\n" +"Vladimir Yermolayev - Russian\n" +"Vojtěch Smejkal - Czech\n" +"Wei Mingzhi - Simplified Chinese\n" +"Xènia Albà Cantero - Catalan\n" +"Xuacu Saturio - Asturian\n" +"Yaron Shahrabani - Hebrew\n" +"Yaşar Tay - Turkish\n" +"Yhal Htet Aung - Burmese\n" +"Yogesh K S - Kannada\n" +"Yoyo - Simplified Chinese\n" +"Yuksel Yildirim - Turkish\n" +"Zabeeh Khan - Pashto\n" +"Zhang Tong - Chinese\n" +; diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_access.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_access.h new file mode 100644 index 0000000..da06554 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_access.h @@ -0,0 +1,81 @@ +/***************************************************************************** + * vlc_access.h: Access descriptor, queries and methods + ***************************************************************************** + * Copyright (C) 1999-2006 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_ACCESS_H +#define VLC_ACCESS_H 1 + +#include + +/** + * \defgroup access Access + * \ingroup stream + * Raw input byte streams + * @{ + * \file + * Input byte stream modules interface + */ + +/** + * Special redirection error code. + * + * In case of redirection, the access open function should clean up (as in + * normal failure case), store the heap-allocated redirection URL in + * stream_t.psz_url, and return this value. + */ +#define VLC_ACCESS_REDIRECT VLC_ETIMEOUT + +/** + * Opens a new read-only byte stream. + * + * This function might block. + * The initial offset is of course always zero. + * + * \param obj parent VLC object + * \param mrl media resource location to read + * \return a new access object on success, NULL on failure + */ +VLC_API stream_t *vlc_access_NewMRL(vlc_object_t *obj, const char *mrl); + +/** + * \defgroup access_helper Access Helpers + * @{ + */ + +/** + * Default pf_control callback for directory accesses. + */ +VLC_API int access_vaDirectoryControlHelper( stream_t *p_access, int i_query, va_list args ); + +#define ACCESS_SET_CALLBACKS( read, block, control, seek ) \ + do { \ + p_access->pf_read = (read); \ + p_access->pf_block = (block); \ + p_access->pf_control = (control); \ + p_access->pf_seek = (seek); \ + } while(0) + +/** + * @} @} + */ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_actions.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_actions.h new file mode 100644 index 0000000..404c166 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_actions.h @@ -0,0 +1,275 @@ +/***************************************************************************** + * vlc_actions.h: handle vlc actions + ***************************************************************************** + * Copyright (C) 2003-2016 VLC authors and VideoLAN + * $Id$ + * + * Authors: Sigmund Augdal Helberg + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_ACTIONS_H +#define VLC_ACTIONS_H 1 + +/* Called from src/libvlc.c */ +int +libvlc_InternalActionsInit(libvlc_int_t *p_libvlc); + +/* Called from src/libvlc.c */ +void +libvlc_InternalActionsClean(libvlc_int_t *p_libvlc); + +/** + * \file + * This file defines keys and functions + */ + +#define KEY_MODIFIER 0xFF000000 +#define KEY_MODIFIER_ALT 0x01000000 +#define KEY_MODIFIER_SHIFT 0x02000000 +#define KEY_MODIFIER_CTRL 0x04000000 +#define KEY_MODIFIER_META 0x08000000 +#define KEY_MODIFIER_COMMAND 0x10000000 + +#define KEY_UNSET 0x00000000 +#define KEY_BACKSPACE 0x08 +#define KEY_TAB 0x09 +#define KEY_ENTER 0x0D +#define KEY_ESC 0x1B +/* End of Unicode range: 0x0010FFFF */ +#define KEY_LEFT 0x00210000 +#define KEY_RIGHT 0x00220000 +#define KEY_UP 0x00230000 +#define KEY_DOWN 0x00240000 +#define KEY_F1 0x00270000 +#define KEY_F2 0x00280000 +#define KEY_F3 0x00290000 +#define KEY_F4 0x002A0000 +#define KEY_F5 0x002B0000 +#define KEY_F6 0x002C0000 +#define KEY_F7 0x002D0000 +#define KEY_F8 0x002E0000 +#define KEY_F9 0x002F0000 +#define KEY_F10 0x00300000 +#define KEY_F11 0x00310000 +#define KEY_F12 0x00320000 +#define KEY_HOME 0x00330000 +#define KEY_END 0x00340000 +#define KEY_INSERT 0x00350000 +#define KEY_DELETE 0x00360000 +#define KEY_MENU 0x00370000 +#define KEY_PAGEUP 0x00390000 +#define KEY_PAGEDOWN 0x003A0000 +#define KEY_PRINT 0x003B0000 +#define KEY_PAUSE 0x003D0000 + +#define KEY_BROWSER_BACK 0x003F0000 +#define KEY_BROWSER_FORWARD 0x00400000 +#define KEY_BROWSER_REFRESH 0x00410000 +#define KEY_BROWSER_STOP 0x00420000 +#define KEY_BROWSER_SEARCH 0x00430000 +#define KEY_BROWSER_FAVORITES 0x00440000 +#define KEY_BROWSER_HOME 0x00450000 +#define KEY_VOLUME_MUTE 0x00460000 +#define KEY_VOLUME_DOWN 0x00470000 +#define KEY_VOLUME_UP 0x00480000 +#define KEY_MEDIA_NEXT_TRACK 0x00490000 +#define KEY_MEDIA_PREV_TRACK 0x004A0000 +#define KEY_MEDIA_STOP 0x004B0000 +#define KEY_MEDIA_PLAY_PAUSE 0x004C0000 +#define KEY_MEDIA_RECORD 0x004D0000 +#define KEY_MEDIA_REWIND 0x004E0000 +#define KEY_MEDIA_FORWARD 0x004F0000 +#define KEY_MEDIA_REPEAT 0x00500000 +#define KEY_MEDIA_SHUFFLE 0x00510000 +#define KEY_MEDIA_SUBTITLE 0x00520000 +#define KEY_MEDIA_AUDIO 0x00530000 +#define KEY_MEDIA_ANGLE 0x00540000 +#define KEY_MEDIA_TIME 0x00550000 +#define KEY_MEDIA_FRAME_PREV 0x00560000 +#define KEY_MEDIA_FRAME_NEXT 0x00570000 +#define KEY_MEDIA_SELECT 0x00580000 +#define KEY_MEDIA_VIEW 0x00590000 +#define KEY_MEDIA_MENU 0x005A0000 +#define KEY_ZOOM_IN 0x00600000 +#define KEY_ZOOM_OUT 0x00610000 +#define KEY_BRIGHTNESS_UP 0x00620000 +#define KEY_BRIGHTNESS_DOWN 0x00630000 + +#define KEY_MOUSEWHEELUP 0x00F00000 +#define KEY_MOUSEWHEELDOWN 0x00F10000 +#define KEY_MOUSEWHEELLEFT 0x00F20000 +#define KEY_MOUSEWHEELRIGHT 0x00F30000 + +VLC_API char *vlc_keycode2str(uint_fast32_t i_key, bool locale) VLC_USED; +VLC_API uint_fast32_t vlc_str2keycode(const char *str) VLC_USED; + +typedef enum vlc_action_id { + ACTIONID_NONE = 0, + ACTIONID_QUIT, + ACTIONID_PLAY_PAUSE, + ACTIONID_PLAY, + ACTIONID_PAUSE, + ACTIONID_STOP, + ACTIONID_PREV, + ACTIONID_NEXT, + ACTIONID_SLOWER, + ACTIONID_FASTER, + ACTIONID_TOGGLE_FULLSCREEN, + ACTIONID_VOL_UP, + ACTIONID_VOL_DOWN, + ACTIONID_NAV_ACTIVATE, + ACTIONID_NAV_UP, + ACTIONID_NAV_DOWN, + ACTIONID_NAV_LEFT, + ACTIONID_NAV_RIGHT, + ACTIONID_JUMP_BACKWARD_EXTRASHORT, + ACTIONID_JUMP_FORWARD_EXTRASHORT, + ACTIONID_JUMP_BACKWARD_SHORT, + ACTIONID_JUMP_FORWARD_SHORT, + ACTIONID_JUMP_BACKWARD_MEDIUM, + ACTIONID_JUMP_FORWARD_MEDIUM, + ACTIONID_JUMP_BACKWARD_LONG, + ACTIONID_JUMP_FORWARD_LONG, + ACTIONID_FRAME_NEXT, + ACTIONID_POSITION, + ACTIONID_VOL_MUTE, +/* let ACTIONID_SET_BOOMARK* and ACTIONID_PLAY_BOOKMARK* be contiguous */ + ACTIONID_SET_BOOKMARK1, + ACTIONID_SET_BOOKMARK2, + ACTIONID_SET_BOOKMARK3, + ACTIONID_SET_BOOKMARK4, + ACTIONID_SET_BOOKMARK5, + ACTIONID_SET_BOOKMARK6, + ACTIONID_SET_BOOKMARK7, + ACTIONID_SET_BOOKMARK8, + ACTIONID_SET_BOOKMARK9, + ACTIONID_SET_BOOKMARK10, + ACTIONID_PLAY_BOOKMARK1, + ACTIONID_PLAY_BOOKMARK2, + ACTIONID_PLAY_BOOKMARK3, + ACTIONID_PLAY_BOOKMARK4, + ACTIONID_PLAY_BOOKMARK5, + ACTIONID_PLAY_BOOKMARK6, + ACTIONID_PLAY_BOOKMARK7, + ACTIONID_PLAY_BOOKMARK8, + ACTIONID_PLAY_BOOKMARK9, + ACTIONID_PLAY_BOOKMARK10, + /* end of contiguous zone */ + ACTIONID_PLAY_CLEAR, + ACTIONID_SUBDELAY_UP, + ACTIONID_SUBDELAY_DOWN, + ACTIONID_SUBSYNC_MARKAUDIO, + ACTIONID_SUBSYNC_MARKSUB, + ACTIONID_SUBSYNC_APPLY, + ACTIONID_SUBSYNC_RESET, + ACTIONID_SUBPOS_UP, + ACTIONID_SUBPOS_DOWN, + ACTIONID_AUDIO_TRACK, + ACTIONID_SUBTITLE_REVERSE_TRACK, + ACTIONID_SUBTITLE_TRACK, + ACTIONID_SUBTITLE_TOGGLE, + ACTIONID_SUBTITLE_TEXT_SCALE_NORMAL, + ACTIONID_SUBTITLE_TEXT_SCALE_UP, + ACTIONID_SUBTITLE_TEXT_SCALE_DOWN, + ACTIONID_INTF_TOGGLE_FSC, + ACTIONID_INTF_HIDE, + ACTIONID_INTF_BOSS, + /* chapter and title navigation */ + ACTIONID_TITLE_PREV, + ACTIONID_TITLE_NEXT, + ACTIONID_CHAPTER_PREV, + ACTIONID_CHAPTER_NEXT, + /* end of chapter and title navigation */ + ACTIONID_AUDIODELAY_UP, + ACTIONID_AUDIODELAY_DOWN, + ACTIONID_SNAPSHOT, + ACTIONID_RECORD, + ACTIONID_DISC_MENU, + ACTIONID_ASPECT_RATIO, + ACTIONID_CROP, + ACTIONID_DEINTERLACE, + ACTIONID_DEINTERLACE_MODE, + ACTIONID_ZOOM, + ACTIONID_UNZOOM, + ACTIONID_CROP_TOP, + ACTIONID_UNCROP_TOP, + ACTIONID_CROP_LEFT, + ACTIONID_UNCROP_LEFT, + ACTIONID_CROP_BOTTOM, + ACTIONID_UNCROP_BOTTOM, + ACTIONID_CROP_RIGHT, + ACTIONID_UNCROP_RIGHT, + ACTIONID_RANDOM, + ACTIONID_LOOP, + ACTIONID_WALLPAPER, + ACTIONID_LEAVE_FULLSCREEN, + /* Zoom */ + ACTIONID_ZOOM_QUARTER, + ACTIONID_ZOOM_HALF, + ACTIONID_ZOOM_ORIGINAL, + ACTIONID_ZOOM_DOUBLE, + /* Cycle Through Audio Devices */ + ACTIONID_AUDIODEVICE_CYCLE, + /* scaling */ + ACTIONID_TOGGLE_AUTOSCALE, + ACTIONID_SCALE_UP, + ACTIONID_SCALE_DOWN, + /* */ + ACTIONID_RATE_NORMAL, + ACTIONID_RATE_SLOWER_FINE, + ACTIONID_RATE_FASTER_FINE, + /* Cycle Through Program Service IDs */ + ACTIONID_PROGRAM_SID_NEXT, + ACTIONID_PROGRAM_SID_PREV, + ACTIONID_INTF_POPUP_MENU, + /* Viewpoint */ + ACTIONID_VIEWPOINT_FOV_IN, + ACTIONID_VIEWPOINT_FOV_OUT, + ACTIONID_VIEWPOINT_ROLL_CLOCK, + ACTIONID_VIEWPOINT_ROLL_ANTICLOCK, + /* Combo Actions */ + ACTIONID_COMBO_VOL_FOV_UP, + ACTIONID_COMBO_VOL_FOV_DOWN, + +} vlc_action_id_t; + +/** + * Get the action ID from an action key name + * \return the action ID or ACTIONID_NONE on error. + */ +VLC_API vlc_action_id_t +vlc_actions_get_id(const char *psz_key_name); + +/** + * Get keycodes from a action key name and vlc configuration + * \return The number of keycodes for this action, or 0 in case of an error. + * The list needs to be released with free() + */ +VLC_API size_t +vlc_actions_get_keycodes(vlc_object_t *p_obj, const char *psz_key_name, + bool b_global, uint_fast32_t **pp_keycodes ); +#define vlc_actions_get_keycodes(a, b, c, d) vlc_actions_get_keycodes(VLC_OBJECT(a), b, c, d) + +/** + * Get a list a key names + * \return A NULL terminated list of const char * + */ +VLC_API const char* const* +vlc_actions_get_key_names(vlc_object_t *p_obj); +#define vlc_actions_get_key_names(x) vlc_actions_get_key_names(VLC_OBJECT(x)) + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_addons.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_addons.h new file mode 100644 index 0000000..23cb134 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_addons.h @@ -0,0 +1,227 @@ +/***************************************************************************** + * vlc_addons.h : addons handling and describing + ***************************************************************************** + * Copyright (C) 2013 VideoLAN and authors + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_ADDONS_H +#define VLC_ADDONS_H 1 + +#include +#include + +# ifdef __cplusplus +extern "C" { +# endif + +typedef enum addon_type_t +{ + ADDON_UNKNOWN = 0, + ADDON_EXTENSION, + ADDON_PLAYLIST_PARSER, + ADDON_SERVICE_DISCOVERY, + ADDON_SKIN2, + ADDON_PLUGIN, + ADDON_INTERFACE, + ADDON_META, + ADDON_OTHER +} addon_type_t; + +typedef enum addon_state_t +{ + ADDON_NOTINSTALLED = 0, + ADDON_INSTALLING, + ADDON_INSTALLED, + ADDON_UNINSTALLING +} addon_state_t; + +typedef enum addon_flags_t +{ + ADDON_BROKEN = 1, /* Have install inconsistency */ + ADDON_MANAGEABLE = 1 << 1, /* Have manifest, can install or uninstall files */ + ADDON_UPDATABLE = 1 << 2, +} addon_flags_t; + +#define ADDON_MAX_SCORE (5 * 100) +#define ADDON_UUID_SIZE 16 +#define ADDON_UUID_PSZ_SIZE (ADDON_UUID_SIZE * 2 + 4) +typedef uint8_t addon_uuid_t[ADDON_UUID_SIZE]; + +typedef struct addon_file_t +{ + addon_type_t e_filetype; + char *psz_download_uri; + char *psz_filename; +} addon_file_t; + +struct addon_entry_t +{ + vlc_mutex_t lock; + + addon_type_t e_type; + addon_state_t e_state; + addon_flags_t e_flags; + + /* data describing addon */ + addon_uuid_t uuid; + char *psz_name; + char *psz_summary; + char *psz_description; + char *psz_author; + char *psz_source_uri; /* webpage, ... */ + char *psz_image_uri; + char *psz_image_data; /* base64, png */ + char *psz_version; + + /* stats */ + long int i_downloads; + int i_score; /* score 0..5 in hundredth */ + + /* Lister */ + char *psz_source_module; + + /* files list */ + char *psz_archive_uri; /* Archive */ + DECL_ARRAY(addon_file_t *) files; + + /* custom data storage (if needed by module/source) */ + void * p_custom; +}; + +typedef struct addons_finder_t addons_finder_t; +typedef struct addons_finder_sys_t addons_finder_sys_t; +struct addons_finder_t +{ + VLC_COMMON_MEMBERS + + int ( * pf_find )( addons_finder_t * ); + int ( * pf_retrieve )( addons_finder_t *, addon_entry_t * ); + DECL_ARRAY( addon_entry_t * ) entries; + char *psz_uri; + + addons_finder_sys_t *p_sys; +}; + +typedef struct addons_storage_t addons_storage_t; +typedef struct addons_storage_sys_t addons_storage_sys_t; +struct addons_storage_t +{ + VLC_COMMON_MEMBERS + + int ( * pf_install )( addons_storage_t *, addon_entry_t * ); + int ( * pf_remove )( addons_storage_t *, addon_entry_t * ); + int ( * pf_catalog ) ( addons_storage_t *, addon_entry_t **, int ); + + addons_storage_sys_t *p_sys; +}; + +typedef struct addons_manager_t addons_manager_t; + +struct addons_manager_owner +{ + void *sys; + void (*addon_found)(struct addons_manager_t *, struct addon_entry_t *); + void (*discovery_ended)(struct addons_manager_t *); + void (*addon_changed)(struct addons_manager_t *, struct addon_entry_t *); +}; + +typedef struct addons_manager_private_t addons_manager_private_t; +struct addons_manager_t +{ + struct addons_manager_owner owner; + addons_manager_private_t *p_priv; +}; + +/** + * addon entry lifecycle + */ +VLC_API addon_entry_t *addon_entry_New( void ); +VLC_API addon_entry_t *addon_entry_Hold(addon_entry_t *); +VLC_API void addon_entry_Release(addon_entry_t *); + +/** + * addons manager lifecycle + */ +VLC_API addons_manager_t *addons_manager_New( vlc_object_t *, + const struct addons_manager_owner * ); +VLC_API void addons_manager_Delete( addons_manager_t * ); + +/** + * Charge currently installed, usable and manageable addons + * (default "addons storage" module) + */ +VLC_API int addons_manager_LoadCatalog( addons_manager_t * ); + +/** + * Gather addons info from repository (default "addons finder" module) + * If psz_uri is not NULL, only gather info from the pointed package. + */ +VLC_API void addons_manager_Gather( addons_manager_t *, const char *psz_uri ); + +/** + * Install or Remove the addon identified by its uuid + */ +VLC_API int addons_manager_Install( addons_manager_t *p_manager, const addon_uuid_t uuid ); +VLC_API int addons_manager_Remove( addons_manager_t *p_manager, const addon_uuid_t uuid ); + +/** + * String uuid to binary uuid helpers + */ +static inline bool addons_uuid_read( const char *psz_uuid, addon_uuid_t *p_uuid ) +{ + if ( !psz_uuid ) return false; + if ( strlen( psz_uuid ) < ADDON_UUID_PSZ_SIZE ) return false; + + int i = 0, j = 0; + while ( i + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_AOUT_H +#define VLC_AOUT_H 1 + +#include + +/** + * \defgroup audio_output Audio output + * \ingroup output + * @{ + * \file + * Audio output modules interface + */ + +/* Buffers which arrive in advance of more than AOUT_MAX_ADVANCE_TIME + * will be considered as bogus and be trashed */ +#define AOUT_MAX_ADVANCE_TIME (AOUT_MAX_PREPARE_TIME + CLOCK_FREQ) + +/* Buffers which arrive in advance of more than AOUT_MAX_PREPARE_TIME + * will cause the calling thread to sleep */ +#define AOUT_MAX_PREPARE_TIME (2 * CLOCK_FREQ) + +/* Buffers which arrive after pts - AOUT_MIN_PREPARE_TIME will be trashed + * to avoid too heavy resampling */ +#define AOUT_MIN_PREPARE_TIME AOUT_MAX_PTS_ADVANCE + +/* Tolerance values from EBU Recommendation 37 */ +/** Maximum advance of actual audio playback time to coded PTS, + * above which downsampling will be performed */ +#define AOUT_MAX_PTS_ADVANCE (CLOCK_FREQ / 25) + +/** Maximum delay of actual audio playback time from coded PTS, + * above which upsampling will be performed */ +#define AOUT_MAX_PTS_DELAY (3 * CLOCK_FREQ / 50) + +/* Max acceptable resampling (in %) */ +#define AOUT_MAX_RESAMPLING 10 + +#include "vlc_es.h" + +#define AOUT_FMTS_IDENTICAL( p_first, p_second ) ( \ + ((p_first)->i_format == (p_second)->i_format) \ + && AOUT_FMTS_SIMILAR(p_first, p_second) ) + +/* Check if i_rate == i_rate and i_channels == i_channels */ +#define AOUT_FMTS_SIMILAR( p_first, p_second ) ( \ + ((p_first)->i_rate == (p_second)->i_rate) \ + && ((p_first)->channel_type == (p_second)->channel_type) \ + && ((p_first)->i_physical_channels == (p_second)->i_physical_channels)\ + && ((p_first)->i_chan_mode == (p_second)->i_chan_mode) ) + +#define AOUT_FMT_LINEAR( p_format ) \ + (aout_BitsPerSample((p_format)->i_format) != 0) + +#define VLC_CODEC_SPDIFL VLC_FOURCC('s','p','d','i') +#define VLC_CODEC_SPDIFB VLC_FOURCC('s','p','d','b') + +#define AOUT_FMT_SPDIF( p_format ) \ + ( ((p_format)->i_format == VLC_CODEC_SPDIFL) \ + || ((p_format)->i_format == VLC_CODEC_SPDIFB) \ + || ((p_format)->i_format == VLC_CODEC_A52) \ + || ((p_format)->i_format == VLC_CODEC_DTS) ) + +#define AOUT_FMT_HDMI( p_format ) \ + ( (p_format)->i_format == VLC_CODEC_EAC3 \ + ||(p_format)->i_format == VLC_CODEC_TRUEHD \ + ||(p_format)->i_format == VLC_CODEC_MLP \ + ) + +/* Values used for the audio-channels object variable */ +#define AOUT_VAR_CHAN_UNSET 0 /* must be zero */ +#define AOUT_VAR_CHAN_STEREO 1 +#define AOUT_VAR_CHAN_RSTEREO 2 +#define AOUT_VAR_CHAN_LEFT 3 +#define AOUT_VAR_CHAN_RIGHT 4 +#define AOUT_VAR_CHAN_DOLBYS 5 +#define AOUT_VAR_CHAN_HEADPHONES 6 +#define AOUT_VAR_CHAN_MONO 7 + +/***************************************************************************** + * Main audio output structures + *****************************************************************************/ + +/* Size of a frame for S/PDIF output. */ +#define AOUT_SPDIF_SIZE 6144 + +/* Number of samples in an A/52 frame. */ +#define A52_FRAME_NB 1536 + +/* FIXME to remove once aout.h is cleaned a bit more */ +#include + +/** Audio output object */ +struct audio_output +{ + VLC_COMMON_MEMBERS + + struct aout_sys_t *sys; /**< Private data for callbacks */ + + int (*start)(audio_output_t *, audio_sample_format_t *fmt); + /**< Starts a new stream (mandatory, cannot be NULL). + * \param fmt input stream sample format upon entry, + * output stream sample format upon return [IN/OUT] + * \return VLC_SUCCESS on success, non-zero on failure + * \note No other stream may be already started when called. + */ + void (*stop)(audio_output_t *); + /**< Stops the existing stream (optional, may be NULL). + * \note A stream must have been started when called. + */ + int (*time_get)(audio_output_t *, vlc_tick_t *delay); + /**< Estimates playback buffer latency (optional, may be NULL). + * \param delay pointer to the delay until the next sample to be written + * to the playback buffer is rendered [OUT] + * \return 0 on success, non-zero on failure or lack of data + * \note A stream must have been started when called. + */ + void (*play)(audio_output_t *, block_t *); + /**< Queues a block of samples for playback (mandatory, cannot be NULL). + * \note A stream must have been started when called. + */ + void (*pause)( audio_output_t *, bool pause, vlc_tick_t date); + /**< Pauses or resumes playback (optional, may be NULL). + * \param pause pause if true, resume from pause if false + * \param date timestamp when the pause or resume was requested + * \note A stream must have been started when called. + */ + void (*flush)( audio_output_t *, bool wait); + /**< Flushes or drains the playback buffers (mandatory, cannot be NULL). + * \param wait true to wait for playback of pending buffers (drain), + * false to discard pending buffers (flush) + * \note A stream must have been started when called. + */ + int (*volume_set)(audio_output_t *, float volume); + /**< Changes playback volume (optional, may be NULL). + * \param volume requested volume (0. = mute, 1. = nominal) + * \note The volume is always a positive number. + * \warning A stream may or may not have been started when called. + */ + int (*mute_set)(audio_output_t *, bool mute); + /**< Changes muting (optinal, may be NULL). + * \param mute true to mute, false to unmute + * \warning A stream may or may not have been started when called. + */ + int (*device_select)(audio_output_t *, const char *id); + /**< Selects an audio output device (optional, may be NULL). + * \param id nul-terminated device unique identifier. + * \return 0 on success, non-zero on failure. + * \warning A stream may or may not have been started when called. + */ + + struct { + bool headphones; /**< Default to false, set it to true if the current + sink is using headphones */ + } current_sink_info; + /**< Current sink informations set by the module from the start() function */ + + struct { + void (*volume_report)(audio_output_t *, float); + void (*mute_report)(audio_output_t *, bool); + void (*policy_report)(audio_output_t *, bool); + void (*device_report)(audio_output_t *, const char *); + void (*hotplug_report)(audio_output_t *, const char *, const char *); + int (*gain_request)(audio_output_t *, float); + void (*restart_request)(audio_output_t *, unsigned); + } event; +}; + +typedef enum +{ + AOUT_CHANIDX_DISABLE = -1, + AOUT_CHANIDX_LEFT, + AOUT_CHANIDX_RIGHT, + AOUT_CHANIDX_MIDDLELEFT, + AOUT_CHANIDX_MIDDLERIGHT, + AOUT_CHANIDX_REARLEFT, + AOUT_CHANIDX_REARRIGHT, + AOUT_CHANIDX_REARCENTER, + AOUT_CHANIDX_CENTER, + AOUT_CHANIDX_LFE, + AOUT_CHANIDX_MAX +} vlc_chan_order_idx_t; + +static_assert(AOUT_CHANIDX_MAX == AOUT_CHAN_MAX, "channel count mismatch"); + +#define AOUT_CHAN_REMAP_INIT { \ + AOUT_CHANIDX_LEFT, \ + AOUT_CHANIDX_RIGHT, \ + AOUT_CHANIDX_MIDDLELEFT, \ + AOUT_CHANIDX_MIDDLERIGHT, \ + AOUT_CHANIDX_REARLEFT, \ + AOUT_CHANIDX_REARRIGHT, \ + AOUT_CHANIDX_REARCENTER, \ + AOUT_CHANIDX_CENTER, \ + AOUT_CHANIDX_LFE, \ +} + +/** + * It describes the audio channel order VLC expect. + */ +static const uint32_t pi_vlc_chan_order_wg4[] = +{ + AOUT_CHAN_LEFT, AOUT_CHAN_RIGHT, + AOUT_CHAN_MIDDLELEFT, AOUT_CHAN_MIDDLERIGHT, + AOUT_CHAN_REARLEFT, AOUT_CHAN_REARRIGHT, AOUT_CHAN_REARCENTER, + AOUT_CHAN_CENTER, AOUT_CHAN_LFE, 0 +}; + +#define AOUT_RESTART_FILTERS 0x1 +#define AOUT_RESTART_OUTPUT (AOUT_RESTART_FILTERS|0x2) +#define AOUT_RESTART_STEREOMODE (AOUT_RESTART_OUTPUT|0x4) + +/***************************************************************************** + * Prototypes + *****************************************************************************/ + +/** + * This function computes the reordering needed to go from pi_chan_order_in to + * pi_chan_order_out. + * If pi_chan_order_in or pi_chan_order_out is NULL, it will assume that vlc + * internal (WG4) order is requested. + */ +VLC_API unsigned aout_CheckChannelReorder( const uint32_t *, const uint32_t *, + uint32_t mask, uint8_t *table ); +VLC_API void aout_ChannelReorder(void *, size_t, uint8_t, const uint8_t *, vlc_fourcc_t); + +VLC_API void aout_Interleave(void *dst, const void *const *planes, + unsigned samples, unsigned channels, + vlc_fourcc_t fourcc); +VLC_API void aout_Deinterleave(void *dst, const void *src, unsigned samples, + unsigned channels, vlc_fourcc_t fourcc); + +/** + * This function will compute the extraction parameter into pi_selection to go + * from i_channels with their type given by pi_order_src[] into the order + * describe by pi_order_dst. + * It will also set : + * - *pi_channels as the number of channels that will be extracted which is + * lower (in case of non understood channels type) or equal to i_channels. + * - the layout of the channels (*pi_layout). + * + * It will return true if channel extraction is really needed, in which case + * aout_ChannelExtract must be used + * + * XXX It must be used when the source may have channel type not understood + * by VLC. In this case the channel type pi_order_src[] must be set to 0. + * XXX It must also be used if multiple channels have the same type. + */ +VLC_API bool aout_CheckChannelExtraction( int *pi_selection, uint32_t *pi_layout, int *pi_channels, const uint32_t pi_order_dst[AOUT_CHAN_MAX], const uint32_t *pi_order_src, int i_channels ); + +/** + * Do the actual channels extraction using the parameters created by + * aout_CheckChannelExtraction. + * + * XXX this function does not work in place (p_dst and p_src must not overlap). + * XXX Only 8, 16, 32, 64 bits per sample are supported. + */ +VLC_API void aout_ChannelExtract( void *p_dst, int i_dst_channels, const void *p_src, int i_src_channels, int i_sample_count, const int *pi_selection, int i_bits_per_sample ); + +/* */ +static inline unsigned aout_FormatNbChannels(const audio_sample_format_t *fmt) +{ + return popcount(fmt->i_physical_channels); +} + +VLC_API unsigned int aout_BitsPerSample( vlc_fourcc_t i_format ) VLC_USED; +VLC_API void aout_FormatPrepare( audio_sample_format_t * p_format ); +VLC_API void aout_FormatPrint(vlc_object_t *, const char *, + const audio_sample_format_t *); +#define aout_FormatPrint(o, t, f) aout_FormatPrint(VLC_OBJECT(o), t, f) +VLC_API const char * aout_FormatPrintChannels( const audio_sample_format_t * ) VLC_USED; + +#define AOUT_VOLUME_DEFAULT 256 +#define AOUT_VOLUME_MAX 512 + +VLC_API float aout_VolumeGet (audio_output_t *); +VLC_API int aout_VolumeSet (audio_output_t *, float); +VLC_API int aout_VolumeUpdate (audio_output_t *, int, float *); +VLC_API int aout_MuteGet (audio_output_t *); +VLC_API int aout_MuteSet (audio_output_t *, bool); +VLC_API char *aout_DeviceGet (audio_output_t *); +VLC_API int aout_DeviceSet (audio_output_t *, const char *); +VLC_API int aout_DevicesList (audio_output_t *, char ***, char ***); + +/** + * Report change of configured audio volume to the core and UI. + */ +static inline void aout_VolumeReport(audio_output_t *aout, float volume) +{ + aout->event.volume_report(aout, volume); +} + +/** + * Report change of muted flag to the core and UI. + */ +static inline void aout_MuteReport(audio_output_t *aout, bool mute) +{ + aout->event.mute_report(aout, mute); +} + +/** + * Report audio policy status. + * \param cork true to request a cork, false to undo any pending cork. + */ +static inline void aout_PolicyReport(audio_output_t *aout, bool cork) +{ + aout->event.policy_report(aout, cork); +} + +/** + * Report change of output device. + */ +static inline void aout_DeviceReport(audio_output_t *aout, const char *id) +{ + aout->event.device_report(aout, id); +} + +/** + * Report a device hot-plug event. + * @param id device ID + * @param name human-readable device name (NULL for hot unplug) + */ +static inline void aout_HotplugReport(audio_output_t *aout, + const char *id, const char *name) +{ + aout->event.hotplug_report(aout, id, name); +} + +/** + * Request a change of software audio amplification. + * \param gain linear amplitude gain (must be positive) + * \warning Values in excess 1.0 may cause overflow and distorsion. + */ +static inline int aout_GainRequest(audio_output_t *aout, float gain) +{ + return aout->event.gain_request(aout, gain); +} + +static inline void aout_RestartRequest(audio_output_t *aout, unsigned mode) +{ + aout->event.restart_request(aout, mode); +} + +/* Audio output filters */ + +typedef struct +{ + /** + * If the remap order differs from the WG4 order, a remap audio filter will + * be inserted to remap channels according to this array. + */ + int remap[AOUT_CHANIDX_MAX]; + /** + * If true, a filter will be inserted to add a headphones effect (like a + * binauralizer audio filter). + */ + bool headphones; +} aout_filters_cfg_t; + +#define AOUT_FILTERS_CFG_INIT (aout_filters_cfg_t) \ + { .remap = AOUT_CHAN_REMAP_INIT, \ + .headphones = false, \ + }; + +typedef struct aout_filters aout_filters_t; +typedef struct aout_request_vout aout_request_vout_t; + +VLC_API aout_filters_t *aout_FiltersNew(vlc_object_t *, + const audio_sample_format_t *, + const audio_sample_format_t *, + const aout_request_vout_t *, + const aout_filters_cfg_t *cfg) VLC_USED; +#define aout_FiltersNew(o,inf,outf,rv,remap) \ + aout_FiltersNew(VLC_OBJECT(o),inf,outf,rv,remap) +VLC_API void aout_FiltersDelete(vlc_object_t *, aout_filters_t *); +#define aout_FiltersDelete(o,f) \ + aout_FiltersDelete(VLC_OBJECT(o),f) +VLC_API bool aout_FiltersAdjustResampling(aout_filters_t *, int); +VLC_API block_t *aout_FiltersPlay(aout_filters_t *, block_t *, int rate); +VLC_API block_t *aout_FiltersDrain(aout_filters_t *); +VLC_API void aout_FiltersFlush(aout_filters_t *); +VLC_API void aout_FiltersChangeViewpoint(aout_filters_t *, const vlc_viewpoint_t *vp); + +VLC_API vout_thread_t * aout_filter_RequestVout( filter_t *, vout_thread_t *p_vout, const video_format_t *p_fmt ); + +/** @} */ + +#endif /* VLC_AOUT_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_aout_volume.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_aout_volume.h new file mode 100644 index 0000000..df85b8f --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_aout_volume.h @@ -0,0 +1,59 @@ +/***************************************************************************** + * vlc_aout_volume.h: audio volume module + ***************************************************************************** + * Copyright (C) 2002-2009 VLC authors and VideoLAN + * $Id$ + * + * Authors: Christophe Massiot + * Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_AOUT_MIXER_H +#define VLC_AOUT_MIXER_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup audio_volume Audio output volume + * \ingroup audio_output + * @{ + * \file + * This file defines functions, structures and macros for audio output mixer object + */ + +typedef struct audio_volume audio_volume_t; + +/** + * Audio volume + */ +struct audio_volume +{ + VLC_COMMON_MEMBERS + + vlc_fourcc_t format; /**< Audio samples format */ + void (*amplify)(audio_volume_t *, block_t *, float); /**< Amplifier */ +}; + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_arrays.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_arrays.h new file mode 100644 index 0000000..39b6995 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_arrays.h @@ -0,0 +1,627 @@ +/***************************************************************************** + * vlc_arrays.h : Arrays and data structures handling + ***************************************************************************** + * Copyright (C) 1999-2004 VLC authors and VideoLAN + * $Id$ + * + * Authors: Samuel Hocevar + * Clément Stenac + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_ARRAYS_H_ +#define VLC_ARRAYS_H_ + +/** + * \file + * This file defines functions, structures and macros for handling arrays in vlc + */ + +/* realloc() that never fails *if* downsizing */ +static inline void *realloc_down( void *ptr, size_t size ) +{ + void *ret = realloc( ptr, size ); + return ret ? ret : ptr; +} + +#define TAB_INIT( count, tab ) \ + do { \ + (count) = 0; \ + (tab) = NULL; \ + } while(0) + +#define TAB_CLEAN( count, tab ) \ + do { \ + free( tab ); \ + (count)= 0; \ + (tab)= NULL; \ + } while(0) + +#define TAB_APPEND_CAST( cast, count, tab, p ) \ + do { \ + if( (count) > 0 ) \ + (tab) = cast realloc( tab, sizeof( *(tab) ) * ( (count) + 1 ) ); \ + else \ + (tab) = cast malloc( sizeof( *(tab) ) ); \ + if( !(tab) ) abort(); \ + (tab)[count] = (p); \ + (count)++; \ + } while(0) + +#define TAB_APPEND( count, tab, p ) \ + TAB_APPEND_CAST( , count, tab, p ) + +#define TAB_FIND( count, tab, p, idx ) \ + do { \ + for( (idx) = 0; (idx) < (count); (idx)++ ) \ + if( (tab)[(idx)] == (p) ) \ + break; \ + if( (idx) >= (count) ) \ + (idx) = -1; \ + } while(0) + + +#define TAB_ERASE( count, tab, index ) \ + do { \ + if( (count) > 1 ) \ + memmove( (tab) + (index), \ + (tab) + (index) + 1, \ + ((count) - (index) - 1 ) * sizeof( *(tab) ) );\ + (count)--; \ + if( (count) == 0 ) \ + { \ + free( tab ); \ + (tab) = NULL; \ + } \ + } while(0) + +#define TAB_REMOVE( count, tab, p ) \ + do { \ + int i_index; \ + TAB_FIND( count, tab, p, i_index ); \ + if( i_index >= 0 ) \ + TAB_ERASE( count, tab, i_index ); \ + } while(0) + +#define TAB_INSERT_CAST( cast, count, tab, p, index ) do { \ + if( (count) > 0 ) \ + (tab) = cast realloc( tab, sizeof( *(tab) ) * ( (count) + 1 ) ); \ + else \ + (tab) = cast malloc( sizeof( *(tab) ) ); \ + if( !(tab) ) abort(); \ + if( (count) - (index) > 0 ) \ + memmove( (tab) + (index) + 1, \ + (tab) + (index), \ + ((count) - (index)) * sizeof( *(tab) ) );\ + (tab)[(index)] = (p); \ + (count)++; \ +} while(0) + +#define TAB_INSERT( count, tab, p, index ) \ + TAB_INSERT_CAST( , count, tab, p, index ) + +/** + * Binary search in a sorted array. The key must be comparable by < and > + * \param entries array of entries + * \param count number of entries + * \param elem key to check within an entry (like .id, or ->i_id) + * \param zetype type of the key + * \param key value of the key + * \param answer index of answer within the array. -1 if not found + */ +#define BSEARCH( entries, count, elem, zetype, key, answer ) \ + do { \ + int low = 0, high = count - 1; \ + answer = -1; \ + while( low <= high ) {\ + int mid = ((unsigned int)low + (unsigned int)high) >> 1;\ + zetype mid_val = entries[mid] elem;\ + if( mid_val < key ) \ + low = mid + 1; \ + else if ( mid_val > key ) \ + high = mid -1; \ + else \ + { \ + answer = mid; break; \ + }\ + } \ + } while(0) + + +/************************************************************************ + * Dynamic arrays with progressive allocation + ************************************************************************/ + +/* Internal functions */ +#define _ARRAY_ALLOC(array, newsize) { \ + (array).i_alloc = newsize; \ + (array).p_elems = realloc( (array).p_elems, (array).i_alloc * \ + sizeof(*(array).p_elems) ); \ + if( !(array).p_elems ) abort(); \ +} + +#define _ARRAY_GROW1(array) { \ + if( (array).i_alloc < 10 ) \ + _ARRAY_ALLOC(array, 10 ) \ + else if( (array).i_alloc == (array).i_size ) \ + _ARRAY_ALLOC(array, (int)((array).i_alloc * 1.5) ) \ +} + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + +/* API */ +#define DECL_ARRAY(type) struct { \ + int i_alloc; \ + int i_size; \ + type *p_elems; \ +} + +#define TYPEDEF_ARRAY(type, name) typedef DECL_ARRAY(type) name; + +#define ARRAY_INIT(array) \ + do { \ + (array).i_alloc = 0; \ + (array).i_size = 0; \ + (array).p_elems = NULL; \ + } while(0) + +#define ARRAY_RESET(array) \ + do { \ + (array).i_alloc = 0; \ + (array).i_size = 0; \ + free( (array).p_elems ); (array).p_elems = NULL; \ + } while(0) + +#define ARRAY_APPEND(array, elem) \ + do { \ + _ARRAY_GROW1(array); \ + (array).p_elems[(array).i_size] = elem; \ + (array).i_size++; \ + } while(0) + +#define ARRAY_INSERT(array,elem,pos) \ + do { \ + _ARRAY_GROW1(array); \ + if( (array).i_size - pos ) { \ + memmove( (array).p_elems + pos + 1, (array).p_elems + pos, \ + ((array).i_size-pos) * sizeof(*(array).p_elems) ); \ + } \ + (array).p_elems[pos] = elem; \ + (array).i_size++; \ + } while(0) + +#define _ARRAY_SHRINK(array) { \ + if( (array).i_size > 10 && (array).i_size < (int)((array).i_alloc / 1.5) ) { \ + _ARRAY_ALLOC(array, (array).i_size + 5); \ + } \ +} + +#define ARRAY_REMOVE(array,pos) \ + do { \ + if( (array).i_size - (pos) - 1 ) \ + { \ + memmove( (array).p_elems + pos, (array).p_elems + pos + 1, \ + ( (array).i_size - pos - 1 ) *sizeof(*(array).p_elems) ); \ + } \ + (array).i_size--; \ + _ARRAY_SHRINK(array); \ + } while(0) + +#define ARRAY_VAL(array, pos) array.p_elems[pos] + +#define ARRAY_BSEARCH(array, elem, zetype, key, answer) \ + BSEARCH( (array).p_elems, (array).i_size, elem, zetype, key, answer) + +#define FOREACH_ARRAY( item, array ) { \ + int fe_idx; \ + for( fe_idx = 0 ; fe_idx < (array).i_size ; fe_idx++ ) \ + { \ + item = (array).p_elems[fe_idx]; + +#define FOREACH_END() } } + + +/************************************************************************ + * Dynamic arrays with progressive allocation (Preferred API) + ************************************************************************/ +typedef struct vlc_array_t +{ + size_t i_count; + void ** pp_elems; +} vlc_array_t; + +static inline void vlc_array_init( vlc_array_t * p_array ) +{ + p_array->i_count = 0; + p_array->pp_elems = NULL; +} + +static inline void vlc_array_clear( vlc_array_t * p_array ) +{ + free( p_array->pp_elems ); + vlc_array_init( p_array ); +} + +/* Read */ +static inline size_t vlc_array_count( vlc_array_t * p_array ) +{ + return p_array->i_count; +} + +#ifndef __cplusplus +# define vlc_array_item_at_index(ar, idx) \ + _Generic((ar), \ + const vlc_array_t *: ((ar)->pp_elems[idx]), \ + vlc_array_t *: ((ar)->pp_elems[idx])) +#else +static inline void *vlc_array_item_at_index( vlc_array_t *ar, size_t idx ) +{ + return ar->pp_elems[idx]; +} + +static inline const void *vlc_array_item_at_index( const vlc_array_t *ar, + size_t idx ) +{ + return ar->pp_elems[idx]; +} +#endif + +static inline ssize_t vlc_array_index_of_item( const vlc_array_t *ar, + const void *elem ) +{ + for( size_t i = 0; i < ar->i_count; i++ ) + { + if( ar->pp_elems[i] == elem ) + return i; + } + return -1; +} + +/* Write */ +static inline int vlc_array_insert( vlc_array_t *ar, void *elem, int idx ) +{ + void **pp = (void **)realloc( ar->pp_elems, + sizeof( void * ) * (ar->i_count + 1) ); + if( unlikely(pp == NULL) ) + return -1; + + size_t tail = ar->i_count - idx; + if( tail > 0 ) + memmove( pp + idx + 1, pp + idx, sizeof( void * ) * tail ); + + pp[idx] = elem; + ar->i_count++; + ar->pp_elems = pp; + return 0; +} + +static inline void vlc_array_insert_or_abort( vlc_array_t *ar, void *elem, int idx ) +{ + if( vlc_array_insert( ar, elem, idx ) ) + abort(); +} + +static inline int vlc_array_append( vlc_array_t *ar, void *elem ) +{ + void **pp = (void **)realloc( ar->pp_elems, + sizeof( void * ) * (ar->i_count + 1) ); + if( unlikely(pp == NULL) ) + return -1; + + pp[ar->i_count++] = elem; + ar->pp_elems = pp; + return 0; +} + +static inline void vlc_array_append_or_abort( vlc_array_t *ar, void *elem ) +{ + if( vlc_array_append( ar, elem ) != 0 ) + abort(); +} + +static inline void vlc_array_remove( vlc_array_t *ar, size_t idx ) +{ + void **pp = ar->pp_elems; + size_t tail = ar->i_count - idx - 1; + + if( tail > 0 ) + memmove( pp + idx, pp + idx + 1, sizeof( void * ) * tail ); + + ar->i_count--; + + if( ar->i_count > 0 ) + { + pp = (void **)realloc( pp, sizeof( void * ) * ar->i_count ); + if( likely(pp != NULL) ) + ar->pp_elems = pp; + } + else + { + free( pp ); + ar->pp_elems = NULL; + } +} + + +/************************************************************************ + * Dictionaries + ************************************************************************/ + +/* This function is not intended to be crypto-secure, we only want it to be + * fast and not suck too much. This one is pretty fast and did 0 collisions + * in wenglish's dictionary. + */ +static inline uint64_t DictHash( const char *psz_string, int hashsize ) +{ + uint64_t i_hash = 0; + if( psz_string ) + { + while( *psz_string ) + { + i_hash += *psz_string++; + i_hash += i_hash << 10; + i_hash ^= i_hash >> 8; + } + } + return i_hash % hashsize; +} + +typedef struct vlc_dictionary_entry_t +{ + char * psz_key; + void * p_value; + struct vlc_dictionary_entry_t * p_next; +} vlc_dictionary_entry_t; + +typedef struct vlc_dictionary_t +{ + int i_size; + vlc_dictionary_entry_t ** p_entries; +} vlc_dictionary_t; + +static void * const kVLCDictionaryNotFound = NULL; + +static inline void vlc_dictionary_init( vlc_dictionary_t * p_dict, int i_size ) +{ + p_dict->p_entries = NULL; + + if( i_size > 0 ) + { + p_dict->p_entries = (vlc_dictionary_entry_t **)calloc( i_size, sizeof(*p_dict->p_entries) ); + if( !p_dict->p_entries ) + i_size = 0; + } + p_dict->i_size = i_size; +} + +static inline void vlc_dictionary_clear( vlc_dictionary_t * p_dict, + void ( * pf_free )( void * p_data, void * p_obj ), + void * p_obj ) +{ + if( p_dict->p_entries ) + { + for( int i = 0; i < p_dict->i_size; i++ ) + { + vlc_dictionary_entry_t * p_current, * p_next; + p_current = p_dict->p_entries[i]; + while( p_current ) + { + p_next = p_current->p_next; + if( pf_free != NULL ) + ( * pf_free )( p_current->p_value, p_obj ); + free( p_current->psz_key ); + free( p_current ); + p_current = p_next; + } + } + free( p_dict->p_entries ); + p_dict->p_entries = NULL; + } + p_dict->i_size = 0; +} + +static inline int +vlc_dictionary_has_key( const vlc_dictionary_t * p_dict, const char * psz_key ) +{ + if( !p_dict->p_entries ) + return 0; + + int i_pos = DictHash( psz_key, p_dict->i_size ); + const vlc_dictionary_entry_t * p_entry = p_dict->p_entries[i_pos]; + for( ; p_entry != NULL; p_entry = p_entry->p_next ) + { + if( !strcmp( psz_key, p_entry->psz_key ) ) + break; + } + return p_entry != NULL; +} + +static inline void * +vlc_dictionary_value_for_key( const vlc_dictionary_t * p_dict, const char * psz_key ) +{ + if( !p_dict->p_entries ) + return kVLCDictionaryNotFound; + + int i_pos = DictHash( psz_key, p_dict->i_size ); + vlc_dictionary_entry_t * p_entry = p_dict->p_entries[i_pos]; + + if( !p_entry ) + return kVLCDictionaryNotFound; + + /* Make sure we return the right item. (Hash collision) */ + do { + if( !strcmp( psz_key, p_entry->psz_key ) ) + return p_entry->p_value; + p_entry = p_entry->p_next; + } while( p_entry ); + + return kVLCDictionaryNotFound; +} + +static inline int +vlc_dictionary_keys_count( const vlc_dictionary_t * p_dict ) +{ + vlc_dictionary_entry_t * p_entry; + int i, count = 0; + + if( !p_dict->p_entries ) + return 0; + + for( i = 0; i < p_dict->i_size; i++ ) + { + for( p_entry = p_dict->p_entries[i]; p_entry; p_entry = p_entry->p_next ) count++; + } + return count; +} + +static inline bool +vlc_dictionary_is_empty( const vlc_dictionary_t * p_dict ) +{ + if( p_dict->p_entries ) + for( int i = 0; i < p_dict->i_size; i++ ) + if( p_dict->p_entries[i] ) + return false; + return true; +} + +static inline char ** +vlc_dictionary_all_keys( const vlc_dictionary_t * p_dict ) +{ + vlc_dictionary_entry_t * p_entry; + char ** ppsz_ret; + int i, count = vlc_dictionary_keys_count( p_dict ); + + ppsz_ret = (char**)malloc(sizeof(char *) * (count + 1)); + if( unlikely(!ppsz_ret) ) + return NULL; + + count = 0; + for( i = 0; i < p_dict->i_size; i++ ) + { + for( p_entry = p_dict->p_entries[i]; p_entry; p_entry = p_entry->p_next ) + ppsz_ret[count++] = strdup( p_entry->psz_key ); + } + ppsz_ret[count] = NULL; + return ppsz_ret; +} + +static inline void +vlc_dictionary_insert_impl_( vlc_dictionary_t * p_dict, const char * psz_key, + void * p_value, bool rebuild ) +{ + if( !p_dict->p_entries ) + vlc_dictionary_init( p_dict, 1 ); + + int i_pos = DictHash( psz_key, p_dict->i_size ); + vlc_dictionary_entry_t * p_entry; + + p_entry = (vlc_dictionary_entry_t *)malloc(sizeof(*p_entry)); + p_entry->psz_key = strdup( psz_key ); + p_entry->p_value = p_value; + p_entry->p_next = p_dict->p_entries[i_pos]; + p_dict->p_entries[i_pos] = p_entry; + if( rebuild ) + { + /* Count how many items there was */ + int count; + for( count = 1; p_entry->p_next; count++ ) + p_entry = p_entry->p_next; + if( count > 3 ) /* XXX: this need tuning */ + { + /* Here it starts to be not good, rebuild a bigger dictionary */ + struct vlc_dictionary_t new_dict; + int i_new_size = ( (p_dict->i_size+2) * 3) / 2; /* XXX: this need tuning */ + int i; + vlc_dictionary_init( &new_dict, i_new_size ); + for( i = 0; i < p_dict->i_size; i++ ) + { + p_entry = p_dict->p_entries[i]; + while( p_entry ) + { + vlc_dictionary_insert_impl_( &new_dict, p_entry->psz_key, + p_entry->p_value, + false /* To avoid multiple rebuild loop */); + p_entry = p_entry->p_next; + } + } + + vlc_dictionary_clear( p_dict, NULL, NULL ); + p_dict->i_size = new_dict.i_size; + p_dict->p_entries = new_dict.p_entries; + } + } +} + +static inline void +vlc_dictionary_insert( vlc_dictionary_t * p_dict, const char * psz_key, void * p_value ) +{ + vlc_dictionary_insert_impl_( p_dict, psz_key, p_value, true ); +} + +static inline void +vlc_dictionary_remove_value_for_key( const vlc_dictionary_t * p_dict, const char * psz_key, + void ( * pf_free )( void * p_data, void * p_obj ), + void * p_obj ) +{ + if( !p_dict->p_entries ) + return; + + int i_pos = DictHash( psz_key, p_dict->i_size ); + vlc_dictionary_entry_t * p_entry = p_dict->p_entries[i_pos]; + vlc_dictionary_entry_t * p_prev; + + if( !p_entry ) + return; /* Not found, nothing to do */ + + /* Hash collision */ + p_prev = NULL; + do { + if( !strcmp( psz_key, p_entry->psz_key ) ) + { + if( pf_free != NULL ) + ( * pf_free )( p_entry->p_value, p_obj ); + if( !p_prev ) + p_dict->p_entries[i_pos] = p_entry->p_next; + else + p_prev->p_next = p_entry->p_next; + free( p_entry->psz_key ); + free( p_entry ); + return; + } + p_prev = p_entry; + p_entry = p_entry->p_next; + } while( p_entry ); + + /* No key was found */ +} + +#ifdef __cplusplus +// C++ helpers +template +void vlc_delete_all( T &container ) +{ + typename T::iterator it = container.begin(); + while ( it != container.end() ) + { + delete *it; + ++it; + } + container.clear(); +} + +#endif + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_atomic.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_atomic.h new file mode 100644 index 0000000..31d1454 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_atomic.h @@ -0,0 +1,224 @@ +/***************************************************************************** + * vlc_atomic.h: + ***************************************************************************** + * Copyright (C) 2010 Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_ATOMIC_H +# define VLC_ATOMIC_H + +/** + * \file + * Atomic operations do not require locking, but they are not very powerful. + */ + +/* Clang older versions support atomics but lacks the stdatomic.h header */ +#if defined(__clang__) +# if !defined(__has_include) || !__has_include() +# define __STDC_NO_ATOMICS__ 1 +# endif +#endif + +# ifndef __cplusplus +# if !defined (__STDC_NO_ATOMICS__) +/*** Native C11 atomics ***/ +# include + +# else +/*** Intel/GCC atomics ***/ + +# define ATOMIC_FLAG_INIT false + +# define ATOMIC_VAR_INIT(value) (value) + +# define atomic_init(obj, value) \ + do { *(obj) = (value); } while(0) + +# define kill_dependency(y) \ + ((void)0) + +# define atomic_thread_fence(order) \ + __sync_synchronize() + +# define atomic_signal_fence(order) \ + ((void)0) + +# define atomic_is_lock_free(obj) \ + false + +typedef bool atomic_flag; +typedef bool atomic_bool; +typedef char atomic_char; +typedef signed char atomic_schar; +typedef unsigned char atomic_uchar; +typedef short atomic_short; +typedef unsigned short atomic_ushort; +typedef int atomic_int; +typedef unsigned int atomic_uint; +typedef long atomic_long; +typedef unsigned long atomic_ulong; +typedef long long atomic_llong; +typedef unsigned long long atomic_ullong; +//typedef char16_t atomic_char16_t; +//typedef char32_t atomic_char32_t; +typedef wchar_t atomic_wchar_t; +typedef int_least8_t atomic_int_least8_t; +typedef uint_least8_t atomic_uint_least8_t; +typedef int_least16_t atomic_int_least16_t; +typedef uint_least16_t atomic_uint_least16_t; +typedef int_least32_t atomic_int_least32_t; +typedef uint_least32_t atomic_uint_least32_t; +typedef int_least64_t atomic_int_least64_t; +typedef uint_least64_t atomic_uint_least64_t; +typedef int_fast8_t atomic_int_fast8_t; +typedef uint_fast8_t atomic_uint_fast8_t; +typedef int_fast16_t atomic_int_fast16_t; +typedef uint_fast16_t atomic_uint_fast16_t; +typedef int_fast32_t atomic_int_fast32_t; +typedef uint_fast32_t atomic_uint_fast32_t; +typedef int_fast64_t atomic_int_fast64_t; +typedef uint_fast64_t atomic_uint_fast64_t; +typedef intptr_t atomic_intptr_t; +typedef uintptr_t atomic_uintptr_t; +typedef size_t atomic_size_t; +typedef ptrdiff_t atomic_ptrdiff_t; +typedef intmax_t atomic_intmax_t; +typedef uintmax_t atomic_uintmax_t; + +# define atomic_store(object,desired) \ + do { \ + *(object) = (desired); \ + __sync_synchronize(); \ + } while (0) + +# define atomic_store_explicit(object,desired,order) \ + atomic_store(object,desired) + +# define atomic_load(object) \ + (__sync_synchronize(), *(object)) + +# define atomic_load_explicit(object,order) \ + atomic_load(object) + +# define atomic_exchange(object,desired) \ +({ \ + typeof (object) _obj = (object); \ + typeof (*object) _old; \ + do \ + _old = atomic_load(_obj); \ + while (!__sync_bool_compare_and_swap(_obj, _old, (desired))); \ + _old; \ +}) + +# define atomic_exchange_explicit(object,desired,order) \ + atomic_exchange(object,desired) + +# define atomic_compare_exchange(object,expected,desired) \ +({ \ + typeof (object) _exp = (expected); \ + typeof (*object) _old = *_exp; \ + *_exp = __sync_val_compare_and_swap((object), _old, (desired)); \ + *_exp == _old; \ +}) + +# define atomic_compare_exchange_strong(object,expected,desired) \ + atomic_compare_exchange(object, expected, desired) + +# define atomic_compare_exchange_strong_explicit(object,expected,desired,order,order_different) \ + atomic_compare_exchange_strong(object, expected, desired) + +# define atomic_compare_exchange_weak(object,expected,desired) \ + atomic_compare_exchange(object, expected, desired) + +# define atomic_compare_exchange_weak_explicit(object,expected,desired,order_equal,order_different) \ + atomic_compare_exchange_weak(object, expected, desired) + +# define atomic_fetch_add(object,operand) \ + __sync_fetch_and_add(object, operand) + +# define atomic_fetch_add_explicit(object,operand,order) \ + atomic_fetch_add(object,operand) + +# define atomic_fetch_sub(object,operand) \ + __sync_fetch_and_sub(object, operand) + +# define atomic_fetch_sub_explicit(object,operand,order) \ + atomic_fetch_sub(object,operand) + +# define atomic_fetch_or(object,operand) \ + __sync_fetch_and_or(object, operand) + +# define atomic_fetch_or_explicit(object,operand,order) \ + atomic_fetch_or(object,operand) + +# define atomic_fetch_xor(object,operand) \ + __sync_fetch_and_sub(object, operand) + +# define atomic_fetch_xor_explicit(object,operand,order) \ + atomic_fetch_sub(object,operand) + +# define atomic_fetch_and(object,operand) \ + __sync_fetch_and_and(object, operand) + +# define atomic_fetch_and_explicit(object,operand,order) \ + atomic_fetch_and(object,operand) + +# define atomic_flag_test_and_set(object) \ + atomic_exchange(object, true) + +# define atomic_flag_test_and_set_explicit(object,order) \ + atomic_flag_test_and_set(object) + +# define atomic_flag_clear(object) \ + atomic_store(object, false) + +# define atomic_flag_clear_explicit(object,order) \ + atomic_flag_clear(object) + +# endif /* !C11 */ + +typedef atomic_uint_least32_t vlc_atomic_float; + +static inline void vlc_atomic_init_float(vlc_atomic_float *var, float f) +{ + union { float f; uint32_t i; } u; + u.f = f; + atomic_init(var, u.i); +} + +/** Helper to retrieve a single precision from an atom. */ +static inline float vlc_atomic_load_float(vlc_atomic_float *atom) +{ + union { float f; uint32_t i; } u; + u.i = atomic_load(atom); + return u.f; +} + +/** Helper to store a single precision into an atom. */ +static inline void vlc_atomic_store_float(vlc_atomic_float *atom, float f) +{ + union { float f; uint32_t i; } u; + u.f = f; + atomic_store(atom, u.i); +} + +# else /* C++ */ +/*** Native C++11 atomics ***/ +# include +# endif /* C++ */ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_avcodec.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_avcodec.h new file mode 100644 index 0000000..664633a --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_avcodec.h @@ -0,0 +1,34 @@ +/***************************************************************************** + * vlc_avcodec.h: VLC thread support for libavcodec + ***************************************************************************** + * Copyright (C) 2009-2010 Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_AVCODEC_H +# define VLC_AVCODEC_H 1 + +static inline void vlc_avcodec_lock (void) +{ + vlc_global_lock (VLC_AVCODEC_MUTEX); +} + +static inline void vlc_avcodec_unlock (void) +{ + vlc_global_unlock (VLC_AVCODEC_MUTEX); +} + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_bits.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_bits.h new file mode 100644 index 0000000..395a789 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_bits.h @@ -0,0 +1,269 @@ +/***************************************************************************** + * vlc_bits.h : Bit handling helpers + ***************************************************************************** + * Copyright (C) 2001, 2002, 2003, 2006, 2015 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * Gildas Bazin + * Rafaël Carré + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ +#ifndef VLC_BITS_H +#define VLC_BITS_H 1 + +#include + +/** + * \file + * This file defines functions, structures for handling streams of bits in vlc + */ + +typedef struct bs_s +{ + uint8_t *p_start; + uint8_t *p; + uint8_t *p_end; + + ssize_t i_left; /* i_count number of available bits */ + bool b_read_only; + + /* forward read modifier (p_start, p_end, p_fwpriv, count) */ + uint8_t *(*pf_forward)(uint8_t *, uint8_t *, void *, size_t); + void *p_fwpriv; +} bs_t; + +static inline void bs_write_init( bs_t *s, void *p_data, size_t i_data ) +{ + s->p_start = (uint8_t *)p_data; + s->p = s->p_start; + s->p_end = s->p_start + i_data; + s->i_left = 8; + s->b_read_only = false; + s->p_fwpriv = NULL; + s->pf_forward = NULL; +} + +static inline void bs_init( bs_t *s, const void *p_data, size_t i_data ) +{ + bs_write_init( s, (void*) p_data, i_data ); + s->b_read_only = true; +} + +static inline int bs_pos( const bs_t *s ) +{ + return( 8 * ( s->p - s->p_start ) + 8 - s->i_left ); +} + +static inline int bs_remain( const bs_t *s ) +{ + if( s->p >= s->p_end ) + return 0; + else + return( 8 * ( s->p_end - s->p ) - 8 + s->i_left ); +} + +static inline int bs_eof( const bs_t *s ) +{ + return( s->p >= s->p_end ? 1: 0 ); +} + +#define bs_forward( s, i ) \ + s->p = s->pf_forward ? s->pf_forward( s->p, s->p_end, s->p_fwpriv, i ) : s->p + i + +static inline uint32_t bs_read( bs_t *s, int i_count ) +{ + static const uint32_t i_mask[33] = + { 0x00, + 0x01, 0x03, 0x07, 0x0f, + 0x1f, 0x3f, 0x7f, 0xff, + 0x1ff, 0x3ff, 0x7ff, 0xfff, + 0x1fff, 0x3fff, 0x7fff, 0xffff, + 0x1ffff, 0x3ffff, 0x7ffff, 0xfffff, + 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff, + 0x1ffffff, 0x3ffffff, 0x7ffffff, 0xfffffff, + 0x1fffffff,0x3fffffff,0x7fffffff,0xffffffff}; + int i_shr, i_drop = 0; + uint32_t i_result = 0; + + if( i_count > 32 ) + { + i_drop = i_count - 32; + i_count = 32; + } + + while( i_count > 0 ) + { + if( s->p >= s->p_end ) + { + break; + } + + if( ( i_shr = s->i_left - i_count ) >= 0 ) + { + /* more in the buffer than requested */ + i_result |= ( *s->p >> i_shr )&i_mask[i_count]; + s->i_left -= i_count; + if( s->i_left == 0 ) + { + bs_forward( s, 1 ); + s->i_left = 8; + } + break; + } + else + { + /* less in the buffer than requested */ + if( -i_shr == 32 ) + i_result = 0; + else + i_result |= (*s->p&i_mask[s->i_left]) << -i_shr; + i_count -= s->i_left; + bs_forward( s, 1); + s->i_left = 8; + } + } + + if( i_drop ) + bs_forward( s, i_drop ); + + return( i_result ); +} + +static inline uint32_t bs_read1( bs_t *s ) +{ + if( s->p < s->p_end ) + { + unsigned int i_result; + + s->i_left--; + i_result = ( *s->p >> s->i_left )&0x01; + if( s->i_left == 0 ) + { + bs_forward( s, 1 ); + s->i_left = 8; + } + return i_result; + } + + return 0; +} + +static inline uint32_t bs_show( bs_t *s, int i_count ) +{ + bs_t s_tmp = *s; + return bs_read( &s_tmp, i_count ); +} + +static inline void bs_skip( bs_t *s, ssize_t i_count ) +{ + s->i_left -= i_count; + + if( s->i_left <= 0 ) + { + const size_t i_bytes = 1 + s->i_left / -8; + bs_forward( s, i_bytes ); + if( i_bytes * 8 < i_bytes /* ofw */ ) + s->i_left = i_bytes; + else + s->i_left += 8 * i_bytes; + } +} + +static inline void bs_write( bs_t *s, int i_count, uint32_t i_bits ) +{ + if( s->b_read_only ) + return; + + while( i_count > 0 ) + { + if( s->p >= s->p_end ) + { + break; + } + + i_count--; + + if( ( i_bits >> i_count )&0x01 ) + { + *s->p |= 1 << ( s->i_left - 1 ); + } + else + { + *s->p &= ~( 1 << ( s->i_left - 1 ) ); + } + s->i_left--; + if( s->i_left == 0 ) + { + bs_forward( s, 1 ); + s->i_left = 8; + } + } +} + +static inline bool bs_aligned( bs_t *s ) +{ + return s->i_left % 8 == 0; +} + +static inline void bs_align( bs_t *s ) +{ + if( s->i_left != 8 ) + { + s->i_left = 8; + s->p++; + } +} + +static inline void bs_align_0( bs_t *s ) +{ + if( s->i_left != 8 ) + { + bs_write( s, s->i_left, 0 ); + } +} + +static inline void bs_align_1( bs_t *s ) +{ + while( !s->b_read_only && s->i_left != 8 ) + { + bs_write( s, 1, 1 ); + } +} + +/* Read unsigned Exp-Golomb code */ +static inline uint_fast32_t bs_read_ue( bs_t * bs ) +{ + unsigned i = 0; + + while( bs_read1( bs ) == 0 && bs->p < bs->p_end && i < 31 ) + i++; + + return (1U << i) - 1 + bs_read( bs, i ); +} + +/* Read signed Exp-Golomb code */ +static inline int_fast32_t bs_read_se( bs_t *s ) +{ + uint_fast32_t val = bs_read_ue( s ); + + return (val & 0x01) ? (int_fast32_t)((val + 1) / 2) + : -(int_fast32_t)(val / 2); +} + +#undef bs_forward + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_block.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_block.h new file mode 100644 index 0000000..c422c50 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_block.h @@ -0,0 +1,626 @@ +/***************************************************************************** + * vlc_block.h: Data blocks management functions + ***************************************************************************** + * Copyright (C) 2003 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_BLOCK_H +#define VLC_BLOCK_H 1 + +/** + * \defgroup block Data blocks + * \ingroup input + * + * Blocks of binary data. + * + * @ref block_t is a generic structure to represent a binary blob within VLC. + * The primary goal of the structure is to avoid memory copying as data is + * passed around. It is notably used between the \ref demux, the packetizer + * (if present) and the \ref decoder, and for audio, between the \ref decoder, + * the audio filters, and the \ref audio_output. + * + * @{ + * \file + * Data block definition and functions + */ + +#include /* for ssize_t */ + +/**************************************************************************** + * block: + **************************************************************************** + * - i_flags may not always be set (ie could be 0, even for a key frame + * it depends where you receive the buffer (before/after a packetizer + * and the demux/packetizer implementations. + * - i_dts/i_pts could be VLC_TICK_INVALID, it means no pts/dts + * - i_length: length in microseond of the packet, can be null except in the + * sout where it is mandatory. + * + * - i_buffer number of valid data pointed by p_buffer + * you can freely decrease it but never increase it yourself + * (use block_Realloc) + * - p_buffer: pointer over datas. You should never overwrite it, you can + * only incremment it to skip datas, in others cases use block_Realloc + * (don't duplicate yourself in a bigger buffer, block_Realloc is + * optimised for preheader/postdatas increase) + ****************************************************************************/ + +/** The content doesn't follow the last block, possible some blocks in between + * have been lost */ +#define BLOCK_FLAG_DISCONTINUITY 0x0001 +/** Intra frame */ +#define BLOCK_FLAG_TYPE_I 0x0002 +/** Inter frame with backward reference only */ +#define BLOCK_FLAG_TYPE_P 0x0004 +/** Inter frame with backward and forward reference */ +#define BLOCK_FLAG_TYPE_B 0x0008 +/** For inter frame when you don't know the real type */ +#define BLOCK_FLAG_TYPE_PB 0x0010 +/** Warn that this block is a header one */ +#define BLOCK_FLAG_HEADER 0x0020 +/** This block contains the last part of a sequence */ +#define BLOCK_FLAG_END_OF_SEQUENCE 0x0040 +/** This block contains a clock reference */ +#define BLOCK_FLAG_CLOCK 0x0080 +/** This block is scrambled */ +#define BLOCK_FLAG_SCRAMBLED 0x0100 +/** This block has to be decoded but not be displayed */ +#define BLOCK_FLAG_PREROLL 0x0200 +/** This block is corrupted and/or there is data loss */ +#define BLOCK_FLAG_CORRUPTED 0x0400 +/** This block contains an interlaced picture with top field stored first */ +#define BLOCK_FLAG_TOP_FIELD_FIRST 0x0800 +/** This block contains an interlaced picture with bottom field stored first */ +#define BLOCK_FLAG_BOTTOM_FIELD_FIRST 0x1000 +/** This block contains a single field from interlaced picture. */ +#define BLOCK_FLAG_SINGLE_FIELD 0x2000 + +/** This block contains an interlaced picture */ +#define BLOCK_FLAG_INTERLACED_MASK \ + (BLOCK_FLAG_TOP_FIELD_FIRST|BLOCK_FLAG_BOTTOM_FIELD_FIRST|BLOCK_FLAG_SINGLE_FIELD) + +#define BLOCK_FLAG_TYPE_MASK \ + (BLOCK_FLAG_TYPE_I|BLOCK_FLAG_TYPE_P|BLOCK_FLAG_TYPE_B|BLOCK_FLAG_TYPE_PB) + +/* These are for input core private usage only */ +#define BLOCK_FLAG_CORE_PRIVATE_MASK 0x00ff0000 +#define BLOCK_FLAG_CORE_PRIVATE_SHIFT 16 + +/* These are for module private usage only */ +#define BLOCK_FLAG_PRIVATE_MASK 0xff000000 +#define BLOCK_FLAG_PRIVATE_SHIFT 24 + +typedef void (*block_free_t) (block_t *); + +struct block_t +{ + block_t *p_next; + + uint8_t *p_buffer; /**< Payload start */ + size_t i_buffer; /**< Payload length */ + uint8_t *p_start; /**< Buffer start */ + size_t i_size; /**< Buffer total size */ + + uint32_t i_flags; + unsigned i_nb_samples; /* Used for audio */ + + vlc_tick_t i_pts; + vlc_tick_t i_dts; + vlc_tick_t i_length; + + /* Rudimentary support for overloading block (de)allocation. */ + block_free_t pf_release; +}; + +VLC_API void block_Init( block_t *, void *, size_t ); + +/** + * Allocates a block. + * + * Creates a new block with the requested size. + * The block must be released with block_Release(). + * + * @param size size in bytes (possibly zero) + * @return the created block, or NULL on memory error. + */ +VLC_API block_t *block_Alloc(size_t size) VLC_USED VLC_MALLOC; + +VLC_API block_t *block_TryRealloc(block_t *, ssize_t pre, size_t body) VLC_USED; + +/** + * Reallocates a block. + * + * This function expands, shrinks or moves a data block. + * In many cases, this function can return without any memory allocation by + * reusing spare buffer space. Otherwise, a new block is created and data is + * copied. + * + * @param pre count of bytes to prepend if positive, + * count of leading bytes to discard if negative + * @param body new bytes size of the block + * + * @return the reallocated block on succes, NULL on error. + * + * @note Skipping leading bytes can be achieved directly by subtracting from + * block_t.i_buffer and adding block_t.p_buffer. + * @note Discard trailing bytes can be achieved directly by subtracting from + * block_t.i_buffer. + * @note On error, the block is discarded. + * To avoid that, use block_TryRealloc() instead. + */ +VLC_API block_t *block_Realloc(block_t *, ssize_t pre, size_t body) VLC_USED; + +/** + * Releases a block. + * + * This function works for any @ref block_t block, regardless of the way it was + * allocated. + * + * @note + * If the block is in a chain, this function does not release any + * subsequent block in the chain. Use block_ChainRelease() for that purpose. + * + * @param block block to release (cannot be NULL) + */ +static inline void block_Release(block_t *block) +{ + block->pf_release(block); +} + +static inline void block_CopyProperties( block_t *dst, block_t *src ) +{ + dst->i_flags = src->i_flags; + dst->i_nb_samples = src->i_nb_samples; + dst->i_dts = src->i_dts; + dst->i_pts = src->i_pts; + dst->i_length = src->i_length; +} + +/** + * Duplicates a block. + * + * Creates a writeable duplicate of a block. + * + * @return the duplicate on success, NULL on error. + */ +VLC_USED +static inline block_t *block_Duplicate( block_t *p_block ) +{ + block_t *p_dup = block_Alloc( p_block->i_buffer ); + if( p_dup == NULL ) + return NULL; + + block_CopyProperties( p_dup, p_block ); + memcpy( p_dup->p_buffer, p_block->p_buffer, p_block->i_buffer ); + + return p_dup; +} + +/** + * Wraps heap in a block. + * + * Creates a @ref block_t out of an existing heap allocation. + * This is provided by LibVLC so that manually heap-allocated blocks can safely + * be deallocated even after the origin plugin has been unloaded from memory. + * + * When block_Release() is called, VLC will free() the specified pointer. + * + * @param addr base address of the heap allocation (will be free()'d) + * @param length bytes length of the heap allocation + * @return NULL in case of error (ptr free()'d in that case), or a valid + * block_t pointer. + */ +VLC_API block_t *block_heap_Alloc(void *, size_t) VLC_USED VLC_MALLOC; + +/** + * Wraps a memory mapping in a block + * + * Creates a @ref block_t from a virtual address memory mapping (mmap). + * This is provided by LibVLC so that mmap blocks can safely be deallocated + * even after the allocating plugin has been unloaded from memory. + * + * @param addr base address of the mapping (as returned by mmap) + * @param length length (bytes) of the mapping (as passed to mmap) + * @return NULL if addr is MAP_FAILED, or an error occurred (in the later + * case, munmap(addr, length) is invoked before returning). + */ +VLC_API block_t *block_mmap_Alloc(void *addr, size_t length) VLC_USED VLC_MALLOC; + +/** + * Wraps a System V memory segment in a block + * + * Creates a @ref block_t from a System V shared memory segment (shmget()). + * This is provided by LibVLC so that segments can safely be deallocated + * even after the allocating plugin has been unloaded from memory. + * + * @param addr base address of the segment (as returned by shmat()) + * @param length length (bytes) of the segment (as passed to shmget()) + * @return NULL if an error occurred (in that case, shmdt(addr) is invoked + * before returning NULL). + */ +VLC_API block_t * block_shm_Alloc(void *addr, size_t length) VLC_USED VLC_MALLOC; + +/** + * Maps a file handle in memory. + * + * Loads a file into a block of memory through a file descriptor. + * If possible a private file mapping is created. Otherwise, the file is read + * normally. This function is a cancellation point. + * + * @note On 32-bits platforms, + * this function will not work for very large files, + * due to memory space constraints. + * + * @param fd file descriptor to load from + * @param write If true, request a read/write private mapping. + * If false, request a read-only potentially shared mapping. + * + * @return a new block with the file content at p_buffer, and file length at + * i_buffer (release it with block_Release()), or NULL upon error (see errno). + */ +VLC_API block_t *block_File(int fd, bool write) VLC_USED VLC_MALLOC; + +/** + * Maps a file in memory. + * + * Loads a file into a block of memory from a path to the file. + * See also block_File(). + * + * @param write If true, request a read/write private mapping. + * If false, request a read-only potentially shared mapping. + */ +VLC_API block_t *block_FilePath(const char *, bool write) VLC_USED VLC_MALLOC; + +static inline void block_Cleanup (void *block) +{ + block_Release ((block_t *)block); +} +#define block_cleanup_push( block ) vlc_cleanup_push (block_Cleanup, block) + +/** + * \defgroup block_fifo Block chain + * @{ + */ + +/**************************************************************************** + * Chains of blocks functions helper + **************************************************************************** + * - block_ChainAppend : append a block to the last block of a chain. Try to + * avoid using with a lot of data as it's really slow, prefer + * block_ChainLastAppend, p_block can be NULL + * - block_ChainLastAppend : use a pointer over a pointer to the next blocks, + * and update it. + * - block_ChainRelease : release a chain of block + * - block_ChainExtract : extract data from a chain, return real bytes counts + * - block_ChainGather : gather a chain, free it and return one block. + ****************************************************************************/ +static inline void block_ChainAppend( block_t **pp_list, block_t *p_block ) +{ + if( *pp_list == NULL ) + { + *pp_list = p_block; + } + else + { + block_t *p = *pp_list; + + while( p->p_next ) p = p->p_next; + p->p_next = p_block; + } +} + +static inline void block_ChainLastAppend( block_t ***ppp_last, block_t *p_block ) +{ + block_t *p_last = p_block; + + **ppp_last = p_block; + + while( p_last->p_next ) p_last = p_last->p_next; + *ppp_last = &p_last->p_next; +} + +static inline void block_ChainRelease( block_t *p_block ) +{ + while( p_block ) + { + block_t *p_next = p_block->p_next; + block_Release( p_block ); + p_block = p_next; + } +} + +static size_t block_ChainExtract( block_t *p_list, void *p_data, size_t i_max ) +{ + size_t i_total = 0; + uint8_t *p = (uint8_t*)p_data; + + while( p_list && i_max ) + { + size_t i_copy = __MIN( i_max, p_list->i_buffer ); + memcpy( p, p_list->p_buffer, i_copy ); + i_max -= i_copy; + i_total += i_copy; + p += i_copy; + + p_list = p_list->p_next; + } + return i_total; +} + +static inline void block_ChainProperties( block_t *p_list, int *pi_count, size_t *pi_size, vlc_tick_t *pi_length ) +{ + size_t i_size = 0; + vlc_tick_t i_length = 0; + int i_count = 0; + + while( p_list ) + { + i_size += p_list->i_buffer; + i_length += p_list->i_length; + i_count++; + + p_list = p_list->p_next; + } + + if( pi_size ) + *pi_size = i_size; + if( pi_length ) + *pi_length = i_length; + if( pi_count ) + *pi_count = i_count; +} + +static inline block_t *block_ChainGather( block_t *p_list ) +{ + size_t i_total = 0; + vlc_tick_t i_length = 0; + block_t *g; + + if( p_list->p_next == NULL ) + return p_list; /* Already gathered */ + + block_ChainProperties( p_list, NULL, &i_total, &i_length ); + + g = block_Alloc( i_total ); + if( !g ) + return NULL; + block_ChainExtract( p_list, g->p_buffer, g->i_buffer ); + + g->i_flags = p_list->i_flags; + g->i_pts = p_list->i_pts; + g->i_dts = p_list->i_dts; + g->i_length = i_length; + + /* free p_list */ + block_ChainRelease( p_list ); + return g; +} + +/** + * @} + * \defgroup fifo Block FIFO + * Thread-safe block queue functions + * @{ + */ + +/** + * Creates a thread-safe FIFO queue of blocks. + * + * See also block_FifoPut() and block_FifoGet(). + * The created queue must be released with block_FifoRelease(). + * + * @return the FIFO or NULL on memory error + */ +VLC_API block_fifo_t *block_FifoNew(void) VLC_USED VLC_MALLOC; + +/** + * Destroys a FIFO created by block_FifoNew(). + * + * @note Any queued blocks are also destroyed. + * @warning No other threads may be using the FIFO when this function is + * called. Otherwise, undefined behaviour will occur. + */ +VLC_API void block_FifoRelease(block_fifo_t *); + +/** + * Clears all blocks in a FIFO. + */ +VLC_API void block_FifoEmpty(block_fifo_t *); + +/** + * Immediately queue one block at the end of a FIFO. + * + * @param fifo queue + * @param block head of a block list to queue (may be NULL) + */ +VLC_API void block_FifoPut(block_fifo_t *fifo, block_t *block); + +/** + * Dequeue the first block from the FIFO. If necessary, wait until there is + * one block in the queue. This function is (always) cancellation point. + * + * @return a valid block + */ +VLC_API block_t *block_FifoGet(block_fifo_t *) VLC_USED; + +/** + * Peeks the first block in the FIFO. + * + * @warning This function leaves the block in the FIFO. + * You need to protect against concurrent threads who could dequeue the block. + * Preferably, there should be only one thread reading from the FIFO. + * + * @warning This function is undefined if the FIFO is empty. + * + * @return a valid block. + */ +VLC_API block_t *block_FifoShow(block_fifo_t *); + +size_t block_FifoSize(block_fifo_t *) VLC_USED VLC_DEPRECATED; +VLC_API size_t block_FifoCount(block_fifo_t *) VLC_USED VLC_DEPRECATED; + +typedef struct block_fifo_t vlc_fifo_t; + +/** + * Locks a block FIFO. + * + * No more than one thread can lock the FIFO at any given + * time, and no other thread can modify the FIFO while it is locked. + * vlc_fifo_Unlock() releases the lock. + * + * @note If the FIFO is already locked by another thread, this function waits. + * This function is not a cancellation point. + * + * @warning Recursively locking a single FIFO is undefined. Locking more than + * one FIFO at a time may lead to lock inversion; mind the locking order. + */ +VLC_API void vlc_fifo_Lock(vlc_fifo_t *); + +/** + * Unlocks a block FIFO. + * + * The calling thread must have locked the FIFO previously with + * vlc_fifo_Lock(). Otherwise, the behaviour is undefined. + * + * @note This function is not a cancellation point. + */ +VLC_API void vlc_fifo_Unlock(vlc_fifo_t *); + +/** + * Wakes up one thread waiting on the FIFO, if any. + * + * @note This function is not a cancellation point. + * + * @warning For race-free operations, the FIFO should be locked by the calling + * thread. The function can be called on a unlocked FIFO however. + */ +VLC_API void vlc_fifo_Signal(vlc_fifo_t *); + +/** + * Waits on the FIFO. + * + * Atomically unlocks the FIFO and waits until one thread signals the FIFO, + * then locks the FIFO again. A signal can be sent by queueing a block to the + * previously empty FIFO or by calling vlc_fifo_Signal() directly. + * This function may also return spuriously at any moment. + * + * @note This function is a cancellation point. In case of cancellation, the + * the FIFO will be locked before cancellation cleanup handlers are processed. + */ +VLC_API void vlc_fifo_Wait(vlc_fifo_t *); + +VLC_API void vlc_fifo_WaitCond(vlc_fifo_t *, vlc_cond_t *); + +/** + * Timed variant of vlc_fifo_WaitCond(). + * + * Atomically unlocks the FIFO and waits until one thread signals the FIFO up + * to a certain date, then locks the FIFO again. See vlc_fifo_Wait(). + */ +int vlc_fifo_TimedWaitCond(vlc_fifo_t *, vlc_cond_t *, vlc_tick_t); + +/** + * Queues a linked-list of blocks into a locked FIFO. + * + * @param block the head of the list of blocks + * (if NULL, this function has no effects) + * + * @note This function is not a cancellation point. + * + * @warning The FIFO must be locked by the calling thread using + * vlc_fifo_Lock(). Otherwise behaviour is undefined. + */ +VLC_API void vlc_fifo_QueueUnlocked(vlc_fifo_t *, block_t *); + +/** + * Dequeues the first block from a locked FIFO, if any. + * + * @note This function is not a cancellation point. + * + * @warning The FIFO must be locked by the calling thread using + * vlc_fifo_Lock(). Otherwise behaviour is undefined. + * + * @return the first block in the FIFO or NULL if the FIFO is empty + */ +VLC_API block_t *vlc_fifo_DequeueUnlocked(vlc_fifo_t *) VLC_USED; + +/** + * Dequeues the all blocks from a locked FIFO. + * + * This is equivalent to calling vlc_fifo_DequeueUnlocked() repeatedly until + * the FIFO is emptied, but this function is much faster. + * + * @note This function is not a cancellation point. + * + * @warning The FIFO must be locked by the calling thread using + * vlc_fifo_Lock(). Otherwise behaviour is undefined. + * + * @return a linked-list of all blocks in the FIFO (possibly NULL) + */ +VLC_API block_t *vlc_fifo_DequeueAllUnlocked(vlc_fifo_t *) VLC_USED; + +/** + * Counts blocks in a FIFO. + * + * Checks how many blocks are queued in a locked FIFO. + * + * @note This function is not cancellation point. + * + * @warning The FIFO must be locked by the calling thread using + * vlc_fifo_Lock(). Otherwise behaviour is undefined. + * + * @return the number of blocks in the FIFO (zero if it is empty) + */ +VLC_API size_t vlc_fifo_GetCount(const vlc_fifo_t *) VLC_USED; + +/** + * Counts bytes in a FIFO. + * + * Checks how many bytes are queued in a locked FIFO. + * + * @note This function is not cancellation point. + * + * @warning The FIFO must be locked by the calling thread using + * vlc_fifo_Lock(). Otherwise behaviour is undefined. + * + * @return the total number of bytes + * + * @note Zero bytes does not necessarily mean that the FIFO is empty since + * a block could contain zero bytes. Use vlc_fifo_GetCount() to determine if + * a FIFO is empty. + */ +VLC_API size_t vlc_fifo_GetBytes(const vlc_fifo_t *) VLC_USED; + +VLC_USED static inline bool vlc_fifo_IsEmpty(const vlc_fifo_t *fifo) +{ + return vlc_fifo_GetCount(fifo) == 0; +} + +static inline void vlc_fifo_Cleanup(void *fifo) +{ + vlc_fifo_Unlock((vlc_fifo_t *)fifo); +} +#define vlc_fifo_CleanupPush(fifo) vlc_cleanup_push(vlc_fifo_Cleanup, fifo) + +/** @} */ + +/** @} */ + +#endif /* VLC_BLOCK_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_block_helper.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_block_helper.h new file mode 100644 index 0000000..4071c2b --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_block_helper.h @@ -0,0 +1,369 @@ +/***************************************************************************** + * vlc_block_helper.h: Helper functions for data blocks management. + ***************************************************************************** + * Copyright (C) 2003-2017 VLC authors and VideoLAN + * + * Authors: Gildas Bazin + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_BLOCK_HELPER_H +#define VLC_BLOCK_HELPER_H 1 + +#include + +typedef struct block_bytestream_t +{ + block_t *p_chain; /**< byte stream head block */ + block_t **pp_last; /**< tail ppointer for appends */ + block_t *p_block; /**< byte stream read pointer block */ + size_t i_block_offset; /**< byte stream read pointer offset within block */ + size_t i_base_offset; /**< block base offset (previous blocks total size) */ + size_t i_total; /**< total bytes over all linked blocks */ +} block_bytestream_t; + +/***************************************************************************** + * block_bytestream_t management + *****************************************************************************/ +static inline void block_BytestreamInit( block_bytestream_t *p_bytestream ) +{ + p_bytestream->p_chain = p_bytestream->p_block = NULL; + p_bytestream->pp_last = &p_bytestream->p_chain; + p_bytestream->i_block_offset = 0; + p_bytestream->i_base_offset = 0; + p_bytestream->i_total = 0; +} + +static inline void block_BytestreamRelease( block_bytestream_t *p_bytestream ) +{ + block_ChainRelease( p_bytestream->p_chain ); +} + +/** + * It flush all data (read and unread) from a block_bytestream_t. + */ +static inline void block_BytestreamEmpty( block_bytestream_t *p_bytestream ) +{ + block_BytestreamRelease( p_bytestream ); + block_BytestreamInit( p_bytestream ); +} + +/** + * It flushes all already read data from a block_bytestream_t. + */ +static inline void block_BytestreamFlush( block_bytestream_t *p_bytestream ) +{ + block_t *block = p_bytestream->p_chain; + + while( block != p_bytestream->p_block ) + { + block_t *p_next = block->p_next; + + p_bytestream->i_total -= block->i_buffer; + p_bytestream->i_base_offset -= block->i_buffer; + block_Release( block ); + block = p_next; + } + + while( block != NULL && block->i_buffer == p_bytestream->i_block_offset ) + { + block_t *p_next = block->p_next; + + p_bytestream->i_total -= block->i_buffer; + block_Release( block ); + block = p_next; + p_bytestream->i_block_offset = 0; + } + + p_bytestream->p_chain = p_bytestream->p_block = block; + if( p_bytestream->p_chain == NULL ) + p_bytestream->pp_last = &p_bytestream->p_chain; +} + +static inline void block_BytestreamPush( block_bytestream_t *p_bytestream, + block_t *p_block ) +{ + block_ChainLastAppend( &p_bytestream->pp_last, p_block ); + if( !p_bytestream->p_block ) p_bytestream->p_block = p_block; + for( ; p_block; p_block = p_block->p_next ) + p_bytestream->i_total += p_block->i_buffer; +} + +static inline size_t block_BytestreamRemaining( const block_bytestream_t *p_bytestream ) +{ + return ( p_bytestream->i_total > p_bytestream->i_base_offset + p_bytestream->i_block_offset ) ? + p_bytestream->i_total - p_bytestream->i_base_offset - p_bytestream->i_block_offset : 0; +} + +VLC_USED +static inline block_t *block_BytestreamPop( block_bytestream_t *p_bytestream ) +{ + block_t *p_block; + + block_BytestreamFlush( p_bytestream ); + + p_block = p_bytestream->p_block; + if( unlikely( p_block == NULL ) ) + { + return NULL; + } + else if( !p_block->p_next ) + { + p_block->p_buffer += p_bytestream->i_block_offset; + p_block->i_buffer -= p_bytestream->i_block_offset; + p_bytestream->i_block_offset = 0; + p_bytestream->i_total = 0; + p_bytestream->p_chain = p_bytestream->p_block = NULL; + p_bytestream->pp_last = &p_bytestream->p_chain; + return p_block; + } + + while( p_block->p_next && p_block->p_next->p_next ) + p_block = p_block->p_next; + + block_t *p_block_old = p_block; + p_block = p_block->p_next; + p_block_old->p_next = NULL; + p_bytestream->pp_last = &p_block_old->p_next; + if( p_block ) + p_bytestream->i_total -= p_block->i_buffer; + + return p_block; +} + +static inline int block_WaitBytes( block_bytestream_t *p_bytestream, + size_t i_data ) +{ + if( block_BytestreamRemaining( p_bytestream ) >= i_data ) + return VLC_SUCCESS; + return VLC_EGENERIC; +} + +static inline int block_PeekBytes( block_bytestream_t *p_bytestream, + uint8_t *p_data, size_t i_data ) +{ + if( block_BytestreamRemaining( p_bytestream ) < i_data ) + return VLC_EGENERIC; + + /* Copy the data */ + size_t i_offset = p_bytestream->i_block_offset; + size_t i_size = i_data; + for( block_t *p_block = p_bytestream->p_block; + p_block != NULL; p_block = p_block->p_next ) + { + size_t i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); + i_size -= i_copy; + + if( i_copy ) + { + memcpy( p_data, p_block->p_buffer + i_offset, i_copy ); + p_data += i_copy; + } + + i_offset = 0; + + if( !i_size ) break; + } + + return VLC_SUCCESS; +} + +static inline int block_GetBytes( block_bytestream_t *p_bytestream, + uint8_t *p_data, size_t i_data ) +{ + if( block_BytestreamRemaining( p_bytestream ) < i_data ) + return VLC_EGENERIC; + + /* Copy the data */ + size_t i_offset = p_bytestream->i_block_offset; + size_t i_size = i_data; + size_t i_copy = 0; + block_t *p_block; + for( p_block = p_bytestream->p_block; + p_block != NULL; p_block = p_block->p_next ) + { + i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); + i_size -= i_copy; + + if( i_copy && p_data != NULL ) + { + memcpy( p_data, p_block->p_buffer + i_offset, i_copy ); + p_data += i_copy; + } + + if( i_size == 0 ) + break; + + p_bytestream->i_base_offset += p_block->i_buffer; + i_offset = 0; + } + + p_bytestream->p_block = p_block; + p_bytestream->i_block_offset = i_offset + i_copy; + + return VLC_SUCCESS; +} + +static inline int block_SkipBytes( block_bytestream_t *p_bytestream, + size_t i_data ) +{ + return block_GetBytes( p_bytestream, NULL, i_data ); +} + +static inline int block_SkipByte( block_bytestream_t *p_bytestream ) +{ + return block_GetBytes( p_bytestream, NULL, 1 ); +} + +static inline int block_PeekOffsetBytes( block_bytestream_t *p_bytestream, + size_t i_peek_offset, uint8_t *p_data, size_t i_data ) +{ + const size_t i_remain = block_BytestreamRemaining( p_bytestream ); + if( i_remain < i_data + i_peek_offset ) + return VLC_EGENERIC; + + /* Find the right place */ + size_t i_offset = p_bytestream->i_block_offset; + size_t i_size = i_peek_offset; + size_t i_copy = 0; + block_t *p_block; + for( p_block = p_bytestream->p_block; + p_block != NULL; p_block = p_block->p_next ) + { + i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); + i_size -= i_copy; + + if( !i_size ) break; + + i_offset = 0; + } + + /* Copy the data */ + i_offset += i_copy; + i_size = i_data; + for( ; p_block != NULL; p_block = p_block->p_next ) + { + i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); + i_size -= i_copy; + + if( i_copy ) + { + memcpy( p_data, p_block->p_buffer + i_offset, i_copy ); + p_data += i_copy; + } + + i_offset = 0; + + if( !i_size ) break; + } + + return VLC_SUCCESS; +} + +typedef const uint8_t * (*block_startcode_helper_t)( const uint8_t *, const uint8_t * ); +typedef bool (*block_startcode_matcher_t)( uint8_t, size_t, const uint8_t * ); + +static inline int block_FindStartcodeFromOffset( + block_bytestream_t *p_bytestream, size_t *pi_offset, + const uint8_t *p_startcode, int i_startcode_length, + block_startcode_helper_t p_startcode_helper, + block_startcode_matcher_t p_startcode_matcher ) +{ + block_t *p_block, *p_block_backup = 0; + ssize_t i_size = 0; + size_t i_offset, i_offset_backup = 0; + int i_caller_offset_backup = 0, i_match; + + /* Find the right place */ + i_size = *pi_offset + p_bytestream->i_block_offset; + for( p_block = p_bytestream->p_block; + p_block != NULL; p_block = p_block->p_next ) + { + i_size -= p_block->i_buffer; + if( i_size < 0 ) break; + } + + if( unlikely( i_size >= 0 ) ) + { + /* Not enough data, bail out */ + return VLC_EGENERIC; + } + + /* Begin the search. + * We first look for an occurrence of the 1st startcode byte and + * if found, we do a more thorough check. */ + i_size += p_block->i_buffer; + *pi_offset -= i_size; + i_match = 0; + for( ; p_block != NULL; p_block = p_block->p_next ) + { + for( i_offset = i_size; i_offset < p_block->i_buffer; i_offset++ ) + { + /* Use optimized helper when possible */ + if( p_startcode_helper && !i_match && + (p_block->i_buffer - i_offset) > ((size_t)i_startcode_length - 1) ) + { + const uint8_t *p_res = p_startcode_helper( &p_block->p_buffer[i_offset], + &p_block->p_buffer[p_block->i_buffer] ); + if( p_res ) + { + *pi_offset += i_offset + (p_res - &p_block->p_buffer[i_offset]); + return VLC_SUCCESS; + } + /* Then parsing boundary with legacy code */ + i_offset = p_block->i_buffer - (i_startcode_length - 1); + } + + bool b_matched = ( p_startcode_matcher ) + ? p_startcode_matcher( p_block->p_buffer[i_offset], i_match, p_startcode ) + : p_block->p_buffer[i_offset] == p_startcode[i_match]; + if( b_matched ) + { + if( i_match == 0 ) + { + p_block_backup = p_block; + i_offset_backup = i_offset; + i_caller_offset_backup = *pi_offset; + } + + if( i_match + 1 == i_startcode_length ) + { + /* We have it */ + *pi_offset += i_offset - i_match; + return VLC_SUCCESS; + } + + i_match++; + } + else if ( i_match > 0 ) + { + /* False positive */ + p_block = p_block_backup; + i_offset = i_offset_backup; + *pi_offset = i_caller_offset_backup; + i_match = 0; + } + + } + i_size = 0; + *pi_offset += i_offset; + } + + *pi_offset -= i_match; + return VLC_EGENERIC; +} + +#endif /* VLC_BLOCK_HELPER_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_boxes.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_boxes.h new file mode 100644 index 0000000..aa02ffa --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_boxes.h @@ -0,0 +1,165 @@ +/***************************************************************************** + * vlc_boxes.h : Boxes/Atoms handling helpers + ***************************************************************************** + * Copyright (C) 2001, 2002, 2003, 2006, 2015 VLC authors and VideoLAN + * + * Authors: Laurent Aimar + * Gildas Bazin + * Rafaël Carré + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ +#ifndef VLC_BOXES_H +#define VLC_BOXES_H + +#include +#include + +/** + * \file + * This file defines functions, structures for handling boxes/atoms in vlc + */ + +typedef struct bo_t +{ + block_t *b; + size_t basesize; +} bo_t; + +static inline bool bo_init(bo_t *p_bo, int i_size) +{ + p_bo->b = block_Alloc(i_size); + if (p_bo->b == NULL) + return false; + + p_bo->b->i_buffer = 0; + p_bo->basesize = i_size; + + return true; +} + +static inline void bo_deinit(bo_t *p_bo) +{ + if(p_bo->b) + block_Release(p_bo->b); +} + +static inline void bo_free(bo_t *p_bo) +{ + if(!p_bo) + return; + bo_deinit(p_bo); + free(p_bo); +} + +static inline int bo_extend(bo_t *p_bo, size_t i_total) +{ + if(!p_bo->b) + return false; + const size_t i_size = p_bo->b->i_size - (p_bo->b->p_buffer - p_bo->b->p_start); + if (i_total >= i_size) + { + int i_growth = p_bo->basesize; + while(i_total >= i_size + i_growth) + i_growth += p_bo->basesize; + + int i = p_bo->b->i_buffer; /* Realloc would set payload size == buffer size */ + p_bo->b = block_Realloc(p_bo->b, 0, i_size + i_growth); + if (!p_bo->b) + return false; + p_bo->b->i_buffer = i; + } + return true; +} + +#define BO_SET_DECL_S(func, handler, type) static inline bool func(bo_t *p_bo, size_t i_offset, type val)\ + {\ + if (!bo_extend(p_bo, i_offset + sizeof(type)))\ + return false;\ + handler(&p_bo->b->p_buffer[i_offset], val);\ + return true;\ + } + +#define BO_ADD_DECL_S(func, handler, type) static inline bool func(bo_t *p_bo, type val)\ + {\ + if(!p_bo->b || !handler(p_bo, p_bo->b->i_buffer, val))\ + return false;\ + p_bo->b->i_buffer += sizeof(type);\ + return true;\ + } + +#define BO_FUNC_DECL(suffix, handler, type ) \ + BO_SET_DECL_S( bo_set_ ## suffix ## be, handler ## BE, type )\ + BO_SET_DECL_S( bo_set_ ## suffix ## le, handler ## LE, type )\ + BO_ADD_DECL_S( bo_add_ ## suffix ## be, bo_set_ ## suffix ## be, type )\ + BO_ADD_DECL_S( bo_add_ ## suffix ## le, bo_set_ ## suffix ## le, type ) + +static inline bool bo_set_8(bo_t *p_bo, size_t i_offset, uint8_t i) +{ + if (!bo_extend(p_bo, i_offset + 1)) + return false; + p_bo->b->p_buffer[i_offset] = i; + return true; +} + +static inline bool bo_add_8(bo_t *p_bo, uint8_t i) +{ + if(!p_bo->b || !bo_set_8( p_bo, p_bo->b->i_buffer, i )) + return false; + p_bo->b->i_buffer++; + return true; +} + +/* declares all bo_[set,add]_[16,32,64] */ +BO_FUNC_DECL( 16, SetW, uint16_t ) +BO_FUNC_DECL( 32, SetDW, uint32_t ) +BO_FUNC_DECL( 64, SetQW, uint64_t ) + +#undef BO_FUNC_DECL +#undef BO_SET_DECL_S +#undef BO_ADD_DECL_S + +static inline bool bo_add_24be(bo_t *p_bo, uint32_t i) +{ + if(!p_bo->b || !bo_extend(p_bo, p_bo->b->i_buffer + 3)) + return false; + p_bo->b->p_buffer[p_bo->b->i_buffer++] = ((i >> 16) & 0xff); + p_bo->b->p_buffer[p_bo->b->i_buffer++] = ((i >> 8) & 0xff); + p_bo->b->p_buffer[p_bo->b->i_buffer++] = (i & 0xff); + return true; +} + +static inline void bo_swap_32be (bo_t *p_bo, size_t i_pos, uint32_t i) +{ + if (!p_bo->b || p_bo->b->i_buffer < i_pos + 4) + return; + p_bo->b->p_buffer[i_pos ] = (i >> 24)&0xff; + p_bo->b->p_buffer[i_pos + 1] = (i >> 16)&0xff; + p_bo->b->p_buffer[i_pos + 2] = (i >> 8)&0xff; + p_bo->b->p_buffer[i_pos + 3] = (i )&0xff; +} + +static inline bool bo_add_mem(bo_t *p_bo, size_t i_size, const void *p_mem) +{ + if(!p_bo->b || !bo_extend(p_bo, p_bo->b->i_buffer + i_size)) + return false; + memcpy(&p_bo->b->p_buffer[p_bo->b->i_buffer], p_mem, i_size); + p_bo->b->i_buffer += i_size; + return true; +} + +#define bo_add_fourcc(p_bo, fcc) bo_add_mem(p_bo, 4, fcc) + +#endif // VLC_BOXES_H diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_charset.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_charset.h new file mode 100644 index 0000000..c77f198 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_charset.h @@ -0,0 +1,335 @@ +/***************************************************************************** + * vlc_charset.h: Unicode UTF-8 wrappers function + ***************************************************************************** + * Copyright (C) 2003-2005 VLC authors and VideoLAN + * Copyright © 2005-2010 Rémi Denis-Courmont + * $Id$ + * + * Author: Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_CHARSET_H +#define VLC_CHARSET_H 1 + +/** + * \file + * Characters sets handling + * + * \ingroup strings + * @{ + */ + +/** + * Decodes a code point from UTF-8. + * + * Converts the first character in a UTF-8 sequence into a Unicode code point. + * + * \param str an UTF-8 bytes sequence [IN] + * \param pwc address of a location to store the code point [OUT] + * + * \return the number of bytes occupied by the decoded code point + * + * \retval (size_t)-1 not a valid UTF-8 sequence + * \retval 0 null character (i.e. str points to an empty string) + * \retval 1 (non-null) ASCII character + * \retval 2-4 non-ASCII character + */ +VLC_API size_t vlc_towc(const char *str, uint32_t *restrict pwc); + +/** + * Checks UTF-8 validity. + * + * Checks whether a null-terminated string is a valid UTF-8 bytes sequence. + * + * \param str string to check + * + * \retval str the string is a valid null-terminated UTF-8 sequence + * \retval NULL the string is not an UTF-8 sequence + */ +VLC_USED static inline const char *IsUTF8(const char *str) +{ + size_t n; + uint32_t cp; + + while ((n = vlc_towc(str, &cp)) != 0) + if (likely(n != (size_t)-1)) + str += n; + else + return NULL; + return str; +} + +/** + * Removes non-UTF-8 sequences. + * + * Replaces invalid or over-long UTF-8 bytes sequences within a + * null-terminated string with question marks. This is so that the string can + * be printed at least partially. + * + * \warning Do not use this were correctness is critical. use IsUTF8() and + * handle the error case instead. This function is mainly for display or debug. + * + * \note Converting from Latin-1 to UTF-8 in place is not possible (the string + * size would be increased). So it is not attempted even if it would otherwise + * be less disruptive. + * + * \retval str the string is a valid null-terminated UTF-8 sequence + * (i.e. no changes were made) + * \retval NULL the string is not an UTF-8 sequence + */ +static inline char *EnsureUTF8(char *str) +{ + char *ret = str; + size_t n; + uint32_t cp; + + while ((n = vlc_towc(str, &cp)) != 0) + if (likely(n != (size_t)-1)) + str += n; + else + { + *str++ = '?'; + ret = NULL; + } + return ret; +} + +/* iconv wrappers (defined in src/extras/libc.c) */ +#define VLC_ICONV_ERR ((size_t) -1) +typedef void *vlc_iconv_t; +VLC_API vlc_iconv_t vlc_iconv_open( const char *, const char * ) VLC_USED; +VLC_API size_t vlc_iconv( vlc_iconv_t, const char **, size_t *, char **, size_t * ) VLC_USED; +VLC_API int vlc_iconv_close( vlc_iconv_t ); + +#include + +VLC_API int utf8_vfprintf( FILE *stream, const char *fmt, va_list ap ); +VLC_API int utf8_fprintf( FILE *, const char *, ... ) VLC_FORMAT( 2, 3 ); +VLC_API char * vlc_strcasestr(const char *, const char *) VLC_USED; + +VLC_API char * FromCharset( const char *charset, const void *data, size_t data_size ) VLC_USED; +VLC_API void * ToCharset( const char *charset, const char *in, size_t *outsize ) VLC_USED; + +#ifdef __APPLE__ +# include + +/* Obtains a copy of the contents of a CFString in specified encoding. + * Returns char* (must be freed by caller) or NULL on failure. + */ +VLC_USED static inline char *FromCFString(const CFStringRef cfString, + const CFStringEncoding cfStringEncoding) +{ + // Try the quick way to obtain the buffer + const char *tmpBuffer = CFStringGetCStringPtr(cfString, cfStringEncoding); + + if (tmpBuffer != NULL) { + return strdup(tmpBuffer); + } + + // The quick way did not work, try the long way + CFIndex length = CFStringGetLength(cfString); + CFIndex maxSize = + CFStringGetMaximumSizeForEncoding(length, cfStringEncoding); + + // If result would exceed LONG_MAX, kCFNotFound is returned + if (unlikely(maxSize == kCFNotFound)) { + return NULL; + } + + // Account for the null terminator + maxSize++; + + char *buffer = (char *)malloc(maxSize); + + if (unlikely(buffer == NULL)) { + return NULL; + } + + // Copy CFString in requested encoding to buffer + Boolean success = CFStringGetCString(cfString, buffer, maxSize, cfStringEncoding); + + if (!success) + FREENULL(buffer); + return buffer; +} +#endif + +#ifdef _WIN32 +VLC_USED +static inline char *FromWide (const wchar_t *wide) +{ + size_t len = WideCharToMultiByte (CP_UTF8, 0, wide, -1, NULL, 0, NULL, NULL); + if (len == 0) + return NULL; + + char *out = (char *)malloc (len); + + if (likely(out)) + WideCharToMultiByte (CP_UTF8, 0, wide, -1, out, len, NULL, NULL); + return out; +} + +VLC_USED +static inline wchar_t *ToWide (const char *utf8) +{ + int len = MultiByteToWideChar (CP_UTF8, 0, utf8, -1, NULL, 0); + if (len == 0) + return NULL; + + wchar_t *out = (wchar_t *)malloc (len * sizeof (wchar_t)); + + if (likely(out)) + MultiByteToWideChar (CP_UTF8, 0, utf8, -1, out, len); + return out; +} + +VLC_USED VLC_MALLOC +static inline char *ToCodePage (unsigned cp, const char *utf8) +{ + wchar_t *wide = ToWide (utf8); + if (wide == NULL) + return NULL; + + size_t len = WideCharToMultiByte (cp, 0, wide, -1, NULL, 0, NULL, NULL); + if (len == 0) { + free(wide); + return NULL; + } + + char *out = (char *)malloc (len); + if (likely(out != NULL)) + WideCharToMultiByte (cp, 0, wide, -1, out, len, NULL, NULL); + free (wide); + return out; +} + +VLC_USED VLC_MALLOC +static inline char *FromCodePage (unsigned cp, const char *mb) +{ + int len = MultiByteToWideChar (cp, 0, mb, -1, NULL, 0); + if (len == 0) + return NULL; + + wchar_t *wide = (wchar_t *)malloc (len * sizeof (wchar_t)); + if (unlikely(wide == NULL)) + return NULL; + MultiByteToWideChar (cp, 0, mb, -1, wide, len); + + char *utf8 = FromWide (wide); + free (wide); + return utf8; +} + +VLC_USED VLC_MALLOC +static inline char *FromANSI (const char *ansi) +{ + return FromCodePage (GetACP (), ansi); +} + +VLC_USED VLC_MALLOC +static inline char *ToANSI (const char *utf8) +{ + return ToCodePage (GetACP (), utf8); +} + +# ifdef UNICODE +# define FromT FromWide +# define ToT ToWide +# else +# define FromT FromANSI +# define ToT ToANSI +# endif +# define FromLocale FromANSI +# define ToLocale ToANSI +# define LocaleFree(s) free((char *)(s)) +# define FromLocaleDup FromANSI +# define ToLocaleDup ToANSI + +#elif defined(__OS2__) + +VLC_USED static inline char *FromLocale (const char *locale) +{ + return locale ? FromCharset ((char *)"", locale, strlen(locale)) : NULL; +} + +VLC_USED static inline char *ToLocale (const char *utf8) +{ + size_t outsize; + return utf8 ? (char *)ToCharset ("", utf8, &outsize) : NULL; +} + +VLC_USED static inline void LocaleFree (const char *str) +{ + free ((char *)str); +} + +VLC_USED static inline char *FromLocaleDup (const char *locale) +{ + return FromCharset ("", locale, strlen(locale)); +} + +VLC_USED static inline char *ToLocaleDup (const char *utf8) +{ + size_t outsize; + return (char *)ToCharset ("", utf8, &outsize); +} + +#else + +# define FromLocale(l) (l) +# define ToLocale(u) (u) +# define LocaleFree(s) ((void)(s)) +# define FromLocaleDup strdup +# define ToLocaleDup strdup +#endif + +/** + * Converts a nul-terminated string from ISO-8859-1 to UTF-8. + */ +static inline char *FromLatin1 (const char *latin) +{ + char *str = (char *)malloc (2 * strlen (latin) + 1), *utf8 = str; + unsigned char c; + + if (str == NULL) + return NULL; + + while ((c = *(latin++)) != '\0') + { + if (c >= 0x80) + { + *(utf8++) = 0xC0 | (c >> 6); + *(utf8++) = 0x80 | (c & 0x3F); + } + else + *(utf8++) = c; + } + *(utf8++) = '\0'; + + utf8 = (char *)realloc (str, utf8 - str); + return utf8 ? utf8 : str; +} + +/** @} */ + +VLC_API double us_strtod( const char *, char ** ) VLC_USED; +VLC_API float us_strtof( const char *, char ** ) VLC_USED; +VLC_API double us_atof( const char * ) VLC_USED; +VLC_API int us_vasprintf( char **, const char *, va_list ); +VLC_API int us_asprintf( char **, const char *, ... ) VLC_USED; + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_codec.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_codec.h new file mode 100644 index 0000000..8fed2f4 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_codec.h @@ -0,0 +1,422 @@ +/***************************************************************************** + * vlc_codec.h: Definition of the decoder and encoder structures + ***************************************************************************** + * Copyright (C) 1999-2003 VLC authors and VideoLAN + * $Id$ + * + * Authors: Gildas Bazin + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_CODEC_H +#define VLC_CODEC_H 1 + +#include + +#include +#include +#include +#include + +/** + * \defgroup codec Codec + * Decoders and encoders + * @{ + * \file + * Decoder and encoder modules interface + * + * \defgroup decoder Decoder + * Audio, video and text decoders + * @{ + */ + +typedef struct decoder_owner_sys_t decoder_owner_sys_t; + +typedef struct decoder_cc_desc_t decoder_cc_desc_t; + +/* + * BIG FAT WARNING : the code relies in the first 4 members of filter_t + * and decoder_t to be the same, so if you have anything to add, do it + * at the end of the structure. + */ +struct decoder_t +{ + VLC_COMMON_MEMBERS + + /* Module properties */ + module_t * p_module; + decoder_sys_t * p_sys; + + /* Input format ie from demuxer (XXX: a lot of field could be invalid) */ + es_format_t fmt_in; + + /* Output format of decoder/packetizer */ + es_format_t fmt_out; + + /* Tell the decoder if it is allowed to drop frames */ + bool b_frame_drop_allowed; + +# define VLCDEC_SUCCESS VLC_SUCCESS +# define VLCDEC_ECRITICAL VLC_EGENERIC +# define VLCDEC_RELOAD (-100) + /* This function is called to decode one packetized block. + * + * The module implementation will own the input block (p_block) and should + * process and release it. Depending of the decoder type, the module should + * send output frames/blocks via decoder_QueueVideo(), decoder_QueueAudio() + * or decoder_QueueSub(). + * + * If p_block is NULL, the decoder asks the module to drain itself. The + * module should return all available output frames/block via the queue + * functions. + * + * Return values can be: + * VLCDEC_SUCCESS: pf_decode will be called again + * VLCDEC_ECRITICAL: in case of critical error, pf_decode won't be called + * again. + * VLCDEC_RELOAD: Request that the decoder should be reloaded. The current + * module will be unloaded. Reloading a module may cause a loss of frames. + * When returning this status, the implementation shouldn't release or + * modify the p_block in argument (The same p_block will be feed to the + * next decoder module). + */ + int ( * pf_decode ) ( decoder_t *, block_t *p_block ); + + /* This function is called in a loop with the same pp_block argument until + * it returns NULL. This allows a module implementation to return more than + * one output blocks for one input block. + * + * pp_block or *pp_block can be NULL. + * + * If pp_block and *pp_block are not NULL, the module implementation will + * own the input block (*pp_block) and should process and release it. The + * module can also process a part of the block. In that case, it should + * modify (*pp_block)->p_buffer/i_buffer accordingly and return a valid + * output block. The module can also set *pp_block to NULL when the input + * block is consumed. + * + * If pp_block is not NULL but *pp_block is NULL, a previous call of the pf + * function has set the *pp_block to NULL. Here, the module can return new + * output block for the same, already processed, input block (the + * pf_packetize function will be called as long as the module return an + * output block). + * + * When the pf function returns NULL, the next call to this function will + * have a new a valid pp_block (if the packetizer is not drained). + * + * If pp_block is NULL, the packetizer asks the module to drain itself. In + * that case, the module has to return all output frames available (the + * pf_packetize function will be called as long as the module return an + * output block). + */ + block_t * ( * pf_packetize )( decoder_t *, block_t **pp_block ); + /* */ + void ( * pf_flush ) ( decoder_t * ); + + /* Closed Caption (CEA 608/708) extraction. + * If set, it *may* be called after pf_packetize returned data. It should + * return CC for the pictures returned by the last pf_packetize call only, + * channel bitmaps will be used to known which cc channel are present (but + * globaly, not necessary for the current packet. Video decoders should use + * the decoder_QueueCc() function to pass closed captions. */ + block_t * ( * pf_get_cc ) ( decoder_t *, decoder_cc_desc_t * ); + + /* Meta data at codec level + * The decoder owner set it back to NULL once it has retreived what it needs. + * The decoder owner is responsible of its release except when you overwrite it. + */ + vlc_meta_t *p_description; + + /* + * Owner fields + * XXX You MUST not use them directly. + */ + + /* Video output callbacks + * XXX use decoder_NewPicture */ + int (*pf_vout_format_update)( decoder_t * ); + picture_t *(*pf_vout_buffer_new)( decoder_t * ); + + /** + * Number of extra (ie in addition to the DPB) picture buffers + * needed for decoding. + */ + int i_extra_picture_buffers; + + /* Audio output callbacks */ + int (*pf_aout_format_update)( decoder_t * ); + + /* SPU output callbacks + * XXX use decoder_NewSubpicture */ + subpicture_t *(*pf_spu_buffer_new)( decoder_t *, const subpicture_updater_t * ); + + /* Input attachments + * XXX use decoder_GetInputAttachments */ + int (*pf_get_attachments)( decoder_t *p_dec, input_attachment_t ***ppp_attachment, int *pi_attachment ); + + /* Display date + * XXX use decoder_GetDisplayDate */ + vlc_tick_t (*pf_get_display_date)( decoder_t *, vlc_tick_t ); + + /* Display rate + * XXX use decoder_GetDisplayRate */ + int (*pf_get_display_rate)( decoder_t * ); + + /* XXX use decoder_QueueVideo or decoder_QueueVideoWithCc */ + int (*pf_queue_video)( decoder_t *, picture_t * ); + /* XXX use decoder_QueueAudio */ + int (*pf_queue_audio)( decoder_t *, block_t * ); + /* XXX use decoder_QueueCC */ + int (*pf_queue_cc)( decoder_t *, block_t *, const decoder_cc_desc_t * ); + /* XXX use decoder_QueueSub */ + int (*pf_queue_sub)( decoder_t *, subpicture_t *); + void *p_queue_ctx; + + /* Private structure for the owner of the decoder */ + decoder_owner_sys_t *p_owner; +}; + +/* struct for packetizer get_cc polling/decoder queue_cc + * until we have a proper metadata way */ +struct decoder_cc_desc_t +{ + uint8_t i_608_channels; /* 608 channels bitmap */ + uint64_t i_708_channels; /* 708 */ + int i_reorder_depth; /* reorder depth, -1 for no reorder, 0 for old P/B flag based */ +}; + +/** + * @} + */ + +/** + * \defgroup encoder Encoder + * Audio, video and text encoders + * @{ + */ + +struct encoder_t +{ + VLC_COMMON_MEMBERS + + /* Module properties */ + module_t * p_module; + encoder_sys_t * p_sys; + + /* Properties of the input data fed to the encoder */ + es_format_t fmt_in; + + /* Properties of the output of the encoder */ + es_format_t fmt_out; + + block_t * ( * pf_encode_video )( encoder_t *, picture_t * ); + block_t * ( * pf_encode_audio )( encoder_t *, block_t * ); + block_t * ( * pf_encode_sub )( encoder_t *, subpicture_t * ); + + /* Common encoder options */ + int i_threads; /* Number of threads to use during encoding */ + int i_iframes; /* One I frame per i_iframes */ + int i_bframes; /* One B frame per i_bframes */ + int i_tolerance; /* Bitrate tolerance */ + + /* Encoder config */ + config_chain_t *p_cfg; +}; + +/** + * @} + * + * \ingroup decoder + * @{ + */ + +/** + * Updates the video output format. + * + * This function notifies the video output pipeline of a new video output + * format (fmt_out.video). If there was no video output from the decoder so far + * or if the video output format has changed, a new video output will be set + * up. decoder_NewPicture() can then be used to allocate picture buffers. + * + * If the format is unchanged, this function has no effects and returns zero. + * + * \note + * This function is not reentrant. + * + * @return 0 if the video output was set up successfully, -1 otherwise. + */ +VLC_USED +static inline int decoder_UpdateVideoFormat( decoder_t *dec ) +{ + assert( dec->fmt_in.i_cat == VIDEO_ES ); + if( dec->fmt_in.i_cat == VIDEO_ES && dec->pf_vout_format_update != NULL ) + return dec->pf_vout_format_update( dec ); + else + return -1; +} + +/** + * Allocates an output picture buffer. + * + * This function pulls an output picture buffer for the decoder from the + * buffer pool of the video output. The picture must be released with + * picture_Release() when it is no longer referenced by the decoder. + * + * \note + * This function is reentrant. However, decoder_UpdateVideoFormat() cannot be + * used concurrently; the caller is responsible for serialization. + * + * \warning + * The behaviour is undefined if decoder_UpdateVideoFormat() was not called or + * if the last call returned an error. + * + * \return a picture buffer on success, NULL on error + */ +VLC_USED +static inline picture_t *decoder_NewPicture( decoder_t *dec ) +{ + return dec->pf_vout_buffer_new( dec ); +} + +/** + * Abort any calls of decoder_NewPicture + * + * If b_abort is true, all pending and futures calls of decoder_NewPicture + * will be aborted. This function can be used by asynchronous video decoders + * to unblock a thread that is waiting for a picture. + */ +VLC_API void decoder_AbortPictures( decoder_t *dec, bool b_abort ); + +/** + * This function queues a single picture to the video output. + * + * \note + * The caller doesn't own the picture anymore after this call (even in case of + * error). + * FIXME: input_DecoderFrameNext won't work if a module use this function. + * + * \return 0 if the picture is queued, -1 on error + */ +static inline int decoder_QueueVideo( decoder_t *dec, picture_t *p_pic ) +{ + assert( p_pic->p_next == NULL ); + assert( dec->pf_queue_video != NULL ); + return dec->pf_queue_video( dec, p_pic ); +} + +/** + * This function queues the Closed Captions + * + * \param dec the decoder object + * \param p_cc the closed-caption to queue + * \param p_desc decoder_cc_desc_t description structure + * \return 0 if queued, -1 on error + */ +static inline int decoder_QueueCc( decoder_t *dec, block_t *p_cc, + const decoder_cc_desc_t *p_desc ) +{ + if( dec->pf_queue_cc == NULL ) + { + block_Release( p_cc ); + return -1; + } + return dec->pf_queue_cc( dec, p_cc, p_desc ); +} + +/** + * This function queues a single audio block to the audio output. + * + * \note + * The caller doesn't own the audio block anymore after this call (even in case + * of error). + * + * \return 0 if the block is queued, -1 on error + */ +static inline int decoder_QueueAudio( decoder_t *dec, block_t *p_aout_buf ) +{ + assert( p_aout_buf->p_next == NULL ); + assert( dec->pf_queue_audio != NULL ); + return dec->pf_queue_audio( dec, p_aout_buf ); +} + +/** + * This function queues a single subtitle to the video output. + * + * \note + * The caller doesn't own the subtitle anymore after this call (even in case of + * error). + * + * \return 0 if the subtitle is queued, -1 on error + */ +static inline int decoder_QueueSub( decoder_t *dec, subpicture_t *p_spu ) +{ + assert( p_spu->p_next == NULL ); + assert( dec->pf_queue_sub != NULL ); + return dec->pf_queue_sub( dec, p_spu ); +} + +/** + * This function notifies the audio output pipeline of a new audio output + * format (fmt_out.audio). If there is currently no audio output or if the + * audio output format has changed, a new audio output will be set up. + * @return 0 if the audio output is working, -1 if not. */ +VLC_USED +static inline int decoder_UpdateAudioFormat( decoder_t *dec ) +{ + assert(dec->fmt_in.i_cat == AUDIO_ES); + if( dec->fmt_in.i_cat == AUDIO_ES && dec->pf_aout_format_update != NULL ) + return dec->pf_aout_format_update( dec ); + else + return -1; +} + +/** + * This function will return a new audio buffer usable by a decoder as an + * output buffer. It must be released with block_Release() or returned it to + * the caller as a decoder_QueueAudio parameter. + */ +VLC_API block_t * decoder_NewAudioBuffer( decoder_t *, int i_nb_samples ) VLC_USED; + +/** + * This function will return a new subpicture usable by a decoder as an output + * buffer. You have to release it using subpicture_Delete() or by returning + * it to the caller as a decoder_QueueSub parameter. + */ +VLC_API subpicture_t * decoder_NewSubpicture( decoder_t *, const subpicture_updater_t * ) VLC_USED; + +/** + * This function gives all input attachments at once. + * + * You MUST release the returned values + */ +VLC_API int decoder_GetInputAttachments( decoder_t *, input_attachment_t ***ppp_attachment, int *pi_attachment ); + +/** + * This function converts a decoder timestamp into a display date comparable + * to mdate(). + * You MUST use it *only* for gathering statistics about speed. + */ +VLC_API vlc_tick_t decoder_GetDisplayDate( decoder_t *, vlc_tick_t ) VLC_USED; + +/** + * This function returns the current input rate. + * You MUST use it *only* for gathering statistics about speed. + */ +VLC_API int decoder_GetDisplayRate( decoder_t * ) VLC_USED; + +/** @} */ +/** @} */ +#endif /* _VLC_CODEC_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_common.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_common.h new file mode 100644 index 0000000..0898785 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_common.h @@ -0,0 +1,1058 @@ +/***************************************************************************** + * vlc_common.h: common definitions + * Collection of useful common types and macros definitions + ***************************************************************************** + * Copyright (C) 1998-2011 VLC authors and VideoLAN + * + * Authors: Samuel Hocevar + * Vincent Seguin + * Gildas Bazin + * Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * \file + * This file is a collection of common definitions and types + */ + +#ifndef VLC_COMMON_H +# define VLC_COMMON_H 1 + +/***************************************************************************** + * Required vlc headers + *****************************************************************************/ +#include "vlc_config.h" + +/***************************************************************************** + * Required system headers + *****************************************************************************/ +#include +#include + +#include +#include +#include +#include + +#ifndef __cplusplus +# include +#endif + +/***************************************************************************** + * Compilers definitions + *****************************************************************************/ +/* Helper for GCC version checks */ +#ifdef __GNUC__ +# define VLC_GCC_VERSION(maj,min) \ + ((__GNUC__ > (maj)) || (__GNUC__ == (maj) && __GNUC_MINOR__ >= (min))) +#else +# define VLC_GCC_VERSION(maj,min) (0) +#endif + +/* Try to fix format strings for all versions of mingw and mingw64 */ +#if defined( _WIN32 ) && defined( __USE_MINGW_ANSI_STDIO ) + #undef PRId64 + #define PRId64 "lld" + #undef PRIi64 + #define PRIi64 "lli" + #undef PRIu64 + #define PRIu64 "llu" + #undef PRIo64 + #define PRIo64 "llo" + #undef PRIx64 + #define PRIx64 "llx" + #define snprintf __mingw_snprintf + #define vsnprintf __mingw_vsnprintf + #define swprintf _snwprintf +#endif + +/* Function attributes for compiler warnings */ +#ifdef __GNUC__ +# define VLC_DEPRECATED __attribute__((deprecated)) +# if VLC_GCC_VERSION(6,0) +# define VLC_DEPRECATED_ENUM __attribute__((deprecated)) +# else +# define VLC_DEPRECATED_ENUM +# endif + +# if defined( _WIN32 ) && !defined( __clang__ ) +# define VLC_FORMAT(x,y) __attribute__ ((format(gnu_printf,x,y))) +# else +# define VLC_FORMAT(x,y) __attribute__ ((format(printf,x,y))) +# endif +# define VLC_FORMAT_ARG(x) __attribute__ ((format_arg(x))) +# define VLC_MALLOC __attribute__ ((malloc)) +# define VLC_USED __attribute__ ((warn_unused_result)) + +#else +# define VLC_DEPRECATED +# define VLC_DEPRECATED_ENUM +# define VLC_FORMAT(x,y) +# define VLC_FORMAT_ARG(x) +# define VLC_MALLOC +# define VLC_USED +#endif + + +/* Branch prediction */ +#ifdef __GNUC__ +# define likely(p) __builtin_expect(!!(p), 1) +# define unlikely(p) __builtin_expect(!!(p), 0) +# define unreachable() __builtin_unreachable() +#else +# define likely(p) (!!(p)) +# define unlikely(p) (!!(p)) +# define unreachable() ((void)0) +#endif + +#define vlc_assert_unreachable() (assert(!"unreachable"), unreachable()) + +/* Linkage */ +#ifdef __cplusplus +# define VLC_EXTERN extern "C" +#else +# define VLC_EXTERN +#endif + +#if defined (_WIN32) && defined (DLL_EXPORT) +# define VLC_EXPORT __declspec(dllexport) +#elif defined (__GNUC__) +# define VLC_EXPORT __attribute__((visibility("default"))) +#else +# define VLC_EXPORT +#endif + +#define VLC_API VLC_EXTERN VLC_EXPORT + + +/***************************************************************************** + * Basic types definitions + *****************************************************************************/ +/** + * High precision date or time interval + * + * Store a high precision date or time interval. The maximum precision is the + * microsecond, and a 64 bits integer is used to avoid overflows (maximum + * time interval is then 292271 years, which should be long enough for any + * video). Dates are stored as microseconds since a common date (usually the + * epoch). Note that date and time intervals can be manipulated using regular + * arithmetic operators, and that no special functions are required. + */ +typedef int64_t vlc_tick_t; +typedef vlc_tick_t mtime_t; /* deprecated, use vlc_tick_t */ + +#define VLC_TICK_INVALID VLC_TS_INVALID +#define VLC_TICK_0 VLC_TS_0 + +/** + * The vlc_fourcc_t type. + * + * See http://www.webartz.com/fourcc/ for a very detailed list. + */ +typedef uint32_t vlc_fourcc_t; + +#ifdef WORDS_BIGENDIAN +# define VLC_FOURCC( a, b, c, d ) \ + ( ((uint32_t)d) | ( ((uint32_t)c) << 8 ) \ + | ( ((uint32_t)b) << 16 ) | ( ((uint32_t)a) << 24 ) ) +# define VLC_TWOCC( a, b ) \ + ( (uint16_t)(b) | ( (uint16_t)(a) << 8 ) ) + +#else +# define VLC_FOURCC( a, b, c, d ) \ + ( ((uint32_t)a) | ( ((uint32_t)b) << 8 ) \ + | ( ((uint32_t)c) << 16 ) | ( ((uint32_t)d) << 24 ) ) +# define VLC_TWOCC( a, b ) \ + ( (uint16_t)(a) | ( (uint16_t)(b) << 8 ) ) + +#endif + +/** + * Translate a vlc_fourcc into its string representation. This function + * assumes there is enough room in psz_fourcc to store 4 characters in. + * + * \param fcc a vlc_fourcc_t + * \param psz_fourcc string to store string representation of vlc_fourcc in + */ +static inline void vlc_fourcc_to_char( vlc_fourcc_t fcc, char *psz_fourcc ) +{ + memcpy( psz_fourcc, &fcc, 4 ); +} + +/***************************************************************************** + * Classes declaration + *****************************************************************************/ + +/* Internal types */ +typedef struct vlc_list_t vlc_list_t; +typedef struct vlc_object_t vlc_object_t; +typedef struct libvlc_int_t libvlc_int_t; +typedef struct date_t date_t; + +/* Playlist */ + +typedef struct playlist_t playlist_t; +typedef struct playlist_item_t playlist_item_t; +typedef struct services_discovery_t services_discovery_t; +typedef struct services_discovery_sys_t services_discovery_sys_t; +typedef struct vlc_renderer_discovery_t vlc_renderer_discovery_t; +typedef struct vlc_renderer_item_t vlc_renderer_item_t; + +/* Modules */ +typedef struct module_t module_t; +typedef struct module_config_t module_config_t; + +typedef struct config_category_t config_category_t; + +/* Input */ +typedef struct input_thread_t input_thread_t; +typedef struct input_item_t input_item_t; +typedef struct input_item_node_t input_item_node_t; +typedef struct access_sys_t access_sys_t; +typedef struct stream_t stream_t; +typedef struct stream_sys_t stream_sys_t; +typedef struct demux_t demux_t; +typedef struct demux_sys_t demux_sys_t; +typedef struct es_out_t es_out_t; +typedef struct es_out_id_t es_out_id_t; +typedef struct es_out_sys_t es_out_sys_t; +typedef struct seekpoint_t seekpoint_t; +typedef struct info_t info_t; +typedef struct info_category_t info_category_t; +typedef struct input_attachment_t input_attachment_t; + +/* Format */ +typedef struct audio_format_t audio_format_t; +typedef struct video_format_t video_format_t; +typedef struct subs_format_t subs_format_t; +typedef struct es_format_t es_format_t; +typedef struct video_palette_t video_palette_t; + +/* Audio */ +typedef struct audio_output audio_output_t; +typedef struct aout_sys_t aout_sys_t; +typedef audio_format_t audio_sample_format_t; + +/* Video */ +typedef struct vout_thread_t vout_thread_t; +typedef struct vlc_viewpoint_t vlc_viewpoint_t; + +typedef video_format_t video_frame_format_t; +typedef struct picture_t picture_t; +typedef struct picture_sys_t picture_sys_t; + +/* Subpictures */ +typedef struct spu_t spu_t; +typedef struct subpicture_t subpicture_t; +typedef struct subpicture_region_t subpicture_region_t; + +typedef struct image_handler_t image_handler_t; + +/* Stream output */ +typedef struct sout_instance_t sout_instance_t; + +typedef struct sout_input_t sout_input_t; +typedef struct sout_packetizer_input_t sout_packetizer_input_t; + +typedef struct sout_access_out_t sout_access_out_t; +typedef struct sout_access_out_sys_t sout_access_out_sys_t; + +typedef struct sout_mux_t sout_mux_t; +typedef struct sout_mux_sys_t sout_mux_sys_t; + +typedef struct sout_stream_t sout_stream_t; +typedef struct sout_stream_sys_t sout_stream_sys_t; + +typedef struct config_chain_t config_chain_t; +typedef struct session_descriptor_t session_descriptor_t; + +/* Decoders */ +typedef struct decoder_t decoder_t; +typedef struct decoder_sys_t decoder_sys_t; +typedef struct decoder_synchro_t decoder_synchro_t; + +/* Encoders */ +typedef struct encoder_t encoder_t; +typedef struct encoder_sys_t encoder_sys_t; + +/* Filters */ +typedef struct filter_t filter_t; +typedef struct filter_sys_t filter_sys_t; + +/* Network */ +typedef struct vlc_url_t vlc_url_t; + +/* Misc */ +typedef struct iso639_lang_t iso639_lang_t; + +/* block */ +typedef struct block_t block_t; +typedef struct block_fifo_t block_fifo_t; + +/* Hashing */ +typedef struct md5_s md5_t; + +/* XML */ +typedef struct xml_t xml_t; +typedef struct xml_sys_t xml_sys_t; +typedef struct xml_reader_t xml_reader_t; +typedef struct xml_reader_sys_t xml_reader_sys_t; + +/* vod server */ +typedef struct vod_t vod_t; +typedef struct vod_sys_t vod_sys_t; +typedef struct vod_media_t vod_media_t; + +/* VLM */ +typedef struct vlm_t vlm_t; +typedef struct vlm_message_t vlm_message_t; + +/* misc */ +typedef struct vlc_meta_t vlc_meta_t; +typedef struct input_stats_t input_stats_t; +typedef struct addon_entry_t addon_entry_t; + +/* Update */ +typedef struct update_t update_t; + +/** + * VLC value structure + */ +typedef union +{ + int64_t i_int; + bool b_bool; + float f_float; + char * psz_string; + void * p_address; + vlc_list_t * p_list; + struct { int32_t x; int32_t y; } coords; + +} vlc_value_t; + +/** + * VLC list structure + */ +struct vlc_list_t +{ + int i_type; + int i_count; + vlc_value_t *p_values; +}; + +/***************************************************************************** + * Error values (shouldn't be exposed) + *****************************************************************************/ +#define VLC_SUCCESS (-0) /**< No error */ +#define VLC_EGENERIC (-1) /**< Unspecified error */ +#define VLC_ENOMEM (-2) /**< Not enough memory */ +#define VLC_ETIMEOUT (-3) /**< Timeout */ +#define VLC_ENOMOD (-4) /**< Module not found */ +#define VLC_ENOOBJ (-5) /**< Object not found */ +#define VLC_ENOVAR (-6) /**< Variable not found */ +#define VLC_EBADVAR (-7) /**< Bad variable value */ +#define VLC_ENOITEM (-8) /**< Item not found */ + +/***************************************************************************** + * Variable callbacks: called when the value is modified + *****************************************************************************/ +typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ + char const *, /* variable name */ + vlc_value_t, /* old value */ + vlc_value_t, /* new value */ + void * ); /* callback data */ + +/***************************************************************************** + * List callbacks: called when elements are added/removed from the list + *****************************************************************************/ +typedef int ( * vlc_list_callback_t ) ( vlc_object_t *, /* variable's object */ + char const *, /* variable name */ + int, /* VLC_VAR_* action */ + vlc_value_t *, /* new/deleted value */ + void *); /* callback data */ + +/***************************************************************************** + * OS-specific headers and thread types + *****************************************************************************/ +#if defined( _WIN32 ) +# include +# ifndef PATH_MAX +# define PATH_MAX MAX_PATH +# endif +# include +#endif + +#ifdef __APPLE__ +#include +#include +#endif + +#ifdef __OS2__ +# define OS2EMX_PLAIN_CHAR +# define INCL_BASE +# define INCL_PM +# include +# include +#endif + +#include "vlc_mtime.h" +#include "vlc_threads.h" + +/** + * Common structure members + *****************************************************************************/ + +/** + * VLC object common members + * + * Common public properties for all VLC objects. + * Object also have private properties maintained by the core, see + * \ref vlc_object_internals_t + */ +struct vlc_common_members +{ + /** Object type name + * + * A constant string identifying the type of the object (for logging) + */ + const char *object_type; + + /** Log messages header + * + * Human-readable header for log messages. This is not thread-safe and + * only used by VLM and Lua interfaces. + */ + char *header; + + int flags; + + /** Module probe flag + * + * A boolean during module probing when the probe is "forced". + * See \ref module_need(). + */ + bool force; + + /** LibVLC instance + * + * Root VLC object of the objects tree that this object belongs in. + */ + libvlc_int_t *libvlc; + + /** Parent object + * + * The parent VLC object in the objects tree. For the root (the LibVLC + * instance) object, this is NULL. + */ + vlc_object_t *parent; +}; + +/** + * Backward compatibility macro + */ +#define VLC_COMMON_MEMBERS struct vlc_common_members obj; + +/** + * Type-safe vlc_object_t cast + * + * This macro attempts to cast a pointer to a compound type to a + * \ref vlc_object_t pointer in a type-safe manner. + * It checks if the compound type actually starts with an embedded + * \ref vlc_object_t structure. + */ +#if !defined(__cplusplus) +# define VLC_OBJECT(x) \ + _Generic((x)->obj, \ + struct vlc_common_members: (vlc_object_t *)(&(x)->obj), \ + const struct vlc_common_members: (const vlc_object_t *)(&(x)->obj) \ + ) +#else +# define VLC_OBJECT( x ) ((vlc_object_t *)&(x)->obj) +#endif + +/***************************************************************************** + * Macros and inline functions + *****************************************************************************/ + +/* __MAX and __MIN: self explanatory */ +#ifndef __MAX +# define __MAX(a, b) ( ((a) > (b)) ? (a) : (b) ) +#endif +#ifndef __MIN +# define __MIN(a, b) ( ((a) < (b)) ? (a) : (b) ) +#endif + +/* clip v in [min, max] */ +#define VLC_CLIP(v, min, max) __MIN(__MAX((v), (min)), (max)) + +VLC_USED +static inline int64_t GCD ( int64_t a, int64_t b ) +{ + while( b ) + { + int64_t c = a % b; + a = b; + b = c; + } + return a; +} + +/* function imported from libavutil/common.h */ +VLC_USED +static inline uint8_t clip_uint8_vlc( int32_t a ) +{ + if( a&(~255) ) return (-a)>>31; + else return a; +} + +/** Count leading zeroes */ +VLC_USED +static inline unsigned (clz)(unsigned x) +{ +#ifdef __GNUC__ + return __builtin_clz (x); +#else + unsigned i = sizeof (x) * 8; + + while (x) + { + x >>= 1; + i--; + } + return i; +#endif +} + +#define clz8( x ) (clz(x) - ((sizeof(unsigned) - sizeof (uint8_t)) * 8)) +#define clz16( x ) (clz(x) - ((sizeof(unsigned) - sizeof (uint16_t)) * 8)) +/* XXX: this assumes that int is 32-bits or more */ +#define clz32( x ) (clz(x) - ((sizeof(unsigned) - sizeof (uint32_t)) * 8)) + +/** Count trailing zeroes */ +VLC_USED +static inline unsigned (ctz)(unsigned x) +{ +#ifdef __GNUC__ + return __builtin_ctz (x); +#else + unsigned i = sizeof (x) * 8; + + while (x) + { + x <<= 1; + i--; + } + return i; +#endif +} + +#if !defined(__NetBSD__) +/** Bit weight */ +VLC_USED +static inline unsigned (popcount)(unsigned x) +{ +#ifdef __GNUC__ + return __builtin_popcount (x); +#else + unsigned count = 0; + while (x) + { + count += x & 1; + x = x >> 1; + } + return count; +#endif +} + +/** Bit weight of long long */ +VLC_USED +static inline int (popcountll)(unsigned long long x) +{ +#ifdef __GNUC__ + return __builtin_popcountll(x); +#else + int count = 0; + while (x) + { + count += x & 1; + x = x >> 1; + } + return count; +#endif +} +#endif + +VLC_USED +static inline unsigned (parity)(unsigned x) +{ +#ifdef __GNUC__ + return __builtin_parity (x); +#else + for (unsigned i = 4 * sizeof (x); i > 0; i /= 2) + x ^= x >> i; + return x & 1; +#endif +} + +#if !defined(__NetBSD__) +/** Byte swap (16 bits) */ +VLC_USED +static inline uint16_t (bswap16)(uint16_t x) +{ + return (x << 8) | (x >> 8); +} + +/** Byte swap (32 bits) */ +VLC_USED +static inline uint32_t (bswap32)(uint32_t x) +{ +#if defined (__GNUC__) || defined(__clang__) + return __builtin_bswap32 (x); +#else + return ((x & 0x000000FF) << 24) + | ((x & 0x0000FF00) << 8) + | ((x & 0x00FF0000) >> 8) + | ((x & 0xFF000000) >> 24); +#endif +} + +/** Byte swap (64 bits) */ +VLC_USED +static inline uint64_t (bswap64)(uint64_t x) +{ +#if defined (__GNUC__) || defined(__clang__) + return __builtin_bswap64 (x); +#elif !defined (__cplusplus) + return ((x & 0x00000000000000FF) << 56) + | ((x & 0x000000000000FF00) << 40) + | ((x & 0x0000000000FF0000) << 24) + | ((x & 0x00000000FF000000) << 8) + | ((x & 0x000000FF00000000) >> 8) + | ((x & 0x0000FF0000000000) >> 24) + | ((x & 0x00FF000000000000) >> 40) + | ((x & 0xFF00000000000000) >> 56); +#else + return ((x & 0x00000000000000FFULL) << 56) + | ((x & 0x000000000000FF00ULL) << 40) + | ((x & 0x0000000000FF0000ULL) << 24) + | ((x & 0x00000000FF000000ULL) << 8) + | ((x & 0x000000FF00000000ULL) >> 8) + | ((x & 0x0000FF0000000000ULL) >> 24) + | ((x & 0x00FF000000000000ULL) >> 40) + | ((x & 0xFF00000000000000ULL) >> 56); +#endif +} +#endif + +/* Integer overflow */ +static inline bool uadd_overflow(unsigned a, unsigned b, unsigned *res) +{ +#if VLC_GCC_VERSION(5,0) || defined(__clang__) + return __builtin_uadd_overflow(a, b, res); +#else + *res = a + b; + return (a + b) < a; +#endif +} + +static inline bool uaddl_overflow(unsigned long a, unsigned long b, + unsigned long *res) +{ +#if VLC_GCC_VERSION(5,0) || defined(__clang__) + return __builtin_uaddl_overflow(a, b, res); +#else + *res = a + b; + return (a + b) < a; +#endif +} + +static inline bool uaddll_overflow(unsigned long long a, unsigned long long b, + unsigned long long *res) +{ +#if VLC_GCC_VERSION(5,0) || defined(__clang__) + return __builtin_uaddll_overflow(a, b, res); +#else + *res = a + b; + return (a + b) < a; +#endif +} + +#ifndef __cplusplus +# define add_overflow(a,b,r) \ + _Generic(*(r), \ + unsigned: uadd_overflow(a, b, (unsigned *)(r)), \ + unsigned long: uaddl_overflow(a, b, (unsigned long *)(r)), \ + unsigned long long: uaddll_overflow(a, b, (unsigned long long *)(r))) +#else +static inline bool add_overflow(unsigned a, unsigned b, unsigned *res) +{ + return uadd_overflow(a, b, res); +} + +static inline bool add_overflow(unsigned long a, unsigned long b, + unsigned long *res) +{ + return uaddl_overflow(a, b, res); +} + +static inline bool add_overflow(unsigned long long a, unsigned long long b, + unsigned long long *res) +{ + return uaddll_overflow(a, b, res); +} +#endif + +#if !(VLC_GCC_VERSION(5,0) || defined(__clang__)) +# include +#endif + +static inline bool umul_overflow(unsigned a, unsigned b, unsigned *res) +{ +#if VLC_GCC_VERSION(5,0) || defined(__clang__) + return __builtin_umul_overflow(a, b, res); +#else + *res = a * b; + return b > 0 && a > (UINT_MAX / b); +#endif +} + +static inline bool umull_overflow(unsigned long a, unsigned long b, + unsigned long *res) +{ +#if VLC_GCC_VERSION(5,0) || defined(__clang__) + return __builtin_umull_overflow(a, b, res); +#else + *res = a * b; + return b > 0 && a > (ULONG_MAX / b); +#endif +} + +static inline bool umulll_overflow(unsigned long long a, unsigned long long b, + unsigned long long *res) +{ +#if VLC_GCC_VERSION(5,0) || defined(__clang__) + return __builtin_umulll_overflow(a, b, res); +#else + *res = a * b; + return b > 0 && a > (ULLONG_MAX / b); +#endif +} + +#ifndef __cplusplus +#define mul_overflow(a,b,r) \ + _Generic(*(r), \ + unsigned: umul_overflow(a, b, (unsigned *)(r)), \ + unsigned long: umull_overflow(a, b, (unsigned long *)(r)), \ + unsigned long long: umulll_overflow(a, b, (unsigned long long *)(r))) +#else +static inline bool mul_overflow(unsigned a, unsigned b, unsigned *res) +{ + return umul_overflow(a, b, res); +} + +static inline bool mul_overflow(unsigned long a, unsigned long b, + unsigned long *res) +{ + return umull_overflow(a, b, res); +} + +static inline bool mul_overflow(unsigned long long a, unsigned long long b, + unsigned long long *res) +{ + return umulll_overflow(a, b, res); +} +#endif + +/* Free and set set the variable to NULL */ +#define FREENULL(a) do { free( a ); a = NULL; } while(0) + +#define EMPTY_STR(str) (!str || !*str) + +VLC_API char const * vlc_error( int ) VLC_USED; + +#include + +/* MSB (big endian)/LSB (little endian) conversions - network order is always + * MSB, and should be used for both network communications and files. */ + +#ifdef WORDS_BIGENDIAN +# define hton16(i) ((uint16_t)(i)) +# define hton32(i) ((uint32_t)(i)) +# define hton64(i) ((uint64_t)(i)) +#else +# define hton16(i) bswap16(i) +# define hton32(i) bswap32(i) +# define hton64(i) bswap64(i) +#endif +#define ntoh16(i) hton16(i) +#define ntoh32(i) hton32(i) +#define ntoh64(i) hton64(i) + +/** Reads 16 bits in network byte order */ +VLC_USED +static inline uint16_t U16_AT (const void *p) +{ + uint16_t x; + + memcpy (&x, p, sizeof (x)); + return ntoh16 (x); +} + +/** Reads 32 bits in network byte order */ +VLC_USED +static inline uint32_t U32_AT (const void *p) +{ + uint32_t x; + + memcpy (&x, p, sizeof (x)); + return ntoh32 (x); +} + +/** Reads 64 bits in network byte order */ +VLC_USED +static inline uint64_t U64_AT (const void *p) +{ + uint64_t x; + + memcpy (&x, p, sizeof (x)); + return ntoh64 (x); +} + +#define GetWBE(p) U16_AT(p) +#define GetDWBE(p) U32_AT(p) +#define GetQWBE(p) U64_AT(p) + +/** Reads 16 bits in little-endian order */ +VLC_USED +static inline uint16_t GetWLE (const void *p) +{ + uint16_t x; + + memcpy (&x, p, sizeof (x)); +#ifdef WORDS_BIGENDIAN + x = bswap16 (x); +#endif + return x; +} + +/** Reads 32 bits in little-endian order */ +VLC_USED +static inline uint32_t GetDWLE (const void *p) +{ + uint32_t x; + + memcpy (&x, p, sizeof (x)); +#ifdef WORDS_BIGENDIAN + x = bswap32 (x); +#endif + return x; +} + +/** Reads 64 bits in little-endian order */ +VLC_USED +static inline uint64_t GetQWLE (const void *p) +{ + uint64_t x; + + memcpy (&x, p, sizeof (x)); +#ifdef WORDS_BIGENDIAN + x = bswap64 (x); +#endif + return x; +} + +/** Writes 16 bits in network byte order */ +static inline void SetWBE (void *p, uint16_t w) +{ + w = hton16 (w); + memcpy (p, &w, sizeof (w)); +} + +/** Writes 32 bits in network byte order */ +static inline void SetDWBE (void *p, uint32_t dw) +{ + dw = hton32 (dw); + memcpy (p, &dw, sizeof (dw)); +} + +/** Writes 64 bits in network byte order */ +static inline void SetQWBE (void *p, uint64_t qw) +{ + qw = hton64 (qw); + memcpy (p, &qw, sizeof (qw)); +} + +/** Writes 16 bits in little endian order */ +static inline void SetWLE (void *p, uint16_t w) +{ +#ifdef WORDS_BIGENDIAN + w = bswap16 (w); +#endif + memcpy (p, &w, sizeof (w)); +} + +/** Writes 32 bits in little endian order */ +static inline void SetDWLE (void *p, uint32_t dw) +{ +#ifdef WORDS_BIGENDIAN + dw = bswap32 (dw); +#endif + memcpy (p, &dw, sizeof (dw)); +} + +/** Writes 64 bits in little endian order */ +static inline void SetQWLE (void *p, uint64_t qw) +{ +#ifdef WORDS_BIGENDIAN + qw = bswap64 (qw); +#endif + memcpy (p, &qw, sizeof (qw)); +} + +/* */ +#define VLC_UNUSED(x) (void)(x) + +/* Stuff defined in src/extras/libc.c */ + +#if defined(_WIN32) +/* several type definitions */ +# if defined( __MINGW32__ ) +# if !defined( _OFF_T_ ) + typedef long long _off_t; + typedef _off_t off_t; +# define _OFF_T_ +# else +# ifdef off_t +# undef off_t +# endif +# define off_t long long +# endif +# endif + +# ifndef O_NONBLOCK +# define O_NONBLOCK 0 +# endif + +/* the mingw32 swab() and win32 _swab() prototypes expect a char* instead of a + const void* */ +# define swab(a,b,c) swab((char*) (a), (char*) (b), (c)) + + +# include +#endif /* _WIN32 */ + +typedef struct { + unsigned num, den; +} vlc_rational_t; + +VLC_API bool vlc_ureduce( unsigned *, unsigned *, uint64_t, uint64_t, uint64_t ); + +#define container_of(ptr, type, member) \ + ((type *)(((char *)(ptr)) - offsetof(type, member))) + +VLC_USED VLC_MALLOC +static inline void *vlc_alloc(size_t count, size_t size) +{ + return mul_overflow(count, size, &size) ? NULL : malloc(size); +} + +/***************************************************************************** + * I18n stuff + *****************************************************************************/ +VLC_API char *vlc_gettext( const char *msgid ) VLC_FORMAT_ARG(1); +VLC_API char *vlc_ngettext( const char *s, const char *p, unsigned long n ) VLC_FORMAT_ARG(1) VLC_FORMAT_ARG(2); + +#define vlc_pgettext( ctx, id ) \ + vlc_pgettext_aux( ctx "\004" id, id ) + +VLC_FORMAT_ARG(2) +static inline const char *vlc_pgettext_aux( const char *ctx, const char *id ) +{ + const char *tr = vlc_gettext( ctx ); + return (tr == ctx) ? id : tr; +} + +/***************************************************************************** + * Loosy memory allocation functions. Do not use in new code. + *****************************************************************************/ +static inline void *xmalloc(size_t len) +{ + void *ptr = malloc(len); + if (unlikely(ptr == NULL && len > 0)) + abort(); + return ptr; +} + +static inline void *xrealloc(void *ptr, size_t len) +{ + void *nptr = realloc(ptr, len); + if (unlikely(nptr == NULL && len > 0)) + abort(); + return nptr; +} + +static inline void *xcalloc(size_t n, size_t size) +{ + void *ptr = calloc(n, size); + if (unlikely(ptr == NULL && (n > 0 || size > 0))) + abort (); + return ptr; +} + +static inline char *xstrdup (const char *str) +{ + char *ptr = strdup (str); + if (unlikely(ptr == NULL)) + abort (); + return ptr; +} + +/***************************************************************************** + * libvlc features + *****************************************************************************/ +VLC_API const char * VLC_CompileBy( void ) VLC_USED; +VLC_API const char * VLC_CompileHost( void ) VLC_USED; +VLC_API const char * VLC_Compiler( void ) VLC_USED; + +/***************************************************************************** + * Additional vlc stuff + *****************************************************************************/ +#include "vlc_messages.h" +#include "vlc_objects.h" +#include "vlc_variables.h" +#include "vlc_main.h" +#include "vlc_configuration.h" + +#if defined( _WIN32 ) || defined( __OS2__ ) +# define DIR_SEP_CHAR '\\' +# define DIR_SEP "\\" +# define PATH_SEP_CHAR ';' +# define PATH_SEP ";" +#else +# define DIR_SEP_CHAR '/' +# define DIR_SEP "/" +# define PATH_SEP_CHAR ':' +# define PATH_SEP ":" +#endif + +#define LICENSE_MSG \ + _("This program comes with NO WARRANTY, to the extent permitted by " \ + "law.\nYou may redistribute it under the terms of the GNU General " \ + "Public License;\nsee the file named COPYING for details.\n" \ + "Written by the VideoLAN team; see the AUTHORS file.\n") + +#endif /* !VLC_COMMON_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_config.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_config.h new file mode 100644 index 0000000..50b4887 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_config.h @@ -0,0 +1,114 @@ +/***************************************************************************** + * vlc_config.h: limits and configuration + * Defines all compilation-time configuration constants and size limits + ***************************************************************************** + * Copyright (C) 1999-2003 VLC authors and VideoLAN + * + * Authors: Vincent Seguin + * Samuel Hocevar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * \file + * This file defines of values used in interface, vout, aout and vlc core functions. + */ + +/* Conventions regarding names of symbols and variables + * ---------------------------------------------------- + * + * - Symbols should begin with a prefix indicating in which module they are + * used, such as INTF_, VOUT_ or AOUT_. + */ + +/***************************************************************************** + * General configuration + *****************************************************************************/ + +/* All timestamp below or equal to this define are invalid/unset + * XXX the numerical value is 0 because of historical reason and will change.*/ +#define VLC_TS_INVALID INT64_C(0) +#define VLC_TS_0 INT64_C(1) + +#define CLOCK_FREQ INT64_C(1000000) + +/***************************************************************************** + * Interface configuration + *****************************************************************************/ + +/* Base delay in micro second for interface sleeps */ +#define INTF_IDLE_SLEEP (CLOCK_FREQ/20) + +/***************************************************************************** + * Input thread configuration + *****************************************************************************/ + +/* Used in ErrorThread */ +#define INPUT_IDLE_SLEEP (CLOCK_FREQ/10) + +/* + * General limitations + */ + +/* Duration between the time we receive the data packet, and the time we will + * mark it to be presented */ +#define DEFAULT_PTS_DELAY (3*CLOCK_FREQ/10) + +/***************************************************************************** + * SPU configuration + *****************************************************************************/ + +/* Buffer must avoid arriving more than SPU_MAX_PREPARE_TIME in advanced to + * the SPU */ +#define SPU_MAX_PREPARE_TIME (CLOCK_FREQ/2) + +/***************************************************************************** + * Video configuration + *****************************************************************************/ + +/* + * Default settings for video output threads + */ + +/* Multiplier value for aspect ratio calculation (2^7 * 3^3 * 5^3) */ +#define VOUT_ASPECT_FACTOR 432000 + +/* Maximum width of a scaled source picture - this should be relatively high, + * since higher stream values will result in no display at all. */ +#define VOUT_MAX_WIDTH 4096 + +/* Number of planes in a picture */ +#define VOUT_MAX_PLANES 5 + +/* + * Time settings + */ + +/* Time to sleep when waiting for a buffer (from vout or the video fifo). + * It should be approximately the time needed to perform a complete picture + * loop. Since it only happens when the video heap is full, it does not need + * to be too low, even if it blocks the decoder. */ +#define VOUT_OUTMEM_SLEEP (CLOCK_FREQ/50) + +/* The default video output window title */ +#define VOUT_TITLE "VLC" + +/***************************************************************************** + * Messages and console interfaces configuration + *****************************************************************************/ + +/* Maximal depth of the object tree output by vlc_dumpstructure */ +#define MAX_DUMPSTRUCTURE_DEPTH 100 diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_config_cat.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_config_cat.h new file mode 100644 index 0000000..55d2e46 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_config_cat.h @@ -0,0 +1,271 @@ +/***************************************************************************** + * vlc_config_cat.h : Definition of configuration categories + ***************************************************************************** + * Copyright (C) 2003 VLC authors and VideoLAN + * $Id$ + * + * Authors: Clément Stenac + * Anil Daoud + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_HELP_H +#define VLC_HELP_H 1 +# include + +/* + * First, we need help strings for the General Settings and for the + * Plugins screen + */ +#define MAIN_TITLE N_( "VLC preferences" ) +#define MAIN_HELP N_( \ + "Select \"Advanced Options\" to see all options." ) + +/* Interface */ +#define INTF_TITLE N_("Interface") +#define INTF_HELP N_( "Settings for VLC's interfaces" ) + +#define INTF_GENERAL_HELP N_( "Main interfaces settings" ) + +#define INTF_MAIN_TITLE N_( "Main interfaces" ) +#define INTF_MAIN_HELP N_( "Settings for the main interface" ) + +#define INTF_CONTROL_TITLE N_( "Control interfaces" ) +#define INTF_CONTROL_HELP N_( "Settings for VLC's control interfaces" ) + +#define INTF_HOTKEYS_TITLE N_( "Hotkeys settings" ) +#define INTF_HOTKEYS_HELP N_( "Hotkeys settings" ) + +/* Audio */ +#define AUDIO_TITLE N_( "Audio" ) +#define AUDIO_HELP N_( "Audio settings" ) + +#define AUDIO_GENERAL_HELP N_("General audio settings") + +#define AFILTER_TITLE N_("Filters") +#define AFILTER_HELP N_( "Audio filters are used to process the audio stream." ) + +#define ARESAMPLER_TITLE N_("Audio resampler") + +#define AVISUAL_TITLE N_("Visualizations") +#define AVISUAL_HELP N_( "Audio visualizations" ) + +#define AOUT_TITLE N_( "Output modules" ) +#define AOUT_HELP N_("General settings for audio output modules.") + +#define AMISC_TITLE N_("Miscellaneous") +#define AMISC_HELP N_( "Miscellaneous audio settings and modules." ) + +/* Video */ +#define VIDEO_TITLE N_("Video") +#define VIDEO_HELP N_("Video settings") + +#define VIDEO_GENERAL_HELP N_( "General video settings" ) + +#define _VOUT_TITLE N_("Output modules" ) +#define VOUT_HELP N_("General settings for video output modules.") + +#define VFILTER_TITLE N_("Filters" ) +#define VFILTER_HELP N_("Video filters are used to process the video stream." ) + +#define SUBPIC_TITLE N_( "Subtitles / OSD") +#define SUBPIC_HELP N_( "Settings related to On-Screen-Display,"\ + " subtitles and \"overlay subpictures\"") + +#define SPLITTER_TITLE N_("Splitters") +#define SPLITTER_HELP N_("Video splitters separate the stream into multiple videos.") + +/* +#define TEXT_HELP N_( \ + "Use the settings of the \"freetype\" module to choose the font you " \ + "want VLC to use for text rendering (to display subtitles for example).") +*/ +/* Input */ +#define INPUT_TITLE N_( "Input / Codecs" ) +#define INPUT_HELP N_( "Settings for input, demultiplexing, " \ + "decoding and encoding") + +#define ACCESS_TITLE N_( "Access modules" ) +#define ACCESS_HELP N_( \ + "Settings related to the various access methods. " \ + "Common settings you may want to alter are HTTP proxy or " \ + "caching settings." ) + +#define STREAM_FILTER_TITLE N_( "Stream filters" ) +#define STREAM_FILTER_HELP N_( \ + "Stream filters are special modules that allow advanced operations on " \ + "the input side of VLC. Use with care..." ) + +#define DEMUX_TITLE N_("Demuxers") +#define DEMUX_HELP N_( "Demuxers are used to separate audio and video streams." ) + +#define VDEC_TITLE N_( "Video codecs" ) +#define VDEC_HELP N_( "Settings for the video, images or video+audio decoders and encoders." ) + +#define ADEC_TITLE N_( "Audio codecs" ) +#define ADEC_HELP N_( "Settings for the audio-only decoders and encoders." ) + +#define SDEC_TITLE N_( "Subtitle codecs") +#define SDEC_HELP N_( "Settings for subtitle, teletext and CC decoders and encoders." ) + +#define ADVANCED_HELP N_( "General input settings. Use with care..." ) + +/* Sout */ +#define SOUT_TITLE N_( "Stream output" ) +#define SOUT_HELP N_( \ + "Stream output settings are used when acting as a streaming server " \ + "or when saving incoming streams.\n" \ + "Streams are first muxed and then sent through an \"access output\" "\ + "module that can either save the stream to a file, or stream " \ + "it (UDP, HTTP, RTP/RTSP).\n" \ + "Sout streams modules allow advanced stream processing (transcoding, "\ + "duplicating...).") + +#define SOUT_GENERAL_HELP N_( "General stream output settings") + +#define SOUT_MUX_TITLE N_( "Muxers" ) +#define SOUT_MUX_HELP N_( \ + "Muxers create the encapsulation formats that are used to " \ + "put all the elementary streams (video, audio, ...) " \ + "together. This setting allows you to always force a specific muxer. " \ + "You should probably not do that.\n" \ + "You can also set default parameters for each muxer." ) + +#define SOUT_ACO_TITLE N_( "Access output" ) +#define SOUT_ACO_HELP N_( \ + "Access output modules control the ways the muxed streams are sent. " \ + "This setting allows you to always force a specific access output method. " \ + "You should probably not do that.\n" \ + "You can also set default parameters for each access output.") + +#define SOUT_PACKET_TITLE N_( "Packetizers" ) +#define SOUT_PACKET_HELP N_( \ + "Packetizers are used to \"preprocess\" the elementary "\ + "streams before muxing. " \ + "This setting allows you to always force a packetizer. " \ + "You should probably not do that.\n" \ + "You can also set default parameters for each packetizer." ) + +#define SOUT_STREAM_TITLE N_("Sout stream") +#define SOUT_STREAM_HELP N_( "Sout stream modules allow to build a sout " \ + "processing chain. Please refer to the Streaming Howto for " \ + "more information. You can configure default options for " \ + "each sout stream module here.") + +#define SOUT_VOD_TITLE N_( "VOD" ) +#define SOUT_VOD_HELP N_( "VLC's implementation of Video On Demand" ) + + +/* Playlist */ +#define PLAYLIST_TITLE N_( "Playlist" ) +#define PLAYLIST_HELP N_( "Settings related to playlist behaviour " \ + "(e.g. playback mode) and to modules that automatically add "\ + "items to the playlist (\"service discovery\" modules).") + +#define PGENERAL_HELP N_( "General playlist behaviour") +#define SD_TITLE N_("Services discovery") +#define SD_HELP N_("Services discovery modules are facilities "\ + "that automatically add items to playlist.") + +/* Advanced */ +#define AADVANCED_TITLE N_( "Advanced" ) +#define AADVANCED_HELP N_( "Advanced settings. Use with care...") + +#define MISC_TITLE N_( "Advanced settings" ) + +/* This function is deprecated and is kept only for compatibility */ +static const struct config_category_t categories_array[] = +{ + /* Interface */ + { CAT_INTERFACE, INTF_TITLE, INTF_HELP }, + { SUBCAT_INTERFACE_GENERAL, INTF_TITLE, INTF_GENERAL_HELP }, + { SUBCAT_INTERFACE_MAIN, INTF_MAIN_TITLE, INTF_MAIN_HELP }, + { SUBCAT_INTERFACE_CONTROL, INTF_CONTROL_TITLE, INTF_CONTROL_HELP }, + { SUBCAT_INTERFACE_HOTKEYS, INTF_HOTKEYS_TITLE, INTF_HOTKEYS_HELP }, + + { CAT_AUDIO, AUDIO_TITLE, AUDIO_HELP }, + { SUBCAT_AUDIO_GENERAL, AUDIO_TITLE, AUDIO_GENERAL_HELP }, + { SUBCAT_AUDIO_AOUT, AOUT_TITLE, AOUT_HELP }, + { SUBCAT_AUDIO_AFILTER, AFILTER_TITLE, AFILTER_HELP }, + { SUBCAT_AUDIO_RESAMPLER, ARESAMPLER_TITLE, AFILTER_HELP }, + { SUBCAT_AUDIO_VISUAL, AVISUAL_TITLE, AVISUAL_HELP }, + { SUBCAT_AUDIO_MISC, AMISC_TITLE, AMISC_HELP }, + + { CAT_VIDEO, VIDEO_TITLE, VIDEO_HELP }, + { SUBCAT_VIDEO_GENERAL, VIDEO_TITLE, VIDEO_GENERAL_HELP }, + { SUBCAT_VIDEO_VOUT, _VOUT_TITLE, VOUT_HELP }, + { SUBCAT_VIDEO_VFILTER, VFILTER_TITLE, VFILTER_HELP }, + { SUBCAT_VIDEO_SUBPIC, SUBPIC_TITLE, SUBPIC_HELP }, + { SUBCAT_VIDEO_SPLITTER, SPLITTER_TITLE, SPLITTER_HELP }, + + { CAT_INPUT, INPUT_TITLE, INPUT_HELP }, + { SUBCAT_INPUT_GENERAL, INPUT_TITLE, INPUT_HELP }, + { SUBCAT_INPUT_ACCESS, ACCESS_TITLE, ACCESS_HELP }, + { SUBCAT_INPUT_DEMUX, DEMUX_TITLE, DEMUX_HELP }, + { SUBCAT_INPUT_VCODEC, VDEC_TITLE, VDEC_HELP }, + { SUBCAT_INPUT_ACODEC, ADEC_TITLE, ADEC_HELP }, + { SUBCAT_INPUT_SCODEC, SDEC_TITLE, SDEC_HELP }, + { SUBCAT_INPUT_STREAM_FILTER, STREAM_FILTER_TITLE, STREAM_FILTER_HELP }, + + { CAT_SOUT, SOUT_TITLE, SOUT_HELP }, + { SUBCAT_SOUT_GENERAL, SOUT_TITLE, SOUT_GENERAL_HELP }, + { SUBCAT_SOUT_STREAM, SOUT_STREAM_TITLE, SOUT_STREAM_HELP }, + { SUBCAT_SOUT_MUX, SOUT_MUX_TITLE, SOUT_MUX_HELP }, + { SUBCAT_SOUT_ACO, SOUT_ACO_TITLE, SOUT_ACO_HELP }, + { SUBCAT_SOUT_PACKETIZER, SOUT_PACKET_TITLE, SOUT_PACKET_HELP }, + { SUBCAT_SOUT_VOD, SOUT_VOD_TITLE, SOUT_VOD_HELP }, + + { CAT_PLAYLIST, PLAYLIST_TITLE , PLAYLIST_HELP }, + { SUBCAT_PLAYLIST_GENERAL, PLAYLIST_TITLE, PGENERAL_HELP }, + { SUBCAT_PLAYLIST_SD, SD_TITLE, SD_HELP }, + + { CAT_ADVANCED, AADVANCED_TITLE, AADVANCED_HELP }, + { SUBCAT_ADVANCED_MISC, MISC_TITLE, AADVANCED_HELP }, + + { -1, NULL, NULL } +}; + +VLC_USED +static inline const char *config_CategoryNameGet( int i_value ) +{ + int i = 0; + while( categories_array[i].psz_name != NULL ) + { + if( categories_array[i].i_id == i_value ) + { + return vlc_gettext(categories_array[i].psz_name); + } + i++; + } + return NULL; +} + +VLC_USED +static inline const char *config_CategoryHelpGet( int i_value ) +{ + int i = 0; + while( categories_array[i].psz_help != NULL ) + { + if( categories_array[i].i_id == i_value ) + { + return vlc_gettext(categories_array[i].psz_help); + } + i++; + } + return NULL; +} + +#endif /* VLC_HELP_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_configuration.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_configuration.h new file mode 100644 index 0000000..2091686 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_configuration.h @@ -0,0 +1,237 @@ +/***************************************************************************** + * vlc_configuration.h : configuration management module + * This file describes the programming interface for the configuration module. + * It includes functions allowing to declare, get or set configuration options. + ***************************************************************************** + * Copyright (C) 1999-2006 VLC authors and VideoLAN + * $Id$ + * + * Authors: Gildas Bazin + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_CONFIGURATION_H +#define VLC_CONFIGURATION_H 1 + +/** + * \file + * This file describes the programming interface for the configuration module. + * It includes functions allowing to declare, get or set configuration options. + */ + +#include /* for ssize_t */ + +# ifdef __cplusplus +extern "C" { +# endif + +struct config_category_t +{ + int i_id; + const char *psz_name; + const char *psz_help; +}; + +typedef union +{ + char *psz; + int64_t i; + float f; +} module_value_t; + +typedef int (*vlc_string_list_cb)(vlc_object_t *, const char *, + char ***, char ***); +typedef int (*vlc_integer_list_cb)(vlc_object_t *, const char *, + int64_t **, char ***); + +struct module_config_t +{ + uint8_t i_type; /* Configuration type */ + char i_short; /* Optional short option name */ + unsigned b_advanced:1; /* Advanced option */ + unsigned b_internal:1; /* Hidden from prefs and help */ + unsigned b_unsaveable:1; /* Not stored in configuration */ + unsigned b_safe:1; /* Safe in web plugins and playlists */ + unsigned b_removed:1; /* Deprecated */ + + const char *psz_type; /* Configuration subtype */ + const char *psz_name; /* Option name */ + const char *psz_text; /* Short comment on the configuration option */ + const char *psz_longtext; /* Long comment on the configuration option */ + + module_value_t value; /* Option value */ + module_value_t orig; + module_value_t min; + module_value_t max; + + /* Values list */ + uint16_t list_count; /* Options list size */ + union + { + const char **psz; /* List of possible values for the option */ + const int *i; + vlc_string_list_cb psz_cb; + vlc_integer_list_cb i_cb; + } list; + const char **list_text; /* Friendly names for list values */ + const char *list_cb_name; + void *owner; +}; + +/***************************************************************************** + * Prototypes - these methods are used to get, set or manipulate configuration + * data. + *****************************************************************************/ +VLC_API int config_GetType(const char *) VLC_USED; +VLC_API int64_t config_GetInt(vlc_object_t *, const char *) VLC_USED; +VLC_API void config_PutInt(vlc_object_t *, const char *, int64_t); +VLC_API float config_GetFloat(vlc_object_t *, const char *) VLC_USED; +VLC_API void config_PutFloat(vlc_object_t *, const char *, float); +VLC_API char * config_GetPsz(vlc_object_t *, const char *) VLC_USED VLC_MALLOC; +VLC_API void config_PutPsz(vlc_object_t *, const char *, const char *); +VLC_API ssize_t config_GetIntChoices(vlc_object_t *, const char *, + int64_t **, char ***) VLC_USED; +VLC_API ssize_t config_GetPszChoices(vlc_object_t *, const char *, + char ***, char ***) VLC_USED; + +VLC_API int config_SaveConfigFile( vlc_object_t * ); +#define config_SaveConfigFile(a) config_SaveConfigFile(VLC_OBJECT(a)) + +VLC_API void config_ResetAll( vlc_object_t * ); +#define config_ResetAll(a) config_ResetAll(VLC_OBJECT(a)) + +VLC_API module_config_t * config_FindConfig(const char *) VLC_USED; +VLC_API char * config_GetDataDir(void) VLC_USED VLC_MALLOC; +VLC_API char *config_GetLibDir(void) VLC_USED; + +typedef enum vlc_userdir +{ + VLC_HOME_DIR, /* User's home */ + VLC_CONFIG_DIR, /* VLC-specific configuration directory */ + VLC_DATA_DIR, /* VLC-specific data directory */ + VLC_CACHE_DIR, /* VLC-specific user cached data directory */ + /* Generic directories (same as XDG) */ + VLC_DESKTOP_DIR=0x80, + VLC_DOWNLOAD_DIR, + VLC_TEMPLATES_DIR, + VLC_PUBLICSHARE_DIR, + VLC_DOCUMENTS_DIR, + VLC_MUSIC_DIR, + VLC_PICTURES_DIR, + VLC_VIDEOS_DIR, +} vlc_userdir_t; + +VLC_API char * config_GetUserDir( vlc_userdir_t ) VLC_USED VLC_MALLOC; + +VLC_API void config_AddIntf( vlc_object_t *, const char * ); +VLC_API void config_RemoveIntf( vlc_object_t *, const char * ); +VLC_API bool config_ExistIntf( vlc_object_t *, const char * ) VLC_USED; + +#define config_GetInt(a,b) config_GetInt(VLC_OBJECT(a),b) +#define config_PutInt(a,b,c) config_PutInt(VLC_OBJECT(a),b,c) +#define config_GetFloat(a,b) config_GetFloat(VLC_OBJECT(a),b) +#define config_PutFloat(a,b,c) config_PutFloat(VLC_OBJECT(a),b,c) +#define config_GetPsz(a,b) config_GetPsz(VLC_OBJECT(a),b) +#define config_PutPsz(a,b,c) config_PutPsz(VLC_OBJECT(a),b,c) + +#define config_AddIntf(a,b) config_AddIntf(VLC_OBJECT(a),b) +#define config_RemoveIntf(a,b) config_RemoveIntf(VLC_OBJECT(a),b) +#define config_ExistIntf(a,b) config_ExistIntf(VLC_OBJECT(a),b) + +/**************************************************************************** + * config_chain_t: + ****************************************************************************/ +struct config_chain_t +{ + config_chain_t *p_next; /**< Pointer on the next config_chain_t element */ + + char *psz_name; /**< Option name */ + char *psz_value; /**< Option value */ +}; + +/** + * This function will + * - create all options in the array ppsz_options (var_Create). + * - parse the given linked list of config_chain_t and set the value (var_Set). + * + * The option names will be created by adding the psz_prefix prefix. + */ +VLC_API void config_ChainParse( vlc_object_t *, const char *psz_prefix, const char *const *ppsz_options, config_chain_t * ); +#define config_ChainParse( a, b, c, d ) config_ChainParse( VLC_OBJECT(a), b, c, d ) + +/** + * This function will parse a configuration string (psz_opts) and + * - set all options for this module in a chained list (*pp_cfg) + * - returns a pointer on the next module if any. + * + * The string format is + * module{option=*,option=*} + * + * The options values are unescaped using config_StringUnescape. + */ +VLC_API const char *config_ChainParseOptions( config_chain_t **pp_cfg, const char *ppsz_opts ); + +/** + * This function will parse a configuration string (psz_string) and + * - set the module name (*ppsz_name) + * - set all options for this module in a chained list (*pp_cfg) + * - returns a pointer on the next module if any. + * + * The string format is + * module{option=*,option=*}[:modulenext{option=*,...}] + * + * The options values are unescaped using config_StringUnescape. + */ +VLC_API char *config_ChainCreate( char **ppsz_name, config_chain_t **pp_cfg, const char *psz_string ) VLC_USED VLC_MALLOC; + +/** + * This function will release a linked list of config_chain_t + * (Including the head) + */ +VLC_API void config_ChainDestroy( config_chain_t * ); + +/** + * This function will duplicate a linked list of config_chain_t + */ +VLC_API config_chain_t * config_ChainDuplicate( const config_chain_t * ) VLC_USED VLC_MALLOC; + +/** + * This function will unescape a string in place and will return a pointer on + * the given string. + * No memory is allocated by it (unlike config_StringEscape). + * If NULL is given as parameter nothing will be done (NULL will be returned). + * + * The following sequences will be unescaped (only one time): + * \\ \' and \" + */ +VLC_API char * config_StringUnescape( char *psz_string ); + +/** + * This function will escape a string that can be unescaped by + * config_StringUnescape. + * The returned value is allocated by it. You have to free it once you + * do not need it anymore (unlike config_StringUnescape). + * If NULL is given as parameter nothing will be done (NULL will be returned). + * + * The escaped characters are ' " and \ + */ +VLC_API char * config_StringEscape( const char *psz_string ) VLC_USED VLC_MALLOC; + +# ifdef __cplusplus +} +# endif + +#endif /* _VLC_CONFIGURATION_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_cpu.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_cpu.h new file mode 100644 index 0000000..9003241 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_cpu.h @@ -0,0 +1,199 @@ +/***************************************************************************** + * vlc_cpu.h: CPU capabilities + ***************************************************************************** + * Copyright (C) 1998-2009 VLC authors and VideoLAN + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * \file + * This file provides CPU features detection. + */ + +#ifndef VLC_CPU_H +# define VLC_CPU_H 1 + +VLC_API unsigned vlc_CPU(void); + +# if defined (__i386__) || defined (__x86_64__) +# define HAVE_FPU 1 +# define VLC_CPU_MMX 0x00000008 +# define VLC_CPU_3dNOW 0x00000010 +# define VLC_CPU_MMXEXT 0x00000020 +# define VLC_CPU_SSE 0x00000040 +# define VLC_CPU_SSE2 0x00000080 +# define VLC_CPU_SSE3 0x00000100 +# define VLC_CPU_SSSE3 0x00000200 +# define VLC_CPU_SSE4_1 0x00000400 +# define VLC_CPU_SSE4_2 0x00000800 +# define VLC_CPU_SSE4A 0x00001000 +# define VLC_CPU_AVX 0x00002000 +# define VLC_CPU_AVX2 0x00004000 +# define VLC_CPU_XOP 0x00008000 +# define VLC_CPU_FMA4 0x00010000 + +# if defined (__MMX__) +# define vlc_CPU_MMX() (1) +# define VLC_MMX +# else +# define vlc_CPU_MMX() ((vlc_CPU() & VLC_CPU_MMX) != 0) +# define VLC_MMX __attribute__ ((__target__ ("mmx"))) +# endif + +# if defined (__SSE__) +# define vlc_CPU_MMXEXT() (1) +# define vlc_CPU_SSE() (1) +# define VLC_SSE +# else +# define vlc_CPU_MMXEXT() ((vlc_CPU() & VLC_CPU_MMXEXT) != 0) +# define vlc_CPU_SSE() ((vlc_CPU() & VLC_CPU_SSE) != 0) +# define VLC_SSE __attribute__ ((__target__ ("sse"))) +# endif + +# ifdef __SSE2__ +# define vlc_CPU_SSE2() (1) +# else +# define vlc_CPU_SSE2() ((vlc_CPU() & VLC_CPU_SSE2) != 0) +# endif + +# ifdef __SSE3__ +# define vlc_CPU_SSE3() (1) +# else +# define vlc_CPU_SSE3() ((vlc_CPU() & VLC_CPU_SSE3) != 0) +# endif + +# ifdef __SSSE3__ +# define vlc_CPU_SSSE3() (1) +# else +# define vlc_CPU_SSSE3() ((vlc_CPU() & VLC_CPU_SSSE3) != 0) +# endif + +# ifdef __SSE4_1__ +# define vlc_CPU_SSE4_1() (1) +# else +# define vlc_CPU_SSE4_1() ((vlc_CPU() & VLC_CPU_SSE4_1) != 0) +# endif + +# ifdef __SSE4_2__ +# define vlc_CPU_SSE4_2() (1) +# else +# define vlc_CPU_SSE4_2() ((vlc_CPU() & VLC_CPU_SSE4_2) != 0) +# endif + +# ifdef __SSE4A__ +# define vlc_CPU_SSE4A() (1) +# else +# define vlc_CPU_SSE4A() ((vlc_CPU() & VLC_CPU_SSE4A) != 0) +# endif + +# ifdef __AVX__ +# define vlc_CPU_AVX() (1) +# else +# define vlc_CPU_AVX() ((vlc_CPU() & VLC_CPU_AVX) != 0) +# endif + +# ifdef __AVX2__ +# define vlc_CPU_AVX2() (1) +# else +# define vlc_CPU_AVX2() ((vlc_CPU() & VLC_CPU_AVX2) != 0) +# endif + +# ifdef __3dNOW__ +# define vlc_CPU_3dNOW() (1) +# else +# define vlc_CPU_3dNOW() ((vlc_CPU() & VLC_CPU_3dNOW) != 0) +# endif + +# ifdef __XOP__ +# define vlc_CPU_XOP() (1) +# else +# define vlc_CPU_XOP() ((vlc_CPU() & VLC_CPU_XOP) != 0) +# endif + +# ifdef __FMA4__ +# define vlc_CPU_FMA4() (1) +# else +# define vlc_CPU_FMA4() ((vlc_CPU() & VLC_CPU_FMA4) != 0) +# endif + +# elif defined (__ppc__) || defined (__ppc64__) || defined (__powerpc__) +# define HAVE_FPU 1 +# define VLC_CPU_ALTIVEC 2 + +# ifdef ALTIVEC +# define vlc_CPU_ALTIVEC() (1) +# define VLC_ALTIVEC +# else +# define vlc_CPU_ALTIVEC() ((vlc_CPU() & VLC_CPU_ALTIVEC) != 0) +# define VLC_ALTIVEC __attribute__ ((__target__ ("altivec"))) +# endif + +# elif defined (__arm__) +# if defined (__VFP_FP__) && !defined (__SOFTFP__) +# define HAVE_FPU 1 +# else +# define HAVE_FPU 0 +# endif +# define VLC_CPU_ARMv6 4 +# define VLC_CPU_ARM_NEON 2 + +# if defined (__ARM_ARCH_7A__) +# define VLC_CPU_ARM_ARCH 7 +# elif defined (__ARM_ARCH_6__) || defined (__ARM_ARCH_6T2__) +# define VLC_CPU_ARM_ARCH 6 +# else +# define VLC_CPU_ARM_ARCH 4 +# endif + +# if (VLC_CPU_ARM_ARCH >= 6) +# define vlc_CPU_ARMv6() (1) +# else +# define vlc_CPU_ARMv6() ((vlc_CPU() & VLC_CPU_ARMv6) != 0) +# endif + +# ifdef __ARM_NEON__ +# define vlc_CPU_ARM_NEON() (1) +# else +# define vlc_CPU_ARM_NEON() ((vlc_CPU() & VLC_CPU_ARM_NEON) != 0) +# endif + +# elif defined (__aarch64__) +# define HAVE_FPU 1 +// NEON is mandatory for general purpose ARMv8-a CPUs +# define vlc_CPU_ARM64_NEON() (1) + +# elif defined (__sparc__) +# define HAVE_FPU 1 + +# elif defined (__mips_hard_float) +# define HAVE_FPU 1 + +# elif defined (__riscv) +# ifdef __riscv_flen +# define HAVE_FPU 1 +# endif + +# else +/** + * Are single precision floating point operations "fast"? + * If this preprocessor constant is zero, floating point should be avoided + * (especially relevant for audio codecs). + */ +# define HAVE_FPU 0 + +# endif + +#endif /* !VLC_CPU_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_demux.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_demux.h new file mode 100644 index 0000000..f359f54 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_demux.h @@ -0,0 +1,525 @@ +/***************************************************************************** + * vlc_demux.h: Demuxer descriptor, queries and methods + ***************************************************************************** + * Copyright (C) 1999-2005 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_DEMUX_H +#define VLC_DEMUX_H 1 + +#include +#include + +#include +#include +#include + +/** + * \defgroup demux Demultiplexer + * \ingroup input + * Demultiplexers (file format parsers) + * @{ + * \file + * Demultiplexer modules interface + */ + +struct demux_t +{ + VLC_COMMON_MEMBERS + + /* Module properties */ + module_t *p_module; + + /* eg informative but needed (we can have access+demux) */ + char *psz_access; + char *psz_demux; + char *psz_location; + char *psz_file; + + union { + /** + * Input stream + * + * Depending on the module capability: + * - "demux": input byte stream (not NULL) + * - "access_demux": a NULL pointer + * - "demux_filter": undefined + */ + stream_t *s; + /** + * Input demuxer + * + * If the module capability is "demux_filter", this is the upstream + * demuxer or demux filter. Otherwise, this is undefined. + */ + demux_t *p_next; + }; + + /* es output */ + es_out_t *out; /* our p_es_out */ + + bool b_preparsing; /* True if the demux is used to preparse */ + + /* set by demuxer */ + int (*pf_demux) ( demux_t * ); /* demux one frame only */ + int (*pf_control)( demux_t *, int i_query, va_list args); + + /* Demux has to maintain them uptodate + * when it is responsible of seekpoint/title */ + struct + { + unsigned int i_update; /* Demux sets them on change, + Input removes them once take into account*/ + /* Seekpoint/Title at demux level */ + int i_title; /* idem, start from 0 (could be menu) */ + int i_seekpoint; /* idem, start from 0 */ + } info; + demux_sys_t *p_sys; + + /* Weak link to parent input */ + input_thread_t *p_input; +}; + +/* pf_demux return values */ +#define VLC_DEMUXER_EOF 0 +#define VLC_DEMUXER_EGENERIC -1 +#define VLC_DEMUXER_SUCCESS 1 + +/* demux_t.info.i_update field */ +#define INPUT_UPDATE_TITLE 0x0010 +#define INPUT_UPDATE_SEEKPOINT 0x0020 +#define INPUT_UPDATE_META 0x0040 +#define INPUT_UPDATE_TITLE_LIST 0x0100 + +/* demux_meta_t is returned by "meta reader" module to the demuxer */ +typedef struct demux_meta_t +{ + VLC_COMMON_MEMBERS + input_item_t *p_item; /***< the input item that is being read */ + + vlc_meta_t *p_meta; /**< meta data */ + + int i_attachments; /**< number of attachments */ + input_attachment_t **attachments; /**< array of attachments */ +} demux_meta_t; + +/** + * Control query identifiers for use with demux_t.pf_control + * + * In the individual identifier description, the input stream refers to + * demux_t.s if non-NULL, and the output refers to demux_t.out. + * + * A demuxer is synchronous if it only accesses its input stream and the + * output from within its demux_t callbacks, i.e. demux.pf_demux and + * demux_t.pf_control. + * + * A demuxer is threaded if it accesses either or both input and output + * asynchronously. + * + * An access-demuxer is a demuxer without input, i.e. demux_t.s == NULL). + */ +enum demux_query_e +{ + /** Checks whether the stream supports seeking. + * Can fail if seeking is not supported (same as returning false). + * \bug Failing should not be allowed. + * + * arg1 = bool * */ + DEMUX_CAN_SEEK, + + /** Checks whether (long) pause then stream resumption is supported. + * Can fail only if synchronous and not an access-demuxer. The + * underlying input stream then determines if pause is supported. + * \bug Failing should not be allowed. + * + * arg1= bool * */ + DEMUX_CAN_PAUSE = 0x002, + + /** Whether the stream can be read at an arbitrary pace. + * Cannot fail. + * + * arg1= bool * */ + DEMUX_CAN_CONTROL_PACE, + + /** Retrieves the PTS delay (roughly the default buffer duration). + * Can fail only if synchronous and not an access-demuxer. The + * underlying input stream then determines the PTS delay. + * + * arg1= int64_t * */ + DEMUX_GET_PTS_DELAY = 0x101, + + /** Retrieves stream meta-data. + * Should fail if no meta-data were retrieved. + * + * arg1= vlc_meta_t * */ + DEMUX_GET_META = 0x105, + + /** Retrieves an estimate of signal quality and strength. + * Can fail. + * + * arg1=double *quality, arg2=double *strength */ + DEMUX_GET_SIGNAL = 0x107, + + /** Sets the paused or playing/resumed state. + * + * Streams are initially in playing state. The control always specifies a + * change from paused to playing (false) or from playing to paused (true) + * and streams are initially playing; a no-op cannot be requested. + * + * The control is never used if DEMUX_CAN_PAUSE fails. + * Can fail. + * + * arg1= bool */ + DEMUX_SET_PAUSE_STATE = 0x200, + + /** Seeks to the beginning of a title. + * + * The control is never used if DEMUX_GET_TITLE_INFO fails. + * Can fail. + * + * arg1= int */ + DEMUX_SET_TITLE, + + /** Seeks to the beginning of a chapter of the current title. + * + * The control is never used if DEMUX_GET_TITLE_INFO fails. + * Can fail. + * + * arg1= int */ + DEMUX_SET_SEEKPOINT, /* arg1= int can fail */ + + /** Check which INPUT_UPDATE_XXX flag is set and reset the ones set. + * + * The unsigned* argument is set with the flags needed to be checked, + * on return it contains the values that were reset during the call + * + * This can can fail, in which case flags from demux_t.info.i_update + * are read/reset + * + * arg1= unsigned * */ + DEMUX_TEST_AND_CLEAR_FLAGS, /* arg1= unsigned* can fail */ + + /** Read the title number currently playing + * + * Can fail, in which case demux_t.info.i_title is used + * + * arg1= int * */ + DEMUX_GET_TITLE, /* arg1= int* can fail */ + + /* Read the seekpoint/chapter currently playing + * + * Can fail, in which case demux_t.info.i_seekpoint is used + * + * arg1= int * */ + DEMUX_GET_SEEKPOINT, /* arg1= int* can fail */ + + /* I. Common queries to access_demux and demux */ + /* POSITION double between 0.0 and 1.0 */ + DEMUX_GET_POSITION = 0x300, /* arg1= double * res= */ + DEMUX_SET_POSITION, /* arg1= double arg2= bool b_precise res=can fail */ + + /* LENGTH/TIME in microsecond, 0 if unknown */ + DEMUX_GET_LENGTH, /* arg1= int64_t * res= */ + DEMUX_GET_TIME, /* arg1= int64_t * res= */ + DEMUX_SET_TIME, /* arg1= int64_t arg2= bool b_precise res=can fail */ + + /** + * \todo Document + * + * \warning The prototype is different from STREAM_GET_TITLE_INFO + * + * Can fail, meaning there is only one title and one chapter. + * + * arg1= input_title_t ***, arg2=int *, arg3=int *pi_title_offset(0), + * arg4= int *pi_seekpoint_offset(0) */ + DEMUX_GET_TITLE_INFO, + + /* DEMUX_SET_GROUP/SET_ES only a hint for demuxer (mainly DVB) to allow not + * reading everything (you should not use this to call es_out_Control) + * if you don't know what to do with it, just IGNORE it, it is safe(r) + * -1 means all group, 0 default group (first es added) */ + DEMUX_SET_GROUP, /* arg1= int, arg2=const vlc_list_t * can fail */ + DEMUX_SET_ES, /* arg1= int can fail */ + + /* Ask the demux to demux until the given date at the next pf_demux call + * but not more (and not less, at the precision available of course). + * XXX: not mandatory (except for subtitle demux) but will help a lot + * for multi-input + */ + DEMUX_SET_NEXT_DEMUX_TIME, /* arg1= int64_t can fail */ + /* FPS for correct subtitles handling */ + DEMUX_GET_FPS, /* arg1= double * res=can fail */ + + /* Meta data */ + DEMUX_HAS_UNSUPPORTED_META, /* arg1= bool * res can fail */ + + /* Attachments */ + DEMUX_GET_ATTACHMENTS, /* arg1=input_attachment_t***, int* res=can fail */ + + /* RECORD you are ensured that it is never called twice with the same state + * you should accept it only if the stream can be recorded without + * any modification or header addition. */ + DEMUX_CAN_RECORD, /* arg1=bool* res=can fail(assume false) */ + /** + * \todo Document + * + * \warning The prototype is different from STREAM_SET_RECORD_STATE + * + * The control is never used if DEMUX_CAN_RECORD fails or returns false. + * Can fail. + * + * arg1= bool */ + DEMUX_SET_RECORD_STATE, + + /* II. Specific access_demux queries */ + + /* DEMUX_CAN_CONTROL_RATE is called only if DEMUX_CAN_CONTROL_PACE has + * returned false. *pb_rate should be true when the rate can be changed + * (using DEMUX_SET_RATE). */ + DEMUX_CAN_CONTROL_RATE, /* arg1= bool*pb_rate */ + /* DEMUX_SET_RATE is called only if DEMUX_CAN_CONTROL_RATE has returned true. + * It should return the value really used in *pi_rate */ + DEMUX_SET_RATE, /* arg1= int*pi_rate can fail */ + + /** Checks whether the stream is actually a playlist, rather than a real + * stream. + * + * \warning The prototype is different from STREAM_IS_DIRECTORY. + * + * Can fail if the stream is not a playlist (same as returning false). + * + * arg1= bool * */ + DEMUX_IS_PLAYLIST, + + /* Menu (VCD/DVD/BD) Navigation */ + /** Activate the navigation item selected. Can fail */ + DEMUX_NAV_ACTIVATE, + /** Use the up arrow to select a navigation item above. Can fail */ + DEMUX_NAV_UP, + /** Use the down arrow to select a navigation item under. Can fail */ + DEMUX_NAV_DOWN, + /** Use the left arrow to select a navigation item on the left. Can fail */ + DEMUX_NAV_LEFT, + /** Use the right arrow to select a navigation item on the right. Can fail */ + DEMUX_NAV_RIGHT, + /** Activate the popup Menu (for BD). Can fail */ + DEMUX_NAV_POPUP, + /** Activate disc Root Menu. Can fail */ + DEMUX_NAV_MENU, /* res=can fail */ + /** Enable/Disable a demux filter + * \warning This has limited support, and is likely to break if more than + * a single demux_filter is present in the chain. This is not guaranteed to + * work in future VLC versions, nor with all demux filters + */ + DEMUX_FILTER_ENABLE, + DEMUX_FILTER_DISABLE +}; + +/************************************************************************* + * Main Demux + *************************************************************************/ + +/* stream_t *s could be null and then it mean a access+demux in one */ +VLC_API demux_t *demux_New( vlc_object_t *p_obj, const char *psz_name, + const char *psz_path, stream_t *s, es_out_t *out ); + +VLC_API void demux_Delete( demux_t * ); + + +VLC_API int demux_vaControlHelper( stream_t *, int64_t i_start, int64_t i_end, + int64_t i_bitrate, int i_align, int i_query, va_list args ); + +VLC_USED static inline int demux_Demux( demux_t *p_demux ) +{ + if( !p_demux->pf_demux ) + return VLC_DEMUXER_SUCCESS; + + return p_demux->pf_demux( p_demux ); +} + +VLC_API int demux_vaControl( demux_t *p_demux, int i_query, va_list args ); + +static inline int demux_Control( demux_t *p_demux, int i_query, ... ) +{ + va_list args; + int i_result; + + va_start( args, i_query ); + i_result = demux_vaControl( p_demux, i_query, args ); + va_end( args ); + return i_result; +} + +/************************************************************************* + * Miscellaneous helpers for demuxers + *************************************************************************/ + +static inline void demux_UpdateTitleFromStream( demux_t *demux ) +{ + stream_t *s = demux->s; + unsigned title, seekpoint; + + if( vlc_stream_Control( s, STREAM_GET_TITLE, &title ) == VLC_SUCCESS + && title != (unsigned)demux->info.i_title ) + { + demux->info.i_title = title; + demux->info.i_update |= INPUT_UPDATE_TITLE; + } + + if( vlc_stream_Control( s, STREAM_GET_SEEKPOINT, + &seekpoint ) == VLC_SUCCESS + && seekpoint != (unsigned)demux->info.i_seekpoint ) + { + demux->info.i_seekpoint = seekpoint; + demux->info.i_update |= INPUT_UPDATE_SEEKPOINT; + } +} + +VLC_USED +static inline bool demux_IsPathExtension( demux_t *p_demux, const char *psz_extension ) +{ + const char *name = (p_demux->psz_file != NULL) ? p_demux->psz_file + : p_demux->psz_location; + const char *psz_ext = strrchr ( name, '.' ); + if( !psz_ext || strcasecmp( psz_ext, psz_extension ) ) + return false; + return true; +} + +VLC_USED +static inline bool demux_IsContentType(demux_t *demux, const char *type) +{ + return stream_IsMimeType(demux->s, type); +} + +VLC_USED +static inline bool demux_IsForced( demux_t *p_demux, const char *psz_name ) +{ + if( !p_demux->psz_demux || strcmp( p_demux->psz_demux, psz_name ) ) + return false; + return true; +} + +/** + * This function will create a packetizer suitable for a demuxer that parses + * elementary stream. + * + * The provided es_format_t will be cleaned on error or by + * demux_PacketizerDestroy. + */ +VLC_API decoder_t * demux_PacketizerNew( demux_t *p_demux, es_format_t *p_fmt, const char *psz_msg ) VLC_USED; + +/** + * This function will destroy a packetizer create by demux_PacketizerNew. + */ +VLC_API void demux_PacketizerDestroy( decoder_t *p_packetizer ); + +/* */ +#define DEMUX_INIT_COMMON() do { \ + p_demux->pf_control = Control; \ + p_demux->pf_demux = Demux; \ + p_demux->p_sys = calloc( 1, sizeof( demux_sys_t ) ); \ + if( !p_demux->p_sys ) return VLC_ENOMEM;\ + } while(0) + +/** + * \defgroup chained_demux Chained demultiplexer + * Demultiplexers wrapped by another demultiplexer + * @{ + */ + +typedef struct vlc_demux_chained_t vlc_demux_chained_t; + +/** + * Creates a chained demuxer. + * + * This creates a thread running a demuxer whose input stream is generated + * directly by the caller. This typically handles some sort of stream within a + * stream, e.g. MPEG-TS within something else. + * + * \note There are a number of limitations to this approach. The chained + * demuxer is run asynchronously in a separate thread. Most demuxer controls + * are synchronous and therefore unavailable in this case. Also the input + * stream is a simple FIFO, so the chained demuxer cannot perform seeks. + * Lastly, most errors cannot be detected. + * + * \param parent parent VLC object + * \param name chained demux module name (e.g. "ts") + * \param out elementary stream output for the chained demux + * \return a non-NULL pointer on success, NULL on failure. + */ +VLC_API vlc_demux_chained_t *vlc_demux_chained_New(vlc_object_t *parent, + const char *name, + es_out_t *out); + +/** + * Destroys a chained demuxer. + * + * Sends an end-of-stream to the chained demuxer, and releases all underlying + * allocated resources. + */ +VLC_API void vlc_demux_chained_Delete(vlc_demux_chained_t *); + +/** + * Sends data to a chained demuxer. + * + * This queues data for a chained demuxer to consume. + * + * \param block data block to queue + */ +VLC_API void vlc_demux_chained_Send(vlc_demux_chained_t *, block_t *block); + +/** + * Controls a chained demuxer. + * + * This performs a demux (i.e. DEMUX_...) control request on a chained + * demux. + * + * \note In most cases, vlc_demux_chained_Control() should be used instead. + * \warning As per vlc_demux_chained_New(), most demux controls are not, and + * cannot be, supported; VLC_EGENERIC is returned. + * + * \param query demux control (see \ref demux_query_e) + * \param args variable arguments (depending on the query) + */ +VLC_API int vlc_demux_chained_ControlVa(vlc_demux_chained_t *, int query, + va_list args); + +static inline int vlc_demux_chained_Control(vlc_demux_chained_t *dc, int query, + ...) +{ + va_list ap; + int ret; + + va_start(ap, query); + ret = vlc_demux_chained_ControlVa(dc, query, ap); + va_end(ap); + return ret; +} + +/** + * @} + */ + +/** + * @} + */ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_dialog.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_dialog.h new file mode 100644 index 0000000..23df3cb --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_dialog.h @@ -0,0 +1,483 @@ +/***************************************************************************** + * vlc_dialog.h: user interaction dialogs + ***************************************************************************** + * Copyright (C) 2009 Rémi Denis-Courmont + * Copyright (C) 2016 VLC authors and VideoLAN + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_DIALOG_H_ +#define VLC_DIALOG_H_ +# include + +typedef struct vlc_dialog_provider vlc_dialog_provider; +typedef struct vlc_dialog_id vlc_dialog_id; +typedef struct extension_dialog_t extension_dialog_t; + +/* Called from src/libvlc.c */ +int +libvlc_InternalDialogInit(libvlc_int_t *p_libvlc); + +/* Called from src/libvlc.c */ +void +libvlc_InternalDialogClean(libvlc_int_t *p_libvlc); + +/** + * @defgroup vlc_dialog VLC dialog + * @ingroup interface + * @{ + * @file + * This file declares VLC dialog functions + * @defgroup vlc_dialog_api VLC dialog functions + * In order to interact with the user + * @{ + */ + +/** + * Dialog question type, see vlc_dialog_wait_question() + */ +typedef enum vlc_dialog_question_type +{ + VLC_DIALOG_QUESTION_NORMAL, + VLC_DIALOG_QUESTION_WARNING, + VLC_DIALOG_QUESTION_CRITICAL, +} vlc_dialog_question_type; + +/** + * Sends an error message + * + * This function returns immediately + * + * @param p_obj the VLC object emitting the error + * @param psz_title title of the error dialog + * @param psz_fmt format string for the error message + * @return VLC_SUCCESS on success, or a VLC error code on error + */ +VLC_API int +vlc_dialog_display_error(vlc_object_t *p_obj, const char *psz_title, + const char *psz_fmt, ...) VLC_FORMAT(3,4); +#define vlc_dialog_display_error(a, b, c, ...) \ + vlc_dialog_display_error(VLC_OBJECT(a), b, c, ##__VA_ARGS__) + +/** + * Sends an error message + * + * Equivalent to vlc_dialog_display_error() expect that it's called with a + * va_list. + */ +VLC_API int +vlc_dialog_display_error_va(vlc_object_t *p_obj, const char *psz_title, + const char *psz_fmt, va_list ap); + +/** + * Requests an user name and a password + * + * This function waits until the user dismisses the dialog or responds. It's + * interruptible via vlc_interrupt. In that case, vlc_dialog_cbs.pf_cancel() + * will be invoked. If p_store is not NULL, the user will be asked to store the + * password or not. + * + * @param p_obj the VLC object emitting the dialog + * @param ppsz_username a pointer to the user name provided by the user, it + * must be freed with free() on success + * @param ppsz_password a pointer to the password provided by the user, it must + * be freed with free() on success + * @param p_store a pointer to the store answer provided by the user (optional) + * @param psz_default_username default user name proposed + * @param psz_title title of the login dialog + * @param psz_fmt format string for the login message + * @return < 0 on error, 0 if the user cancelled it, and 1 if ppsz_username and + * ppsz_password are valid. + */ +VLC_API int +vlc_dialog_wait_login(vlc_object_t *p_obj, char **ppsz_username, + char **ppsz_password, bool *p_store, + const char *psz_default_username, + const char *psz_title, const char *psz_fmt, ...) + VLC_FORMAT(7,8); +#define vlc_dialog_wait_login(a, b, c, d, e, f, g, ...) \ + vlc_dialog_wait_login(VLC_OBJECT(a), b, c, d, e, f, g, ##__VA_ARGS__) + +/** + * Requests an user name and a password + * + * Equivalent to vlc_dialog_wait_login() expect that it's called with a + * va_list. + */ +VLC_API int +vlc_dialog_wait_login_va(vlc_object_t *p_obj, char **ppsz_username, + char **ppsz_password, bool *p_store, + const char *psz_default_username, + const char *psz_title, const char *psz_fmt, va_list ap); + +/** + * Asks a total (Yes/No/Cancel) question + * + * This function waits until the user dismisses the dialog or responds. It's + * interruptible via vlc_interrupt. In that case, vlc_dialog_cbs.pf_cancel() + * will be invoked. The psz_cancel is mandatory since this dialog is always + * cancellable by the user. + * + * @param p_obj the VLC object emitting the dialog + * @param i_type question type (severity of the question) + * @param psz_cancel text of the cancel button + * @param psz_action1 first choice/button text (optional) + * @param psz_action2 second choice/button text (optional) + * @param psz_title title of the question dialog + * @param psz_fmt format string for the question message + * @return < 0 on error, 0 if the user cancelled it, 1 on action1, 2 on action2 + */ +VLC_API int +vlc_dialog_wait_question(vlc_object_t *p_obj, + vlc_dialog_question_type i_type, + const char *psz_cancel, const char *psz_action1, + const char *psz_action2, const char *psz_title, + const char *psz_fmt, ...) VLC_FORMAT(7,8); +#define vlc_dialog_wait_question(a, b, c, d, e, f, g, ...) \ + vlc_dialog_wait_question(VLC_OBJECT(a), b, c, d, e, f, g, ##__VA_ARGS__) + +/** + * Asks a total (Yes/No/Cancel) question + * + * Equivalent to vlc_dialog_wait_question() expect that it's called with a + * va_list. + */ +VLC_API int +vlc_dialog_wait_question_va(vlc_object_t *p_obj, + vlc_dialog_question_type i_type, + const char *psz_cancel, const char *psz_action1, + const char *psz_action2, const char *psz_title, + const char *psz_fmt, va_list ap); + +/** + * Display a progress dialog + * + * This function returns immediately + * + * @param p_obj the VLC object emitting the dialog + * @param b_indeterminate true if the progress dialog is indeterminate + * @param f_position initial position of the progress bar (between 0.0 and 1.0) + * @param psz_cancel text of the cancel button, if NULL the dialog is not + * cancellable (optional) + * @param psz_title title of the progress dialog + * @param psz_fmt format string for the progress message + * @return a valid vlc_dialog_id on success, must be released with + * vlc_dialog_id_release() + */ +VLC_API vlc_dialog_id * +vlc_dialog_display_progress(vlc_object_t *p_obj, bool b_indeterminate, + float f_position, const char *psz_cancel, + const char *psz_title, const char *psz_fmt, ...) + VLC_FORMAT(6,7); +#define vlc_dialog_display_progress(a, b, c, d, e, f, ...) \ + vlc_dialog_display_progress(VLC_OBJECT(a), b, c, d, e, f, ##__VA_ARGS__) + +/** + * Display a progress dialog + * + * Equivalent to vlc_dialog_display_progress() expect that it's called with a + * va_list. + */ +VLC_API vlc_dialog_id * +vlc_dialog_display_progress_va(vlc_object_t *p_obj, bool b_indeterminate, + float f_position, const char *psz_cancel, + const char *psz_title, const char *psz_fmt, + va_list ap); + +/** + * Update the position of the progress dialog + * + * @param p_obj the VLC object emitting the dialog + * @param p_id id of the dialog to update + * @param f_position position of the progress bar (between 0.0 and 1.0) + * @return VLC_SUCCESS on success, or a VLC error code on error + */ +VLC_API int +vlc_dialog_update_progress(vlc_object_t *p_obj, vlc_dialog_id *p_id, + float f_position); +#define vlc_dialog_update_progress(a, b, c) \ + vlc_dialog_update_progress(VLC_OBJECT(a), b, c) + +/** + * Update the position and the message of the progress dialog + * + * @param p_obj the VLC object emitting the dialog + * @param p_id id of the dialog to update + * @param f_position position of the progress bar (between 0.0 and 1.0) + * @param psz_fmt format string for the progress message + * @return VLC_SUCCESS on success, or a VLC error code on error + */ +VLC_API int +vlc_dialog_update_progress_text(vlc_object_t *p_obj, vlc_dialog_id *p_id, + float f_position, const char *psz_fmt, ...) + VLC_FORMAT(4, 5); +#define vlc_dialog_update_progress_text(a, b, c, d, ...) \ + vlc_dialog_update_progress_text(VLC_OBJECT(a), b, c, d, ##__VA_ARGS__) + +/** + * Update the position and the message of the progress dialog + * + * Equivalent to vlc_dialog_update_progress_text() expect that it's called + * with a va_list. + */ +VLC_API int +vlc_dialog_update_progress_text_va(vlc_object_t *p_obj, vlc_dialog_id *p_id, + float f_position, const char *psz_fmt, + va_list ap); + +/** + * Release the dialog id returned by vlc_dialog_display_progress() + * + * It causes the vlc_dialog_cbs.pf_cancel() callback to be invoked. + * + * @param p_obj the VLC object emitting the dialog + * @param p_id id of the dialog to release + */ +VLC_API void +vlc_dialog_release(vlc_object_t *p_obj, vlc_dialog_id *p_id); +#define vlc_dialog_release(a, b) \ + vlc_dialog_release(VLC_OBJECT(a), b) + +/** + * Return true if the dialog id is cancelled + * + * @param p_obj the VLC object emitting the dialog + * @param p_id id of the dialog + */ +VLC_API bool +vlc_dialog_is_cancelled(vlc_object_t *p_obj, vlc_dialog_id *p_id); +#define vlc_dialog_is_cancelled(a, b) \ + vlc_dialog_is_cancelled(VLC_OBJECT(a), b) + +/** + * @} + * @defgroup vlc_dialog_impl VLC dialog callbacks + * Need to be implemented by GUI modules or libvlc + * @{ + */ + +/** + * Dialog callbacks to be implemented + */ +typedef struct vlc_dialog_cbs +{ + /** + * Called when an error message needs to be displayed + * + * @param p_data opaque pointer for the callback + * @param psz_title title of the dialog + * @param psz_text text of the dialog + */ + void (*pf_display_error)(void *p_data, const char *psz_title, + const char *psz_text); + + /** + * Called when a login dialog needs to be displayed + * + * You can interact with this dialog by calling vlc_dialog_id_post_login() + * to post an answer or vlc_dialog_id_dismiss() to cancel this dialog. + * + * @note to receive this callback, vlc_dialog_cbs.pf_cancel should not be + * NULL. + * + * @param p_data opaque pointer for the callback + * @param p_id id used to interact with the dialog + * @param psz_title title of the dialog + * @param psz_text text of the dialog + * @param psz_default_username user name that should be set on the user form + * @param b_ask_store if true, ask the user if he wants to save the + * credentials + */ + void (*pf_display_login)(void *p_data, vlc_dialog_id *p_id, + const char *psz_title, const char *psz_text, + const char *psz_default_username, + bool b_ask_store); + + /** + * Called when a question dialog needs to be displayed + * + * You can interact with this dialog by calling vlc_dialog_id_post_action() + * to post an answer or vlc_dialog_id_dismiss() to cancel this dialog. + * + * @note to receive this callback, vlc_dialog_cbs.pf_cancel should not be + * NULL. + * + * @param p_data opaque pointer for the callback + * @param p_id id used to interact with the dialog + * @param psz_title title of the dialog + * @param psz_text text of the dialog + * @param i_type question type (or severity) of the dialog + * @param psz_cancel text of the cancel button + * @param psz_action1 text of the first button, if NULL, don't display this + * button + * @param psz_action2 text of the second button, if NULL, don't display + * this button + */ + void (*pf_display_question)(void *p_data, vlc_dialog_id *p_id, + const char *psz_title, const char *psz_text, + vlc_dialog_question_type i_type, + const char *psz_cancel, const char *psz_action1, + const char *psz_action2); + + /** + * Called when a progress dialog needs to be displayed + * + * If cancellable (psz_cancel != NULL), you can cancel this dialog by + * calling vlc_dialog_id_dismiss() + * + * @note to receive this callback, vlc_dialog_cbs.pf_cancel and + * vlc_dialog_cbs.pf_update_progress should not be NULL. + * + * @param p_data opaque pointer for the callback + * @param p_id id used to interact with the dialog + * @param psz_title title of the dialog + * @param psz_text text of the dialog + * @param b_indeterminate true if the progress dialog is indeterminate + * @param f_position initial position of the progress bar (between 0.0 and + * 1.0) + * @param psz_cancel text of the cancel button, if NULL the dialog is not + * cancellable + */ + void (*pf_display_progress)(void *p_data, vlc_dialog_id *p_id, + const char *psz_title, const char *psz_text, + bool b_indeterminate, float f_position, + const char *psz_cancel); + + /** + * Called when a displayed dialog needs to be cancelled + * + * The implementation must call vlc_dialog_id_dismiss() to really release + * the dialog. + * + * @param p_data opaque pointer for the callback + * @param p_id id of the dialog + */ + void (*pf_cancel)(void *p_data, vlc_dialog_id *p_id); + + /** + * Called when a progress dialog needs to be updated + * + * @param p_data opaque pointer for the callback + * @param p_id id of the dialog + * @param f_position osition of the progress bar (between 0.0 and 1.0) + * @param psz_text new text of the progress dialog + */ + void (*pf_update_progress)(void *p_data, vlc_dialog_id *p_id, + float f_position, const char *psz_text); +} vlc_dialog_cbs; + +/** + * Register callbacks to handle VLC dialogs + * + * @param p_cbs a pointer to callbacks, or NULL to unregister callbacks. + * @param p_data opaque pointer for the callback + */ +VLC_API void +vlc_dialog_provider_set_callbacks(vlc_object_t *p_obj, + const vlc_dialog_cbs *p_cbs, void *p_data); +#define vlc_dialog_provider_set_callbacks(a, b, c) \ + vlc_dialog_provider_set_callbacks(VLC_OBJECT(a), b, c) + +/** + * Associate an opaque pointer with the dialog id + */ +VLC_API void +vlc_dialog_id_set_context(vlc_dialog_id *p_id, void *p_context); + +/** + * Return the opaque pointer associated with the dialog id + */ +VLC_API void * +vlc_dialog_id_get_context(vlc_dialog_id *p_id); + +/** + * Post a login answer + * + * After this call, p_id won't be valid anymore + * + * @see vlc_dialog_cbs.pf_display_login + * + * @param p_id id of the dialog + * @param psz_username valid and non empty string + * @param psz_password valid string (can be empty) + * @param b_store if true, store the credentials + * @return VLC_SUCCESS on success, or a VLC error code on error + */ +VLC_API int +vlc_dialog_id_post_login(vlc_dialog_id *p_id, const char *psz_username, + const char *psz_password, bool b_store); + +/** + * Post a question answer + * + * After this call, p_id won't be valid anymore + * + * @see vlc_dialog_cbs.pf_display_question + * + * @param p_id id of the dialog + * @param i_action 1 for action1, 2 for action2 + * @return VLC_SUCCESS on success, or a VLC error code on error + */ +VLC_API int +vlc_dialog_id_post_action(vlc_dialog_id *p_id, int i_action); + +/** + * Dismiss a dialog + * + * After this call, p_id won't be valid anymore + * + * @see vlc_dialog_cbs.pf_cancel + * + * @param p_id id of the dialog + * @return VLC_SUCCESS on success, or a VLC error code on error + */ +VLC_API int +vlc_dialog_id_dismiss(vlc_dialog_id *p_id); + +/** + * @} + * @defgroup vlc_dialog_ext VLC extension dialog functions + * @{ + */ + +VLC_API int +vlc_ext_dialog_update(vlc_object_t *p_obj, extension_dialog_t *dialog); +#define vlc_ext_dialog_update(a, b) \ + vlc_ext_dialog_update(VLC_OBJECT(a), b) + +/** + * Dialog extension callback to be implemented + */ +typedef void (*vlc_dialog_ext_update_cb)(extension_dialog_t *p_ext_dialog, + void *p_data); + +/** + * Register a callback for VLC extension dialog + * + * @param pf_update a pointer to the update callback, or NULL to unregister + * callback + * @param p_data opaque pointer for the callback + */ +VLC_API void +vlc_dialog_provider_set_ext_callback(vlc_object_t *p_obj, + vlc_dialog_ext_update_cb pf_update, + void *p_data); +#define vlc_dialog_provider_set_ext_callback(a, b, c) \ + vlc_dialog_provider_set_ext_callback(VLC_OBJECT(a), b, c) + +/** @} @} */ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_epg.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_epg.h new file mode 100644 index 0000000..f7b9044 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_epg.h @@ -0,0 +1,120 @@ +/***************************************************************************** + * vlc_epg.h: Electronic Program Guide + ***************************************************************************** + * Copyright (C) 2007 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_EPG_H +#define VLC_EPG_H 1 + +/** + * \file + * This file defines functions and structures for storing dvb epg information + */ + +typedef struct +{ + int64_t i_start; /* Interpreted as a value return by time() */ + uint32_t i_duration; /* Duration of the event in second */ + uint16_t i_id; /* Unique event id withing the event set */ + + char *psz_name; + char *psz_short_description; + char *psz_description; + struct /* Description items in tranmission order */ + { + char *psz_key; + char *psz_value; + } * description_items; + int i_description_items; + + uint8_t i_rating; /* Parental control, set to 0 when undefined */ +} vlc_epg_event_t; + +typedef struct +{ + char *psz_name; + uint32_t i_id; /* Unique identifier for this table / events (partial sets) */ + uint16_t i_source_id;/* Channel / Program reference id this epg relates to */ + size_t i_event; + vlc_epg_event_t **pp_event; + bool b_present; /* Contains present/following or similar, and sets below */ + const vlc_epg_event_t *p_current; /* NULL, or equal to one of the entries in pp_event */ +} vlc_epg_t; + +/** + * Creates a new vlc_epg_event_t* + * + * You must call vlc_epg_event_Delete to release the associated resources. + * + * \p i_id is the event unique id + * \p i_start start in epoch time + * \p i_duration event duration in seconds + */ +VLC_API vlc_epg_event_t * vlc_epg_event_New(uint16_t i_id, + int64_t i_start, uint32_t i_duration); + +/** + * Releases a vlc_epg_event_t*. + */ +VLC_API void vlc_epg_event_Delete(vlc_epg_event_t *p_event); + +/** + * Returns a vlc_epg_event_t * duplicated from \p p_src. + * + */ +VLC_API vlc_epg_event_t * vlc_epg_event_Duplicate(const vlc_epg_event_t *p_src); + +/** + * It creates a new vlc_epg_t* + * + * You must call vlc_epg_Delete to release the associated resource. + * + * \p i_id is computed unique id depending on standard (table id, eit number) + * \p i_source_id is the associated program number + */ +VLC_API vlc_epg_t * vlc_epg_New(uint32_t i_id, uint16_t i_source_id); + +/** + * It releases a vlc_epg_t*. + */ +VLC_API void vlc_epg_Delete(vlc_epg_t *p_epg); + +/** + * It appends a new vlc_epg_event_t to a vlc_epg_t. + * Takes ownership of \p p_evt or returns false + * + * \p p_evt a vlc_epg_event_t * created with vlc_epg_event_New. + */ +VLC_API bool vlc_epg_AddEvent(vlc_epg_t *p_epg, vlc_epg_event_t *p_evt); + +/** + * It set the current event of a vlc_epg_t given a start time + */ +VLC_API void vlc_epg_SetCurrent(vlc_epg_t *p_epg, int64_t i_start); + +/** + * Returns a duplicated \p p_src and its associated events. + * + */ +VLC_API vlc_epg_t * vlc_epg_Duplicate(const vlc_epg_t *p_src); + +#endif + diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_es.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_es.h new file mode 100644 index 0000000..3c8e04e --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_es.h @@ -0,0 +1,668 @@ +/***************************************************************************** + * vlc_es.h: Elementary stream formats descriptions + ***************************************************************************** + * Copyright (C) 1999-2012 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_ES_H +#define VLC_ES_H 1 + +#include +#include +#include +#include + +/** + * \file + * This file defines the elementary streams format types + */ + +/** + * video palette data + * \see video_format_t + * \see subs_format_t + */ +#define VIDEO_PALETTE_COLORS_MAX 256 + +struct video_palette_t +{ + int i_entries; /**< to keep the compatibility with libavcodec's palette */ + uint8_t palette[VIDEO_PALETTE_COLORS_MAX][4]; /**< 4-byte RGBA/YUVA palette */ +}; + +/** + * audio replay gain description + */ +#define AUDIO_REPLAY_GAIN_MAX (2) +#define AUDIO_REPLAY_GAIN_TRACK (0) +#define AUDIO_REPLAY_GAIN_ALBUM (1) +typedef struct +{ + /* true if we have the peak value */ + bool pb_peak[AUDIO_REPLAY_GAIN_MAX]; + /* peak value where 1.0 means full sample value */ + float pf_peak[AUDIO_REPLAY_GAIN_MAX]; + + /* true if we have the gain value */ + bool pb_gain[AUDIO_REPLAY_GAIN_MAX]; + /* gain value in dB */ + float pf_gain[AUDIO_REPLAY_GAIN_MAX]; +} audio_replay_gain_t; + + +/** + * Audio channel type + */ +typedef enum audio_channel_type_t +{ + AUDIO_CHANNEL_TYPE_BITMAP, + AUDIO_CHANNEL_TYPE_AMBISONICS, +} audio_channel_type_t; + +/** + * audio format description + */ +struct audio_format_t +{ + vlc_fourcc_t i_format; /**< audio format fourcc */ + unsigned int i_rate; /**< audio sample-rate */ + + /* Describes the channels configuration of the samples (ie. number of + * channels which are available in the buffer, and positions). */ + uint16_t i_physical_channels; + + /* Describes the chan mode, either set from the input + * (demux/codec/packetizer) or overridden by the user, used by audio + * filters. */ + uint16_t i_chan_mode; + + /* Channel type */ + audio_channel_type_t channel_type; + + /* Optional - for A/52, SPDIF and DTS types : */ + /* Bytes used by one compressed frame, depends on bitrate. */ + unsigned int i_bytes_per_frame; + + /* Number of sampleframes contained in one compressed frame. */ + unsigned int i_frame_length; + /* Please note that it may be completely arbitrary - buffers are not + * obliged to contain a integral number of so-called "frames". It's + * just here for the division : + * buffer_size = i_nb_samples * i_bytes_per_frame / i_frame_length + */ + + /* FIXME ? (used by the codecs) */ + unsigned i_bitspersample; + unsigned i_blockalign; + uint8_t i_channels; /* must be <=32 */ +}; + +/* Values available for audio channels */ +#define AOUT_CHAN_CENTER 0x1 +#define AOUT_CHAN_LEFT 0x2 +#define AOUT_CHAN_RIGHT 0x4 +#define AOUT_CHAN_REARCENTER 0x10 +#define AOUT_CHAN_REARLEFT 0x20 +#define AOUT_CHAN_REARRIGHT 0x40 +#define AOUT_CHAN_MIDDLELEFT 0x100 +#define AOUT_CHAN_MIDDLERIGHT 0x200 +#define AOUT_CHAN_LFE 0x1000 + +#define AOUT_CHANS_FRONT (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT) +#define AOUT_CHANS_MIDDLE (AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT) +#define AOUT_CHANS_REAR (AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT) +#define AOUT_CHANS_CENTER (AOUT_CHAN_CENTER | AOUT_CHAN_REARCENTER) + +#define AOUT_CHANS_STEREO AOUT_CHANS_2_0 +#define AOUT_CHANS_2_0 (AOUT_CHANS_FRONT) +#define AOUT_CHANS_2_1 (AOUT_CHANS_FRONT | AOUT_CHAN_LFE) +#define AOUT_CHANS_3_0 (AOUT_CHANS_FRONT | AOUT_CHAN_CENTER) +#define AOUT_CHANS_3_1 (AOUT_CHANS_3_0 | AOUT_CHAN_LFE) +#define AOUT_CHANS_4_0 (AOUT_CHANS_FRONT | AOUT_CHANS_REAR) +#define AOUT_CHANS_4_1 (AOUT_CHANS_4_0 | AOUT_CHAN_LFE) +#define AOUT_CHANS_5_0 (AOUT_CHANS_4_0 | AOUT_CHAN_CENTER) +#define AOUT_CHANS_5_1 (AOUT_CHANS_5_0 | AOUT_CHAN_LFE) +#define AOUT_CHANS_6_0 (AOUT_CHANS_4_0 | AOUT_CHANS_MIDDLE) +#define AOUT_CHANS_7_0 (AOUT_CHANS_6_0 | AOUT_CHAN_CENTER) +#define AOUT_CHANS_7_1 (AOUT_CHANS_5_1 | AOUT_CHANS_MIDDLE) +#define AOUT_CHANS_8_1 (AOUT_CHANS_7_1 | AOUT_CHAN_REARCENTER) + +#define AOUT_CHANS_4_0_MIDDLE (AOUT_CHANS_FRONT | AOUT_CHANS_MIDDLE) +#define AOUT_CHANS_4_CENTER_REAR (AOUT_CHANS_FRONT | AOUT_CHANS_CENTER) +#define AOUT_CHANS_5_0_MIDDLE (AOUT_CHANS_4_0_MIDDLE | AOUT_CHAN_CENTER) +#define AOUT_CHANS_6_1_MIDDLE (AOUT_CHANS_5_0_MIDDLE | AOUT_CHAN_REARCENTER | AOUT_CHAN_LFE) + +/* Maximum number of mapped channels (or the maximum of bits set in + * i_physical_channels) */ +#define AOUT_CHAN_MAX 9 +/* Maximum number of unmapped channels */ +#define INPUT_CHAN_MAX 64 + +/* Values available for i_chan_mode only */ +#define AOUT_CHANMODE_DUALMONO 0x1 +#define AOUT_CHANMODE_DOLBYSTEREO 0x2 + +/** + * Picture orientation. + */ +typedef enum video_orientation_t +{ + ORIENT_TOP_LEFT = 0, /**< Top line represents top, left column left. */ + ORIENT_TOP_RIGHT, /**< Flipped horizontally */ + ORIENT_BOTTOM_LEFT, /**< Flipped vertically */ + ORIENT_BOTTOM_RIGHT, /**< Rotated 180 degrees */ + ORIENT_LEFT_TOP, /**< Transposed */ + ORIENT_LEFT_BOTTOM, /**< Rotated 90 degrees clockwise */ + ORIENT_RIGHT_TOP, /**< Rotated 90 degrees anti-clockwise */ + ORIENT_RIGHT_BOTTOM, /**< Anti-transposed */ + + ORIENT_NORMAL = ORIENT_TOP_LEFT, + ORIENT_TRANSPOSED = ORIENT_LEFT_TOP, + ORIENT_ANTI_TRANSPOSED = ORIENT_RIGHT_BOTTOM, + ORIENT_HFLIPPED = ORIENT_TOP_RIGHT, + ORIENT_VFLIPPED = ORIENT_BOTTOM_LEFT, + ORIENT_ROTATED_180 = ORIENT_BOTTOM_RIGHT, + ORIENT_ROTATED_270 = ORIENT_LEFT_BOTTOM, + ORIENT_ROTATED_90 = ORIENT_RIGHT_TOP, +} video_orientation_t; +/** Convert EXIF orientation to enum video_orientation_t */ +#define ORIENT_FROM_EXIF(exif) ((0x57642310U >> (4 * ((exif) - 1))) & 7) +/** Convert enum video_orientation_t to EXIF */ +#define ORIENT_TO_EXIF(orient) ((0x76853421U >> (4 * (orient))) & 15) +/** If the orientation is natural or mirrored */ +#define ORIENT_IS_MIRROR(orient) parity(orient) +/** If the orientation swaps dimensions */ +#define ORIENT_IS_SWAP(orient) (((orient) & 4) != 0) +/** Applies horizontal flip to an orientation */ +#define ORIENT_HFLIP(orient) ((orient) ^ 1) +/** Applies vertical flip to an orientation */ +#define ORIENT_VFLIP(orient) ((orient) ^ 2) +/** Applies horizontal flip to an orientation */ +#define ORIENT_ROTATE_180(orient) ((orient) ^ 3) + +typedef enum video_transform_t +{ + TRANSFORM_IDENTITY = ORIENT_NORMAL, + TRANSFORM_HFLIP = ORIENT_HFLIPPED, + TRANSFORM_VFLIP = ORIENT_VFLIPPED, + TRANSFORM_R180 = ORIENT_ROTATED_180, + TRANSFORM_R270 = ORIENT_ROTATED_270, + TRANSFORM_R90 = ORIENT_ROTATED_90, + TRANSFORM_TRANSPOSE = ORIENT_TRANSPOSED, + TRANSFORM_ANTI_TRANSPOSE = ORIENT_ANTI_TRANSPOSED +} video_transform_t; + +typedef enum video_multiview_mode_t +{ + /* No stereoscopy: 2D picture. */ + MULTIVIEW_2D = 0, + + /* Side-by-side with left eye first. */ + MULTIVIEW_STEREO_SBS, + + /* Top-bottom with left eye first. */ + MULTIVIEW_STEREO_TB, + + /* Row sequential with left eye first. */ + MULTIVIEW_STEREO_ROW, + + /* Column sequential with left eye first. */ + MULTIVIEW_STEREO_COL, + + /* Frame sequential with left eye first. */ + MULTIVIEW_STEREO_FRAME, + + /* Checkerboard pattern with left eye first. */ + MULTIVIEW_STEREO_CHECKERBOARD, +} video_multiview_mode_t; + +/** + * Video projection mode. + */ +typedef enum video_projection_mode_t +{ + PROJECTION_MODE_RECTANGULAR = 0, + PROJECTION_MODE_EQUIRECTANGULAR, + + PROJECTION_MODE_CUBEMAP_LAYOUT_STANDARD = 0x100, +} video_projection_mode_t; + +/** + * Video color primaries (a.k.a. chromacities) + */ +typedef enum video_color_primaries_t +{ + COLOR_PRIMARIES_UNDEF, + COLOR_PRIMARIES_BT601_525, + COLOR_PRIMARIES_BT601_625, + COLOR_PRIMARIES_BT709, + COLOR_PRIMARIES_BT2020, + COLOR_PRIMARIES_DCI_P3, + COLOR_PRIMARIES_FCC1953, +#define COLOR_PRIMARIES_SRGB COLOR_PRIMARIES_BT709 +#define COLOR_PRIMARIES_SMTPE_170 COLOR_PRIMARIES_BT601_525 +#define COLOR_PRIMARIES_SMTPE_240 COLOR_PRIMARIES_BT601_525 /* Only differs from 1e10-4 in white Y */ +#define COLOR_PRIMARIES_SMTPE_RP145 COLOR_PRIMARIES_BT601_525 +#define COLOR_PRIMARIES_EBU_3213 COLOR_PRIMARIES_BT601_625 +#define COLOR_PRIMARIES_BT470_BG COLOR_PRIMARIES_BT601_625 +#define COLOR_PRIMARIES_BT470_M COLOR_PRIMARIES_FCC1953 +#define COLOR_PRIMARIES_MAX COLOR_PRIMARIES_FCC1953 +} video_color_primaries_t; + +/** + * Video transfer functions + */ +typedef enum video_transfer_func_t +{ + TRANSFER_FUNC_UNDEF, + TRANSFER_FUNC_LINEAR, + TRANSFER_FUNC_SRGB /*< Gamma 2.2 */, + TRANSFER_FUNC_BT470_BG, + TRANSFER_FUNC_BT470_M, + TRANSFER_FUNC_BT709, + TRANSFER_FUNC_SMPTE_ST2084, + TRANSFER_FUNC_SMPTE_240, + TRANSFER_FUNC_HLG, +#define TRANSFER_FUNC_BT2020 TRANSFER_FUNC_BT709 +#define TRANSFER_FUNC_SMPTE_170 TRANSFER_FUNC_BT709 +#define TRANSFER_FUNC_SMPTE_274 TRANSFER_FUNC_BT709 +#define TRANSFER_FUNC_SMPTE_293 TRANSFER_FUNC_BT709 +#define TRANSFER_FUNC_SMPTE_296 TRANSFER_FUNC_BT709 +#define TRANSFER_FUNC_ARIB_B67 TRANSFER_FUNC_HLG +#define TRANSFER_FUNC_MAX TRANSFER_FUNC_HLG +} video_transfer_func_t; + +/** + * Video color space (i.e. YCbCr matrices) + */ +typedef enum video_color_space_t +{ + COLOR_SPACE_UNDEF, + COLOR_SPACE_BT601, + COLOR_SPACE_BT709, + COLOR_SPACE_BT2020, +#define COLOR_SPACE_SRGB COLOR_SPACE_BT709 +#define COLOR_SPACE_SMPTE_170 COLOR_SPACE_BT601 +#define COLOR_SPACE_SMPTE_240 COLOR_SPACE_SMPTE_170 +#define COLOR_SPACE_MAX COLOR_SPACE_BT2020 +} video_color_space_t; + +/** + * Video chroma location + */ +typedef enum video_chroma_location_t +{ + CHROMA_LOCATION_UNDEF, + CHROMA_LOCATION_LEFT, /*< Most common in MPEG-2 Video, H.264/265 */ + CHROMA_LOCATION_CENTER, /*< Most common in MPEG-1 Video, JPEG */ + CHROMA_LOCATION_TOP_LEFT, + CHROMA_LOCATION_TOP_CENTER, + CHROMA_LOCATION_BOTTOM_LEFT, + CHROMA_LOCATION_BOTTOM_CENTER, +#define CHROMA_LOCATION_MAX CHROMA_LOCATION_BOTTOM_CENTER +} video_chroma_location_t; + +/** + * video format description + */ +struct video_format_t +{ + vlc_fourcc_t i_chroma; /**< picture chroma */ + + unsigned int i_width; /**< picture width */ + unsigned int i_height; /**< picture height */ + unsigned int i_x_offset; /**< start offset of visible area */ + unsigned int i_y_offset; /**< start offset of visible area */ + unsigned int i_visible_width; /**< width of visible area */ + unsigned int i_visible_height; /**< height of visible area */ + + unsigned int i_bits_per_pixel; /**< number of bits per pixel */ + + unsigned int i_sar_num; /**< sample/pixel aspect ratio */ + unsigned int i_sar_den; + + unsigned int i_frame_rate; /**< frame rate numerator */ + unsigned int i_frame_rate_base; /**< frame rate denominator */ + + uint32_t i_rmask, i_gmask, i_bmask; /**< color masks for RGB chroma */ + int i_rrshift, i_lrshift; + int i_rgshift, i_lgshift; + int i_rbshift, i_lbshift; + video_palette_t *p_palette; /**< video palette from demuxer */ + video_orientation_t orientation; /**< picture orientation */ + video_color_primaries_t primaries; /**< color primaries */ + video_transfer_func_t transfer; /**< transfer function */ + video_color_space_t space; /**< YCbCr color space */ + bool b_color_range_full; /**< 0-255 instead of 16-235 */ + video_chroma_location_t chroma_location; /**< YCbCr chroma location */ + + video_multiview_mode_t multiview_mode; /** Multiview mode, 2D, 3D */ + + video_projection_mode_t projection_mode; /**< projection mode */ + vlc_viewpoint_t pose; + struct { + /* similar to SMPTE ST 2086 mastering display color volume */ + uint16_t primaries[3*2]; /* G,B,R / x,y */ + uint16_t white_point[2]; /* x,y */ + uint32_t max_luminance; + uint32_t min_luminance; + } mastering; + struct { + /* similar to CTA-861.3 content light level */ + uint16_t MaxCLL; /* max content light level */ + uint16_t MaxFALL; /* max frame average light level */ + } lighting; + uint32_t i_cubemap_padding; /**< padding in pixels of the cube map faces */ +}; + +/** + * Initialize a video_format_t structure with chroma 'i_chroma' + * \param p_src pointer to video_format_t structure + * \param i_chroma chroma value to use + */ +static inline void video_format_Init( video_format_t *p_src, vlc_fourcc_t i_chroma ) +{ + memset( p_src, 0, sizeof( video_format_t ) ); + p_src->i_chroma = i_chroma; + vlc_viewpoint_init( &p_src->pose ); +} + +/** + * Copy video_format_t including the palette + * \param p_dst video_format_t to copy to + * \param p_src video_format_t to copy from + */ +static inline int video_format_Copy( video_format_t *p_dst, const video_format_t *p_src ) +{ + memcpy( p_dst, p_src, sizeof( *p_dst ) ); + if( p_src->p_palette ) + { + p_dst->p_palette = (video_palette_t *) malloc( sizeof( video_palette_t ) ); + if( !p_dst->p_palette ) + return VLC_ENOMEM; + memcpy( p_dst->p_palette, p_src->p_palette, sizeof( *p_dst->p_palette ) ); + } + return VLC_SUCCESS; +} + +static inline void video_format_AdjustColorSpace( video_format_t *p_fmt ) +{ + if ( p_fmt->primaries == COLOR_PRIMARIES_UNDEF ) + { + if ( p_fmt->i_visible_height > 576 ) // HD + p_fmt->primaries = COLOR_PRIMARIES_BT709; + else if ( p_fmt->i_visible_height > 525 ) // PAL + p_fmt->primaries = COLOR_PRIMARIES_BT601_625; + else + p_fmt->primaries = COLOR_PRIMARIES_BT601_525; + } + + if ( p_fmt->transfer == TRANSFER_FUNC_UNDEF ) + { + if ( p_fmt->i_visible_height > 576 ) // HD + p_fmt->transfer = TRANSFER_FUNC_BT709; + else + p_fmt->transfer = TRANSFER_FUNC_SRGB; + } + + if ( p_fmt->space == COLOR_SPACE_UNDEF ) + { + if ( p_fmt->i_visible_height > 576 ) // HD + p_fmt->space = COLOR_SPACE_BT709; + else + p_fmt->space = COLOR_SPACE_BT601; + } +} + +/** + * Cleanup and free palette of this video_format_t + * \param p_src video_format_t structure to clean + */ +static inline void video_format_Clean( video_format_t *p_src ) +{ + free( p_src->p_palette ); + memset( p_src, 0, sizeof( video_format_t ) ); +} + +/** + * It will fill up a video_format_t using the given arguments. + * Note that the video_format_t must already be initialized. + */ +VLC_API void video_format_Setup( video_format_t *, vlc_fourcc_t i_chroma, + int i_width, int i_height, int i_visible_width, int i_visible_height, + int i_sar_num, int i_sar_den ); + +/** + * It will copy the crop properties from a video_format_t to another. + */ +VLC_API void video_format_CopyCrop( video_format_t *, const video_format_t * ); + +/** + * It will compute the crop/ar properties when scaling. + */ +VLC_API void video_format_ScaleCropAr( video_format_t *, const video_format_t * ); + +/** + * This function "normalizes" the formats orientation, by switching the a/r according to the orientation, + * producing a format whose orientation is ORIENT_NORMAL. It makes a shallow copy (pallette is not alloc'ed). + */ +VLC_API void video_format_ApplyRotation(video_format_t * /*restrict*/ out, + const video_format_t *in); + +/** + * This function applies the transform operation to fmt. + */ +VLC_API void video_format_TransformBy(video_format_t *fmt, video_transform_t transform); + +/** + * This function applies the transforms necessary to fmt so that the resulting fmt + * has the dst_orientation. + */ +VLC_API void video_format_TransformTo(video_format_t *fmt, video_orientation_t dst_orientation); + +/** + * Returns the operation required to transform src into dst. + */ +VLC_API video_transform_t video_format_GetTransform(video_orientation_t src, video_orientation_t dst); + +/** + * This function will check if the first video format is similar + * to the second one. + */ +VLC_API bool video_format_IsSimilar( const video_format_t *, const video_format_t * ); + +/** + * It prints details about the given video_format_t + */ +VLC_API void video_format_Print( vlc_object_t *, const char *, const video_format_t * ); + + +static inline video_transform_t transform_Inverse( video_transform_t transform ) +{ + switch ( transform ) { + case TRANSFORM_R90: + return TRANSFORM_R270; + case TRANSFORM_R270: + return TRANSFORM_R90; + default: + return transform; + } +} +/** + * subtitles format description + */ +struct subs_format_t +{ + /* the character encoding of the text of the subtitle. + * all gettext recognized shorts can be used */ + char *psz_encoding; + + + int i_x_origin; /**< x coordinate of the subtitle. 0 = left */ + int i_y_origin; /**< y coordinate of the subtitle. 0 = top */ + + struct + { + /* */ + uint32_t palette[16+1]; /* CLUT Palette AYVU */ + + /* the width of the original movie the spu was extracted from */ + int i_original_frame_width; + /* the height of the original movie the spu was extracted from */ + int i_original_frame_height; + } spu; + + struct + { + int i_id; + } dvb; + struct + { + int i_magazine; + int i_page; + } teletext; + struct + { + uint8_t i_channel; + /* Reorder depth of transport video, -1 for no reordering */ + int i_reorder_depth; + } cc; + + text_style_t *p_style; /* Default styles to use */ +}; + +#define SPU_PALETTE_DEFINED 0xbeefbeef + +/** + * ES language definition + */ +typedef struct extra_languages_t +{ + char *psz_language; + char *psz_description; +} extra_languages_t; + +/** ES Categories */ +enum es_format_category_e +{ + UNKNOWN_ES = 0x00, + VIDEO_ES, + AUDIO_ES, + SPU_ES, + DATA_ES, +}; +#define ES_CATEGORY_COUNT (DATA_ES + 1) + +/** + * ES format definition + */ +#define ES_PRIORITY_NOT_SELECTABLE -2 +#define ES_PRIORITY_NOT_DEFAULTABLE -1 +#define ES_PRIORITY_SELECTABLE_MIN 0 +#define ES_PRIORITY_MIN ES_PRIORITY_NOT_SELECTABLE +struct es_format_t +{ + enum es_format_category_e i_cat; /**< ES category */ + vlc_fourcc_t i_codec; /**< FOURCC value as used in vlc */ + vlc_fourcc_t i_original_fourcc; /**< original FOURCC from the container */ + + int i_id; /**< es identifier, where means + -1: let the core mark the right id + >=0: valid id */ + int i_group; /**< group identifier, where means: + -1 : standalone + >= 0 then a "group" (program) is created + for each value */ + int i_priority; /**< priority, where means: + -2 : mean not selectable by the users + -1 : mean not selected by default even + when no other stream + >=0: priority */ + + char *psz_language; /**< human-readable language name */ + char *psz_description; /**< human-readable description of language */ + unsigned i_extra_languages; /**< length in bytes of extra language data pointer */ + extra_languages_t *p_extra_languages; /**< extra language data needed by some decoders */ + + union { + struct { + audio_format_t audio; /**< description of audio format */ + audio_replay_gain_t audio_replay_gain; /*< audio replay gain information */ + }; + video_format_t video; /**< description of video format */ + subs_format_t subs; /**< description of subtitle format */ + }; + + unsigned int i_bitrate; /**< bitrate of this ES */ + int i_profile; /**< codec specific information (like real audio flavor, mpeg audio layer, h264 profile ...) */ + int i_level; /**< codec specific information: indicates maximum restrictions on the stream (resolution, bitrate, codec features ...) */ + + bool b_packetized; /**< whether the data is packetized (ie. not truncated) */ + int i_extra; /**< length in bytes of extra data pointer */ + void *p_extra; /**< extra data needed by some decoders or muxers */ + +}; + +/** + * This function will fill all RGB shift from RGB masks. + */ +VLC_API void video_format_FixRgb( video_format_t * ); + +/** + * This function will initialize a es_format_t structure. + */ +VLC_API void es_format_Init( es_format_t *, int i_cat, vlc_fourcc_t i_codec ); + +/** + * This function will initialize a es_format_t structure from a video_format_t. + */ +VLC_API void es_format_InitFromVideo( es_format_t *, const video_format_t * ); + +/** + * This functions will copy a es_format_t. + */ +VLC_API int es_format_Copy( es_format_t *p_dst, const es_format_t *p_src ); + +/** + * This function will clean up a es_format_t and release all associated + * resources. + * You can call it multiple times on the same structure. + */ +VLC_API void es_format_Clean( es_format_t *fmt ); + +/** + * This function will check if the first ES format is similar + * to the second one. + * + * All descriptive fields are ignored. + */ +VLC_API bool es_format_IsSimilar( const es_format_t *, const es_format_t * ); + +/** + * Changes ES format to another category + * Format must have been properly initialized + */ +static inline void es_format_Change( es_format_t *fmt, int i_cat, vlc_fourcc_t i_codec ) +{ + es_format_Clean( fmt ); + es_format_Init( fmt, i_cat, i_codec ); +} + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_es_out.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_es_out.h new file mode 100644 index 0000000..5d7ebca --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_es_out.h @@ -0,0 +1,183 @@ +/***************************************************************************** + * vlc_es_out.h: es_out (demuxer output) descriptor, queries and methods + ***************************************************************************** + * Copyright (C) 1999-2004 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_ES_OUT_H +#define VLC_ES_OUT_H 1 + +/** + * \defgroup es_out ES output + * \ingroup input + * Elementary streams output + * @{ + * \file + * Elementary streams output interface + */ + +enum es_out_query_e +{ + /* set or change the selected ES in its category (audio/video/spu) */ + ES_OUT_SET_ES, /* arg1= es_out_id_t* */ + ES_OUT_RESTART_ES, /* arg1= es_out_id_t* */ + ES_OUT_RESTART_ALL_ES, /* Deprecated, no effect */ + + /* set 'default' tag on ES (copied across from container) */ + ES_OUT_SET_ES_DEFAULT, /* arg1= es_out_id_t* */ + + /* force (un)selection of the ES (bypass current mode) + XXX: this will not change the state of any other ES ! (see SET_ES) */ + ES_OUT_SET_ES_STATE,/* arg1= es_out_id_t* arg2=bool */ + ES_OUT_GET_ES_STATE,/* arg1= es_out_id_t* arg2=bool* */ + + /* sets es selection policy when in auto mode */ + ES_OUT_SET_ES_CAT_POLICY, /* arg1=es_format_category_e arg2=es_out_policy_e */ + + /* */ + ES_OUT_SET_GROUP, /* arg1= int */ + + /* PCR handling, DTS/PTS will be automatically computed using thoses PCR + * XXX: SET_PCR(_GROUP) are in charge of the pace control. They will wait + * to slow down the demuxer so that it reads at the right speed. + * XXX: if you want PREROLL just call ES_OUT_SET_NEXT_DISPLAY_TIME and send + * as you would normally do. + */ + ES_OUT_SET_PCR, /* arg1=int64_t i_pcr(microsecond!) (using default group 0)*/ + ES_OUT_SET_GROUP_PCR, /* arg1= int i_group, arg2=int64_t i_pcr(microsecond!)*/ + ES_OUT_RESET_PCR, /* no arg */ + + /* Try not to use this one as it is a bit hacky */ + ES_OUT_SET_ES_FMT, /* arg1= es_out_id_t* arg2=es_format_t* */ + + /* Allow preroll of data (data with dts/pts < i_pts for all ES will be decoded but not displayed */ + ES_OUT_SET_NEXT_DISPLAY_TIME, /* arg1=int64_t i_pts(microsecond) */ + /* Set meta data for group (dynamic) (The vlc_meta_t is not modified nor released) */ + ES_OUT_SET_GROUP_META, /* arg1=int i_group arg2=const vlc_meta_t */ + /* Set epg for group (dynamic) (The vlc_epg_t is not modified nor released) */ + ES_OUT_SET_GROUP_EPG, /* arg1=int i_group arg2=const vlc_epg_t * */ + ES_OUT_SET_GROUP_EPG_EVENT, /* arg1=int i_group arg2=const vlc_epg_event_t * */ + ES_OUT_SET_EPG_TIME, /* arg1=int int64_t */ + + /* */ + ES_OUT_DEL_GROUP, /* arg1=int i_group */ + + /* Set scrambled state for one es */ + ES_OUT_SET_ES_SCRAMBLED_STATE, /* arg1=int i_group arg2=es_out_id_t* */ + + /* Stop any buffering being done, and ask if es_out has no more data to + * play. + * It will not block and so MUST be used carrefully. The only good reason + * is for interactive playback (like for DVD menu). + * XXX You SHALL call ES_OUT_RESET_PCR before any other es_out_Control/Send calls. */ + ES_OUT_GET_EMPTY, /* arg1=bool* res=cannot fail */ + + /* Set global meta data (The vlc_meta_t is not modified nor released) */ + ES_OUT_SET_META, /* arg1=const vlc_meta_t * */ + + /* PCR system clock manipulation for external clock synchronization */ + ES_OUT_GET_PCR_SYSTEM, /* arg1=vlc_tick_t *, arg2=vlc_tick_t * res=can fail */ + ES_OUT_MODIFY_PCR_SYSTEM, /* arg1=int is_absolute, arg2=vlc_tick_t, res=can fail */ + + ES_OUT_POST_SUBNODE, /* arg1=input_item_node_t *, res=can fail */ + + /* First value usable for private control */ + ES_OUT_PRIVATE_START = 0x10000, +}; + +enum es_out_policy_e +{ + ES_OUT_ES_POLICY_EXCLUSIVE = 0,/* Enforces single ES selection only */ + ES_OUT_ES_POLICY_SIMULTANEOUS, /* Allows multiple ES per cat */ +}; + +struct es_out_t +{ + es_out_id_t *(*pf_add) ( es_out_t *, const es_format_t * ); + int (*pf_send) ( es_out_t *, es_out_id_t *, block_t * ); + void (*pf_del) ( es_out_t *, es_out_id_t * ); + int (*pf_control)( es_out_t *, int i_query, va_list ); + void (*pf_destroy)( es_out_t * ); + + es_out_sys_t *p_sys; +}; + +VLC_USED +static inline es_out_id_t * es_out_Add( es_out_t *out, const es_format_t *fmt ) +{ + return out->pf_add( out, fmt ); +} + +static inline void es_out_Del( es_out_t *out, es_out_id_t *id ) +{ + out->pf_del( out, id ); +} + +static inline int es_out_Send( es_out_t *out, es_out_id_t *id, + block_t *p_block ) +{ + return out->pf_send( out, id, p_block ); +} + +static inline int es_out_vaControl( es_out_t *out, int i_query, va_list args ) +{ + return out->pf_control( out, i_query, args ); +} + +static inline int es_out_Control( es_out_t *out, int i_query, ... ) +{ + va_list args; + int i_result; + + va_start( args, i_query ); + i_result = es_out_vaControl( out, i_query, args ); + va_end( args ); + return i_result; +} + +static inline void es_out_Delete( es_out_t *p_out ) +{ + p_out->pf_destroy( p_out ); +} + +static inline int es_out_SetPCR( es_out_t *out, int64_t pcr ) +{ + return es_out_Control( out, ES_OUT_SET_PCR, pcr ); +} + +static inline int es_out_ControlSetMeta( es_out_t *out, const vlc_meta_t *p_meta ) +{ + return es_out_Control( out, ES_OUT_SET_META, p_meta ); +} + +static inline int es_out_ControlGetPcrSystem( es_out_t *out, vlc_tick_t *pi_system, vlc_tick_t *pi_delay ) +{ + return es_out_Control( out, ES_OUT_GET_PCR_SYSTEM, pi_system, pi_delay ); +} +static inline int es_out_ControlModifyPcrSystem( es_out_t *out, bool b_absolute, vlc_tick_t i_system ) +{ + return es_out_Control( out, ES_OUT_MODIFY_PCR_SYSTEM, b_absolute, i_system ); +} + +/** + * @} + */ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_events.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_events.h new file mode 100644 index 0000000..4cca73e --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_events.h @@ -0,0 +1,209 @@ +/***************************************************************************** + * vlc_events.h: events definitions + * Interface used to send events. + ***************************************************************************** + * Copyright (C) 2007 VLC authors and VideoLAN + * $Id$ + * + * Authors: Pierre d'Herbemont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_EVENTS_H +# define VLC_EVENTS_H + +#include +#include + +/** + * \file + * This file is the interface definition for events + * (implementation in src/misc/events.c) + */ + +/***************************************************************************** + * Documentation + *****************************************************************************/ +/* + **** Background + * + * This implements a way to send and receive event for an object (which can be + * a simple C struct or less). + * + * This is in direct concurrency with the Variable based Callback + * (see src/misc/variables.c). + * + * It has the following advantages over Variable based Callback: + * - No need to implement the whole VLC_COMMON_MEMBERS in the object, + * thus it reduce it size. This is especially true for input_item_t which + * doesn't have VLC_COMMON_MEMBERS. This is the first reason of existence of + * this implementation. + * - Libvlc can easily be based upon that. + * - Existing event are clearly declared (in include/vlc_events.h) + * + * + **** Example usage + * + * (vlc_cool_object_t doesn't need to have the VLC_COMMON_MEMBERS.) + * + * struct vlc_cool_object_t + * { + * ... + * vlc_event_manager_t p_event_manager; + * ... + * } + * + * vlc_my_cool_object_new() + * { + * ... + * vlc_event_manager_init( &p_self->p_event_manager, p_self, p_a_libvlc_object ); + * ... + * } + * + * vlc_my_cool_object_release() + * { + * ... + * vlc_event_manager_fini( &p_self->p_event_manager ); + * ... + * } + * + * vlc_my_cool_object_do_something() + * { + * ... + * vlc_event_t event; + * event.type = vlc_MyCoolObjectDidSomething; + * event.u.my_cool_object_did_something.what_it_did = kSomething; + * vlc_event_send( &p_self->p_event_manager, &event ); + * } + * */ + + /***************************************************************************** + * Event Type + *****************************************************************************/ + +/* List of event */ +typedef enum vlc_event_type_t { + /* Input item events */ + vlc_InputItemMetaChanged, + vlc_InputItemSubItemTreeAdded, + vlc_InputItemDurationChanged, + vlc_InputItemPreparsedChanged, + vlc_InputItemNameChanged, + vlc_InputItemInfoChanged, + vlc_InputItemErrorWhenReadingChanged, + vlc_InputItemPreparseEnded, +} vlc_event_type_t; + +typedef struct vlc_event_listeners_group_t +{ + DECL_ARRAY(struct vlc_event_listener_t *) listeners; +} vlc_event_listeners_group_t; + +/* Event manager type */ +typedef struct vlc_event_manager_t +{ + void * p_obj; + vlc_mutex_t lock; + vlc_event_listeners_group_t events[vlc_InputItemPreparseEnded + 1]; +} vlc_event_manager_t; + +/* Event definition */ +typedef struct vlc_event_t +{ + vlc_event_type_t type; + void * p_obj; /* Sender object, automatically filled by vlc_event_send() */ + union vlc_event_type_specific + { + /* Input item events */ + struct vlc_input_item_meta_changed + { + vlc_meta_type_t meta_type; + } input_item_meta_changed; + struct vlc_input_item_subitem_added + { + input_item_t * p_new_child; + } input_item_subitem_added; + struct vlc_input_item_subitem_tree_added + { + input_item_node_t * p_root; + } input_item_subitem_tree_added; + struct vlc_input_item_duration_changed + { + vlc_tick_t new_duration; + } input_item_duration_changed; + struct vlc_input_item_preparsed_changed + { + int new_status; + } input_item_preparsed_changed; + struct vlc_input_item_name_changed + { + const char * new_name; + } input_item_name_changed; + struct vlc_input_item_info_changed + { + void * unused; + } input_item_info_changed; + struct input_item_error_when_reading_changed + { + bool new_value; + } input_item_error_when_reading_changed; + struct input_item_preparse_ended + { + int new_status; + } input_item_preparse_ended; + } u; +} vlc_event_t; + +/* Event callback type */ +typedef void ( *vlc_event_callback_t )( const vlc_event_t *, void * ); + + /***************************************************************************** + * Event manager + *****************************************************************************/ + +/* + * p_obj points to the object that owns the event manager, and from + * which events are sent + */ +void vlc_event_manager_init( vlc_event_manager_t * p_em, void * p_obj ); + +/* + * Destroy + */ +void vlc_event_manager_fini( vlc_event_manager_t * p_em ); + +/* + * Send an event to the listener attached to this p_em. + */ +void vlc_event_send( vlc_event_manager_t * p_em, vlc_event_t * ); + +/* + * Add a callback for an event. + */ +VLC_API int vlc_event_attach( vlc_event_manager_t * p_event_manager, + vlc_event_type_t event_type, + vlc_event_callback_t pf_callback, + void *p_user_data ); + +/* + * Remove a callback for an event. + */ +VLC_API void vlc_event_detach( vlc_event_manager_t *p_event_manager, + vlc_event_type_t event_type, + vlc_event_callback_t pf_callback, + void *p_user_data ); + +#endif /* VLC_EVENTS_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_filter.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_filter.h new file mode 100644 index 0000000..2afa101 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_filter.h @@ -0,0 +1,470 @@ +/***************************************************************************** + * vlc_filter.h: filter related structures and functions + ***************************************************************************** + * Copyright (C) 1999-2014 VLC authors and VideoLAN + * + * Authors: Gildas Bazin + * Antoine Cellerier + * Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_FILTER_H +#define VLC_FILTER_H 1 + +#include + +/** + * \defgroup filter Filters + * \ingroup output + * Audio, video, text filters + * @{ + * \file + * Filter modules interface + */ + +typedef struct filter_owner_sys_t filter_owner_sys_t; + +typedef struct filter_owner_t +{ + void *sys; + + union + { + struct + { + picture_t * (*buffer_new)( filter_t * ); + } video; + struct + { + subpicture_t * (*buffer_new)( filter_t * ); + } sub; + }; +} filter_owner_t; + +struct vlc_mouse_t; + +/** Structure describing a filter + * @warning BIG FAT WARNING : the code relies on the first 4 members of + * filter_t and decoder_t to be the same, so if you have anything to add, + * do it at the end of the structure. + */ +struct filter_t +{ + VLC_COMMON_MEMBERS + + /* Module properties */ + module_t * p_module; + filter_sys_t * p_sys; + + /* Input format */ + es_format_t fmt_in; + + /* Output format of filter */ + es_format_t fmt_out; + bool b_allow_fmt_out_change; + + /* Name of the "video filter" shortcut that is requested, can be NULL */ + const char * psz_name; + /* Filter configuration */ + config_chain_t * p_cfg; + + union + { + /** Filter a picture (video filter) */ + picture_t * (*pf_video_filter)( filter_t *, picture_t * ); + + /** Filter an audio block (audio filter) */ + block_t * (*pf_audio_filter)( filter_t *, block_t * ); + + /** Blend a subpicture onto a picture (blend) */ + void (*pf_video_blend)( filter_t *, picture_t *, const picture_t *, + int, int, int ); + + /** Generate a subpicture (sub source) */ + subpicture_t *(*pf_sub_source)( filter_t *, vlc_tick_t ); + + /** Filter a subpicture (sub filter) */ + subpicture_t *(*pf_sub_filter)( filter_t *, subpicture_t * ); + + /** Render text (text render) */ + int (*pf_render)( filter_t *, subpicture_region_t *, + subpicture_region_t *, const vlc_fourcc_t * ); + }; + + union + { + /* TODO: video filter drain */ + /** Drain (audio filter) */ + block_t *(*pf_audio_drain) ( filter_t * ); + }; + + /** Flush + * + * Flush (i.e. discard) any internal buffer in a video or audio filter. + */ + void (*pf_flush)( filter_t * ); + + /** Change viewpoint + * + * Pass a new viewpoint to audio filters. Filters like the spatialaudio one + * used for Ambisonics rendering will change its output according to this + * viewpoint. + */ + void (*pf_change_viewpoint)( filter_t *, const vlc_viewpoint_t * ); + + union + { + /** Filter mouse state (video filter). + * + * If non-NULL, you must convert from output to input formats: + * - If VLC_SUCCESS is returned, the mouse state is propagated. + * - Otherwise, the mouse change is not propagated. + * If NULL, the mouse state is considered unchanged and will be + * propagated. */ + int (*pf_video_mouse)( filter_t *, struct vlc_mouse_t *, + const struct vlc_mouse_t *p_old, + const struct vlc_mouse_t *p_new ); + int (*pf_sub_mouse)( filter_t *, const struct vlc_mouse_t *p_old, + const struct vlc_mouse_t *p_new, + const video_format_t * ); + }; + + /* Input attachments + * XXX use filter_GetInputAttachments */ + int (*pf_get_attachments)( filter_t *, input_attachment_t ***, int * ); + + /* Private structure for the owner of the decoder */ + filter_owner_t owner; +}; + +/** + * This function will return a new picture usable by p_filter as an output + * buffer. You have to release it using picture_Release or by returning + * it to the caller as a pf_video_filter return value. + * Provided for convenience. + * + * \param p_filter filter_t object + * \return new picture on success or NULL on failure + */ +static inline picture_t *filter_NewPicture( filter_t *p_filter ) +{ + picture_t *pic = p_filter->owner.video.buffer_new( p_filter ); + if( pic == NULL ) + msg_Warn( p_filter, "can't get output picture" ); + return pic; +} + +/** + * Flush a filter + * + * This function will flush the state of a filter (audio or video). + */ +static inline void filter_Flush( filter_t *p_filter ) +{ + if( p_filter->pf_flush != NULL ) + p_filter->pf_flush( p_filter ); +} + +static inline void filter_ChangeViewpoint( filter_t *p_filter, + const vlc_viewpoint_t *vp) +{ + if( p_filter->pf_change_viewpoint != NULL ) + p_filter->pf_change_viewpoint( p_filter, vp ); +} + +/** + * This function will drain, then flush an audio filter. + */ +static inline block_t *filter_DrainAudio( filter_t *p_filter ) +{ + if( p_filter->pf_audio_drain ) + return p_filter->pf_audio_drain( p_filter ); + else + return NULL; +} + +/** + * This function will return a new subpicture usable by p_filter as an output + * buffer. You have to release it using subpicture_Delete or by returning it to + * the caller as a pf_sub_source return value. + * Provided for convenience. + * + * \param p_filter filter_t object + * \return new subpicture + */ +static inline subpicture_t *filter_NewSubpicture( filter_t *p_filter ) +{ + subpicture_t *subpic = p_filter->owner.sub.buffer_new( p_filter ); + if( subpic == NULL ) + msg_Warn( p_filter, "can't get output subpicture" ); + return subpic; +} + +/** + * This function gives all input attachments at once. + * + * You MUST release the returned values + */ +static inline int filter_GetInputAttachments( filter_t *p_filter, + input_attachment_t ***ppp_attachment, + int *pi_attachment ) +{ + if( !p_filter->pf_get_attachments ) + return VLC_EGENERIC; + return p_filter->pf_get_attachments( p_filter, + ppp_attachment, pi_attachment ); +} + +/** + * This function duplicates every variables from the filter, and adds a proxy + * callback to trigger filter events from obj. + * + * \param restart_cb a vlc_callback_t to call if the event means restarting the + * filter (i.e. an event on a non-command variable) + */ +VLC_API void filter_AddProxyCallbacks( vlc_object_t *obj, filter_t *filter, + vlc_callback_t restart_cb ); +# define filter_AddProxyCallbacks(a, b, c) \ + filter_AddProxyCallbacks(VLC_OBJECT(a), b, c) + +/** + * This function removes the callbacks previously added to every duplicated + * variables, and removes them afterward. + * + * \param restart_cb the same vlc_callback_t passed to filter_AddProxyCallbacks + */ +VLC_API void filter_DelProxyCallbacks( vlc_object_t *obj, filter_t *filter, + vlc_callback_t restart_cb); +# define filter_DelProxyCallbacks(a, b, c) \ + filter_DelProxyCallbacks(VLC_OBJECT(a), b, c) + +/** + * It creates a blend filter. + * + * Only the chroma properties of the dest format is used (chroma + * type, rgb masks and shifts) + */ +VLC_API filter_t * filter_NewBlend( vlc_object_t *, const video_format_t *p_dst_chroma ) VLC_USED; + +/** + * It configures blend filter parameters that are allowed to changed + * after the creation. + */ +VLC_API int filter_ConfigureBlend( filter_t *, int i_dst_width, int i_dst_height, const video_format_t *p_src ); + +/** + * It blends a picture into another one. + * + * The input picture is not modified and not released. + */ +VLC_API int filter_Blend( filter_t *, picture_t *p_dst, int i_dst_x, int i_dst_y, const picture_t *p_src, int i_alpha ); + +/** + * It destroys a blend filter created by filter_NewBlend. + */ +VLC_API void filter_DeleteBlend( filter_t * ); + +/** + * Create a picture_t *(*)( filter_t *, picture_t * ) compatible wrapper + * using a void (*)( filter_t *, picture_t *, picture_t * ) function + * + * Currently used by the chroma video filters + */ +#define VIDEO_FILTER_WRAPPER( name ) \ + static picture_t *name ## _Filter ( filter_t *p_filter, \ + picture_t *p_pic ) \ + { \ + picture_t *p_outpic = filter_NewPicture( p_filter ); \ + if( p_outpic ) \ + { \ + name( p_filter, p_pic, p_outpic ); \ + picture_CopyProperties( p_outpic, p_pic ); \ + } \ + picture_Release( p_pic ); \ + return p_outpic; \ + } + +/** + * Filter chain management API + * The filter chain management API is used to dynamically construct filters + * and add them in a chain. + */ + +typedef struct filter_chain_t filter_chain_t; + +/** + * Create new filter chain + * + * \param p_object pointer to a vlc object + * \param psz_capability vlc capability of filters in filter chain + * \return pointer to a filter chain + */ +filter_chain_t * filter_chain_New( vlc_object_t *, const char *, enum es_format_category_e ) +VLC_USED; +#define filter_chain_New( a, b, c ) filter_chain_New( VLC_OBJECT( a ), b, c ) + +/** + * Creates a new video filter chain. + * + * \param obj pointer to parent VLC object + * \param change whether to allow changing the output format + * \param owner owner video buffer callbacks + * \return new filter chain, or NULL on error + */ +VLC_API filter_chain_t * filter_chain_NewVideo( vlc_object_t *obj, bool change, + const filter_owner_t *owner ) +VLC_USED; +#define filter_chain_NewVideo( a, b, c ) \ + filter_chain_NewVideo( VLC_OBJECT( a ), b, c ) + +/** + * Delete filter chain will delete all filters in the chain and free all + * allocated data. The pointer to the filter chain is then no longer valid. + * + * \param p_chain pointer to filter chain + */ +VLC_API void filter_chain_Delete( filter_chain_t * ); + +/** + * Reset filter chain will delete all filters in the chain and + * reset p_fmt_in and p_fmt_out to the new values. + * + * \param p_chain pointer to filter chain + * \param p_fmt_in new fmt_in params, may be NULL to leave input fmt unchanged + * \param p_fmt_out new fmt_out params, may be NULL to leave output fmt unchanged + */ +VLC_API void filter_chain_Reset( filter_chain_t *, const es_format_t *, const es_format_t * ); + +/** + * Append a filter to the chain. + * + * \param chain filter chain to append a filter to + * \param name filter name + * \param fmt_in filter input format + * \param fmt_out filter output format + * \return a pointer to the filter or NULL on error + */ +VLC_API filter_t *filter_chain_AppendFilter(filter_chain_t *chain, + const char *name, config_chain_t *cfg, const es_format_t *fmt_in, + const es_format_t *fmt_out); + +/** + * Append a conversion to the chain. + * + * \param chain filter chain to append a filter to + * \param fmt_in filter input format + * \param fmt_out filter output format + * \retval 0 on success + * \retval -1 on failure + */ +VLC_API int filter_chain_AppendConverter(filter_chain_t *chain, + const es_format_t *fmt_in, const es_format_t *fmt_out); + +/** + * Append new filter to filter chain from string. + * + * \param chain filter chain to append a filter to + * \param str filters chain nul-terminated string + */ +VLC_API int filter_chain_AppendFromString(filter_chain_t *chain, + const char *str); + +/** + * Delete filter from filter chain. This function also releases the filter + * object and unloads the filter modules. The pointer to p_filter is no + * longer valid after this function successfully returns. + * + * \param chain filter chain to remove the filter from + * \param filter filter to remove from the chain and delete + */ +VLC_API void filter_chain_DeleteFilter(filter_chain_t *chain, + filter_t *filter); + +/** + * Checks if the filter chain is empty. + * + * \param chain pointer to filter chain + * \return true if and only if there are no filters in this filter chain + */ +VLC_API bool filter_chain_IsEmpty(const filter_chain_t *chain); + +/** + * Get last output format of the last element in the filter chain. + * + * \param chain filter chain + */ +VLC_API const es_format_t *filter_chain_GetFmtOut(filter_chain_t *chain); + +/** + * Apply the filter chain to a video picture. + * + * \param chain pointer to filter chain + * \param pic picture to apply filters to + * \return modified picture after applying all video filters + */ +VLC_API picture_t *filter_chain_VideoFilter(filter_chain_t *chain, + picture_t *pic); + +/** + * Flush a video filter chain. + */ +VLC_API void filter_chain_VideoFlush( filter_chain_t * ); + +/** + * Generate subpictures from a chain of subpicture source "filters". + * + * \param chain filter chain + * \param display_date of subpictures + */ +void filter_chain_SubSource(filter_chain_t *chain, spu_t *, + vlc_tick_t display_date); + +/** + * Apply filter chain to subpictures. + * + * \param chain filter chain + * \param subpic subpicture to apply filters on + * \return modified subpicture after applying all subpicture filters + */ +VLC_API subpicture_t *filter_chain_SubFilter(filter_chain_t *chain, + subpicture_t *subpic); + +/** + * Apply the filter chain to a mouse state. + * + * It will be applied from the output to the input. It makes sense only + * for a video filter chain. + * + * The vlc_mouse_t* pointers may be the same. + */ +VLC_API int filter_chain_MouseFilter( filter_chain_t *, struct vlc_mouse_t *, + const struct vlc_mouse_t * ); + +/** + * Inform the filter chain of mouse state. + * + * It makes sense only for a sub source chain. + */ +VLC_API int filter_chain_MouseEvent( filter_chain_t *, + const struct vlc_mouse_t *, + const video_format_t * ); + +int filter_chain_ForEach( filter_chain_t *chain, + int (*cb)( filter_t *, void * ), void *opaque ); + +/** @} */ +#endif /* _VLC_FILTER_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_fingerprinter.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_fingerprinter.h new file mode 100644 index 0000000..dc10644 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_fingerprinter.h @@ -0,0 +1,91 @@ +/***************************************************************************** + * vlc_fingerprinter.h: Fingerprinter abstraction layer + ***************************************************************************** + * Copyright (C) 2012 VLC authors and VideoLAN + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_FINGERPRINTER_H +# define VLC_FINGERPRINTER_H + +#include +#include +#include +#include + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct fingerprinter_sys_t fingerprinter_sys_t; + +struct fingerprint_request_t +{ + input_item_t *p_item; + unsigned int i_duration; /* track length hint in seconds, 0 if unknown */ + struct + { + char *psz_fingerprint; + vlc_array_t metas_array; + } results ; +}; +typedef struct fingerprint_request_t fingerprint_request_t; + +static inline fingerprint_request_t *fingerprint_request_New( input_item_t *p_item ) +{ + fingerprint_request_t *p_r = + ( fingerprint_request_t * ) calloc( 1, sizeof( fingerprint_request_t ) ); + if ( !p_r ) return NULL; + p_r->results.psz_fingerprint = NULL; + p_r->i_duration = 0; + input_item_Hold( p_item ); + p_r->p_item = p_item; + vlc_array_init( & p_r->results.metas_array ); /* shouldn't be needed */ + return p_r; +} + +static inline void fingerprint_request_Delete( fingerprint_request_t *p_f ) +{ + input_item_Release( p_f->p_item ); + free( p_f->results.psz_fingerprint ); + for( size_t i = 0; i < vlc_array_count( & p_f->results.metas_array ); i++ ) + vlc_meta_Delete( (vlc_meta_t *) vlc_array_item_at_index( & p_f->results.metas_array, i ) ); + free( p_f ); +} + +struct fingerprinter_thread_t +{ + VLC_COMMON_MEMBERS + + /* Specific interfaces */ + fingerprinter_sys_t * p_sys; + + module_t * p_module; + + int ( *pf_enqueue ) ( struct fingerprinter_thread_t *f, fingerprint_request_t *r ); + fingerprint_request_t * ( *pf_getresults ) ( struct fingerprinter_thread_t *f ); + void ( *pf_apply ) ( fingerprint_request_t *, size_t i_resultid ); +}; +typedef struct fingerprinter_thread_t fingerprinter_thread_t; + +VLC_API fingerprinter_thread_t *fingerprinter_Create( vlc_object_t *p_this ); +VLC_API void fingerprinter_Destroy( fingerprinter_thread_t *p_fingerprint ); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_fourcc.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_fourcc.h new file mode 100644 index 0000000..97827bd --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_fourcc.h @@ -0,0 +1,702 @@ +/***************************************************************************** + * vlc_fourcc.h: Definition of various FOURCC and helpers + ***************************************************************************** + * Copyright (C) 2009 Laurent Aimar + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_FOURCC_H +#define VLC_FOURCC_H 1 + +#define VLC_CODEC_UNKNOWN VLC_FOURCC('u','n','d','f') + +/* Video codec */ +#define VLC_CODEC_MPGV VLC_FOURCC('m','p','g','v') +#define VLC_CODEC_MP4V VLC_FOURCC('m','p','4','v') +#define VLC_CODEC_DIV1 VLC_FOURCC('D','I','V','1') +#define VLC_CODEC_DIV2 VLC_FOURCC('D','I','V','2') +#define VLC_CODEC_DIV3 VLC_FOURCC('D','I','V','3') +#define VLC_CODEC_SVQ1 VLC_FOURCC('S','V','Q','1') +#define VLC_CODEC_SVQ3 VLC_FOURCC('S','V','Q','3') +#define VLC_CODEC_H264 VLC_FOURCC('h','2','6','4') +#define VLC_CODEC_H263 VLC_FOURCC('h','2','6','3') +#define VLC_CODEC_H263I VLC_FOURCC('I','2','6','3') +#define VLC_CODEC_H263P VLC_FOURCC('I','L','V','R') +#define VLC_CODEC_FLV1 VLC_FOURCC('F','L','V','1') +#define VLC_CODEC_H261 VLC_FOURCC('h','2','6','1') +#define VLC_CODEC_MJPG VLC_FOURCC('M','J','P','G') +#define VLC_CODEC_MJPGB VLC_FOURCC('m','j','p','b') +#define VLC_CODEC_LJPG VLC_FOURCC('L','J','P','G') +#define VLC_CODEC_WMV1 VLC_FOURCC('W','M','V','1') +#define VLC_CODEC_WMV2 VLC_FOURCC('W','M','V','2') +#define VLC_CODEC_WMV3 VLC_FOURCC('W','M','V','3') +#define VLC_CODEC_WMVA VLC_FOURCC('W','M','V','A') +#define VLC_CODEC_WMVP VLC_FOURCC('W','M','V','P') +#define VLC_CODEC_WMVP2 VLC_FOURCC('W','V','P','2') +#define VLC_CODEC_VC1 VLC_FOURCC('V','C','-','1') +#define VLC_CODEC_DAALA VLC_FOURCC('d','a','a','l') +#define VLC_CODEC_THEORA VLC_FOURCC('t','h','e','o') +#define VLC_CODEC_TARKIN VLC_FOURCC('t','a','r','k') +#define VLC_CODEC_DIRAC VLC_FOURCC('d','r','a','c') +#define VLC_CODEC_OGGSPOTS VLC_FOURCC('S','P','O','T') +#define VLC_CODEC_CAVS VLC_FOURCC('C','A','V','S') +#define VLC_CODEC_NUV VLC_FOURCC('N','J','P','G') +#define VLC_CODEC_RV10 VLC_FOURCC('R','V','1','0') +#define VLC_CODEC_RV13 VLC_FOURCC('R','V','1','3') +#define VLC_CODEC_RV20 VLC_FOURCC('R','V','2','0') +#define VLC_CODEC_RV30 VLC_FOURCC('R','V','3','0') +#define VLC_CODEC_RV40 VLC_FOURCC('R','V','4','0') +#define VLC_CODEC_VP3 VLC_FOURCC('V','P','3',' ') +#define VLC_CODEC_VP5 VLC_FOURCC('V','P','5',' ') +#define VLC_CODEC_VP6 VLC_FOURCC('V','P','6','2') +#define VLC_CODEC_VP6F VLC_FOURCC('V','P','6','F') +#define VLC_CODEC_VP6A VLC_FOURCC('V','P','6','A') +#define VLC_CODEC_MSVIDEO1 VLC_FOURCC('M','S','V','C') +#define VLC_CODEC_FLIC VLC_FOURCC('F','L','I','C') +#define VLC_CODEC_SP5X VLC_FOURCC('S','P','5','X') +#define VLC_CODEC_DV VLC_FOURCC('d','v',' ',' ') +#define VLC_CODEC_MSRLE VLC_FOURCC('m','r','l','e') +#define VLC_CODEC_HUFFYUV VLC_FOURCC('H','F','Y','U') +#define VLC_CODEC_FFVHUFF VLC_FOURCC('F','F','V','H') +#define VLC_CODEC_ASV1 VLC_FOURCC('A','S','V','1') +#define VLC_CODEC_ASV2 VLC_FOURCC('A','S','V','2') +#define VLC_CODEC_FFV1 VLC_FOURCC('F','F','V','1') +#define VLC_CODEC_VCR1 VLC_FOURCC('V','C','R','1') +#define VLC_CODEC_CLJR VLC_FOURCC('C','L','J','R') +#define VLC_CODEC_RPZA VLC_FOURCC('r','p','z','a') +#define VLC_CODEC_SMC VLC_FOURCC('s','m','c',' ') +#define VLC_CODEC_CINEPAK VLC_FOURCC('C','V','I','D') +#define VLC_CODEC_TSCC VLC_FOURCC('T','S','C','C') +#define VLC_CODEC_CSCD VLC_FOURCC('C','S','C','D') +#define VLC_CODEC_ZMBV VLC_FOURCC('Z','M','B','V') +#define VLC_CODEC_VMNC VLC_FOURCC('V','M','n','c') +#define VLC_CODEC_FMVC VLC_FOURCC('F','M','V','C') +#define VLC_CODEC_FRAPS VLC_FOURCC('F','P','S','1') +#define VLC_CODEC_TRUEMOTION1 VLC_FOURCC('D','U','C','K') +#define VLC_CODEC_TRUEMOTION2 VLC_FOURCC('T','M','2','0') +#define VLC_CODEC_QTRLE VLC_FOURCC('r','l','e',' ') +#define VLC_CODEC_QDRAW VLC_FOURCC('q','d','r','w') +#define VLC_CODEC_QPEG VLC_FOURCC('Q','P','E','G') +#define VLC_CODEC_ULTI VLC_FOURCC('U','L','T','I') +#define VLC_CODEC_VIXL VLC_FOURCC('V','I','X','L') +#define VLC_CODEC_LOCO VLC_FOURCC('L','O','C','O') +#define VLC_CODEC_WNV1 VLC_FOURCC('W','N','V','1') +#define VLC_CODEC_AASC VLC_FOURCC('A','A','S','C') +#define VLC_CODEC_INDEO2 VLC_FOURCC('I','V','2','0') +#define VLC_CODEC_INDEO3 VLC_FOURCC('I','V','3','1') +#define VLC_CODEC_INDEO4 VLC_FOURCC('I','V','4','1') +#define VLC_CODEC_INDEO5 VLC_FOURCC('I','V','5','0') +#define VLC_CODEC_FLASHSV VLC_FOURCC('F','S','V','1') +#define VLC_CODEC_KMVC VLC_FOURCC('K','M','V','C') +#define VLC_CODEC_SMACKVIDEO VLC_FOURCC('S','M','K','2') +#define VLC_CODEC_DNXHD VLC_FOURCC('A','V','d','n') +#define VLC_CODEC_8BPS VLC_FOURCC('8','B','P','S') +#define VLC_CODEC_MIMIC VLC_FOURCC('M','L','2','O') +#define VLC_CODEC_INTERPLAY VLC_FOURCC('i','m','v','e') +#define VLC_CODEC_IDCIN VLC_FOURCC('I','D','C','I') +#define VLC_CODEC_4XM VLC_FOURCC('4','X','M','V') +#define VLC_CODEC_ROQ VLC_FOURCC('R','o','Q','v') +#define VLC_CODEC_MDEC VLC_FOURCC('M','D','E','C') +#define VLC_CODEC_VMDVIDEO VLC_FOURCC('V','M','D','V') +#define VLC_CODEC_CDG VLC_FOURCC('C','D','G',' ') +#define VLC_CODEC_FRWU VLC_FOURCC('F','R','W','U') +#define VLC_CODEC_AMV VLC_FOURCC('A','M','V',' ') +#define VLC_CODEC_VP7 VLC_FOURCC('V','P','7','0') +#define VLC_CODEC_VP8 VLC_FOURCC('V','P','8','0') +#define VLC_CODEC_VP9 VLC_FOURCC('V','P','9','0') +#define VLC_CODEC_VP10 VLC_FOURCC('V','P',':','0') +#define VLC_CODEC_AV1 VLC_FOURCC('a','v','0','1') +#define VLC_CODEC_JPEG2000 VLC_FOURCC('J','P','2','K') +#define VLC_CODEC_LAGARITH VLC_FOURCC('L','A','G','S') +#define VLC_CODEC_FLASHSV2 VLC_FOURCC('F','S','V','2') +#define VLC_CODEC_PRORES VLC_FOURCC('a','p','c','n') +#define VLC_CODEC_MXPEG VLC_FOURCC('M','X','P','G') +#define VLC_CODEC_CDXL VLC_FOURCC('C','D','X','L') +#define VLC_CODEC_BMVVIDEO VLC_FOURCC('B','M','V','V') +#define VLC_CODEC_UTVIDEO VLC_FOURCC('U','L','R','A') +#define VLC_CODEC_VBLE VLC_FOURCC('V','B','L','E') +#define VLC_CODEC_DXTORY VLC_FOURCC('x','t','o','r') +#define VLC_CODEC_MSS1 VLC_FOURCC('M','S','S','1') +#define VLC_CODEC_MSS2 VLC_FOURCC('M','S','S','2') +#define VLC_CODEC_MSA1 VLC_FOURCC('M','S','A','1') +#define VLC_CODEC_TSC2 VLC_FOURCC('T','S','C','2') +#define VLC_CODEC_MTS2 VLC_FOURCC('M','T','S','2') +#define VLC_CODEC_HEVC VLC_FOURCC('h','e','v','c') +#define VLC_CODEC_ICOD VLC_FOURCC('i','c','o','d') +#define VLC_CODEC_G2M2 VLC_FOURCC('G','2','M','2') +#define VLC_CODEC_G2M3 VLC_FOURCC('G','2','M','3') +#define VLC_CODEC_G2M4 VLC_FOURCC('G','2','M','4') +#define VLC_CODEC_BINKVIDEO VLC_FOURCC('B','I','K','f') +#define VLC_CODEC_BINKAUDIO_DCT VLC_FOURCC('B','A','U','1') +#define VLC_CODEC_BINKAUDIO_RDFT VLC_FOURCC('B','A','U','2') +#define VLC_CODEC_XAN_WC4 VLC_FOURCC('X','x','a','n') +#define VLC_CODEC_LCL_MSZH VLC_FOURCC('M','S','Z','H') +#define VLC_CODEC_LCL_ZLIB VLC_FOURCC('Z','L','I','B') +#define VLC_CODEC_THP VLC_FOURCC('T','H','P','0') +#define VLC_CODEC_ESCAPE124 VLC_FOURCC('E','1','2','4') +#define VLC_CODEC_KGV1 VLC_FOURCC('K','G','V','1') +#define VLC_CODEC_CLLC VLC_FOURCC('C','L','L','C') +#define VLC_CODEC_AURA VLC_FOURCC('A','U','R','A') +#define VLC_CODEC_FIC VLC_FOURCC('F','I','C','V') +#define VLC_CODEC_TMV VLC_FOURCC('T','M','A','V') +#define VLC_CODEC_XAN_WC3 VLC_FOURCC('X','A','N','3') +#define VLC_CODEC_WS_VQA VLC_FOURCC('W','V','Q','A') +#define VLC_CODEC_MMVIDEO VLC_FOURCC('M','M','V','I') +#define VLC_CODEC_AVS VLC_FOURCC('A','V','S','V') +#define VLC_CODEC_DSICINVIDEO VLC_FOURCC('D','C','I','V') +#define VLC_CODEC_TIERTEXSEQVIDEO VLC_FOURCC('T','S','E','Q') +#define VLC_CODEC_DXA VLC_FOURCC('D','E','X','A') +#define VLC_CODEC_C93 VLC_FOURCC('I','C','9','3') +#define VLC_CODEC_BETHSOFTVID VLC_FOURCC('B','V','I','D') +#define VLC_CODEC_VB VLC_FOURCC('V','B','V','1') +#define VLC_CODEC_RL2 VLC_FOURCC('R','L','V','2') +#define VLC_CODEC_BFI VLC_FOURCC('B','F','&','I') +#define VLC_CODEC_CMV VLC_FOURCC('E','C','M','V') +#define VLC_CODEC_MOTIONPIXELS VLC_FOURCC('M','P','I','X') +#define VLC_CODEC_TGV VLC_FOURCC('T','G','V','V') +#define VLC_CODEC_TGQ VLC_FOURCC('T','G','Q','V') +#define VLC_CODEC_TQI VLC_FOURCC('T','Q','I','V') +#define VLC_CODEC_MAD VLC_FOURCC('M','A','D','V') +#define VLC_CODEC_ANM VLC_FOURCC('A','N','I','M') +#define VLC_CODEC_YOP VLC_FOURCC('Y','O','P','V') +#define VLC_CODEC_JV VLC_FOURCC('J','V','0','0') +#define VLC_CODEC_DFA VLC_FOURCC('D','F','I','A') +#define VLC_CODEC_HNM4_VIDEO VLC_FOURCC('H','N','M','4') +#define VLC_CODEC_TDSC VLC_FOURCC('T','D','S','C') +#define VLC_CODEC_HQX VLC_FOURCC('C','H','Q','X') +#define VLC_CODEC_HQ_HQA VLC_FOURCC('C','U','V','C') +#define VLC_CODEC_HAP VLC_FOURCC('H','A','P','1') +#define VLC_CODEC_DXV VLC_FOURCC('D','X','D','3') +#define VLC_CODEC_CINEFORM VLC_FOURCC('C','F','H','D') +#define VLC_CODEC_SPEEDHQ VLC_FOURCC('S','H','Q','2') +#define VLC_CODEC_PIXLET VLC_FOURCC('p','x','l','t') + +/*********** + * Chromas + ***********/ + +/* Planar YUV */ + +/* Planar YUV 4:1:0 Y:V:U */ +#define VLC_CODEC_YV9 VLC_FOURCC('Y','V','U','9') +/* Planar YUV 4:1:0 Y:U:V */ +#define VLC_CODEC_I410 VLC_FOURCC('I','4','1','0') +/* Planar YUV 4:1:1 Y:U:V */ +#define VLC_CODEC_I411 VLC_FOURCC('I','4','1','1') + +/* Planar YUV 4:2:0 Y:V:U */ +#define VLC_CODEC_YV12 VLC_FOURCC('Y','V','1','2') +/* Planar YUV 4:2:0 Y:U:V 8-bit */ +#define VLC_CODEC_I420 VLC_FOURCC('I','4','2','0') +/* Planar YUV 4:2:0 Y:U:V 9-bit stored on 16 bits */ +#define VLC_CODEC_I420_9L VLC_FOURCC('I','0','9','L') +#define VLC_CODEC_I420_9B VLC_FOURCC('I','0','9','B') +/* Planar YUV 4:2:0 Y:U:V 10-bit stored on 16 bits LSB */ +#define VLC_CODEC_I420_10L VLC_FOURCC('I','0','A','L') +#define VLC_CODEC_I420_10B VLC_FOURCC('I','0','A','B') +/* Planar YUV 4:2:0 Y:U:V 12-bit stored on 16 bits */ +#define VLC_CODEC_I420_12L VLC_FOURCC('I','0','C','L') +#define VLC_CODEC_I420_12B VLC_FOURCC('I','0','C','B') + +/* Planar YUV 4:2:0 Y:U:V 16-bit stored on 16 bits */ +#define VLC_CODEC_I420_16L VLC_FOURCC('I','0','F','L') +#define VLC_CODEC_I420_16B VLC_FOURCC('I','0','F','B') + +/* Planar YUV 4:2:2 Y:U:V 8-bit */ +#define VLC_CODEC_I422 VLC_FOURCC('I','4','2','2') +/* Planar YUV 4:2:2 Y:U:V 9-bit stored on 16 bits */ +#define VLC_CODEC_I422_9L VLC_FOURCC('I','2','9','L') +#define VLC_CODEC_I422_9B VLC_FOURCC('I','2','9','B') +/* Planar YUV 4:2:2 Y:U:V 10-bit stored on 16 bits */ +#define VLC_CODEC_I422_10L VLC_FOURCC('I','2','A','L') +#define VLC_CODEC_I422_10B VLC_FOURCC('I','2','A','B') +/* Planar YUV 4:2:2 Y:U:V 12-bit stored on 16 bits */ +#define VLC_CODEC_I422_12L VLC_FOURCC('I','2','C','L') +#define VLC_CODEC_I422_12B VLC_FOURCC('I','2','C','B') + +/* Planar YUV 4:4:0 Y:U:V */ +#define VLC_CODEC_I440 VLC_FOURCC('I','4','4','0') +/* Planar YUV 4:4:4 Y:U:V 8-bit */ +#define VLC_CODEC_I444 VLC_FOURCC('I','4','4','4') +/* Planar YUV 4:4:4 Y:U:V 9-bit stored on 16 bits */ +#define VLC_CODEC_I444_9L VLC_FOURCC('I','4','9','L') +#define VLC_CODEC_I444_9B VLC_FOURCC('I','4','9','B') +/* Planar YUV 4:4:4 Y:U:V 10-bit stored on 16 bits */ +#define VLC_CODEC_I444_10L VLC_FOURCC('I','4','A','L') +#define VLC_CODEC_I444_10B VLC_FOURCC('I','4','A','B') +/* Planar YUV 4:4:4 Y:U:V 12-bit stored on 16 bits */ +#define VLC_CODEC_I444_12L VLC_FOURCC('I','4','C','L') +#define VLC_CODEC_I444_12B VLC_FOURCC('I','4','C','B') +/* Planar YUV 4:4:4 Y:U:V 16-bit */ +#define VLC_CODEC_I444_16L VLC_FOURCC('I','4','F','L') +#define VLC_CODEC_I444_16B VLC_FOURCC('I','4','F','B') + +/* Planar YUV 4:2:0 Y:U:V full scale */ +#define VLC_CODEC_J420 VLC_FOURCC('J','4','2','0') +/* Planar YUV 4:2:2 Y:U:V full scale */ +#define VLC_CODEC_J422 VLC_FOURCC('J','4','2','2') +/* Planar YUV 4:4:0 Y:U:V full scale */ +#define VLC_CODEC_J440 VLC_FOURCC('J','4','4','0') +/* Planar YUV 4:4:4 Y:U:V full scale */ +#define VLC_CODEC_J444 VLC_FOURCC('J','4','4','4') +/* Palettized YUV with palette element Y:U:V:A */ +#define VLC_CODEC_YUVP VLC_FOURCC('Y','U','V','P') + +/* Planar YUV 4:4:4 Y:U:V:A */ +#define VLC_CODEC_YUVA VLC_FOURCC('Y','U','V','A') +/* Planar YUV 4:2:2 Y:U:V:A */ +#define VLC_CODEC_YUV422A VLC_FOURCC('I','4','2','A') +/* Planar YUV 4:2:0 Y:U:V:A */ +#define VLC_CODEC_YUV420A VLC_FOURCC('I','4','0','A') + +/* Planar Y:U:V:A 4:4:4 10bits */ +#define VLC_CODEC_YUVA_444_10L VLC_FOURCC('Y','A','0','L') +#define VLC_CODEC_YUVA_444_10B VLC_FOURCC('Y','A','0','B') + +/* Semi-planar Y/UV */ + +/* 2 planes Y/UV 4:2:0 */ +#define VLC_CODEC_NV12 VLC_FOURCC('N','V','1','2') +/* 2 planes Y/VU 4:2:0 */ +#define VLC_CODEC_NV21 VLC_FOURCC('N','V','2','1') +/* 2 planes Y/UV 4:2:2 */ +#define VLC_CODEC_NV16 VLC_FOURCC('N','V','1','6') +/* 2 planes Y/VU 4:2:2 */ +#define VLC_CODEC_NV61 VLC_FOURCC('N','V','6','1') +/* 2 planes Y/UV 4:4:4 */ +#define VLC_CODEC_NV24 VLC_FOURCC('N','V','2','4') +/* 2 planes Y/VU 4:4:4 */ +#define VLC_CODEC_NV42 VLC_FOURCC('N','V','4','2') +/* 2 planes Y/UV 4:2:0 10-bit */ +#define VLC_CODEC_P010 VLC_FOURCC('P','0','1','0') + +/* Packed YUV */ + +/* Packed YUV 4:2:2, U:Y:V:Y */ +#define VLC_CODEC_UYVY VLC_FOURCC('U','Y','V','Y') +/* Packed YUV 4:2:2, V:Y:U:Y */ +#define VLC_CODEC_VYUY VLC_FOURCC('V','Y','U','Y') +/* Packed YUV 4:2:2, Y:U:Y:V */ +#define VLC_CODEC_YUYV VLC_FOURCC('Y','U','Y','2') +/* Packed YUV 4:2:2, Y:V:Y:U */ +#define VLC_CODEC_YVYU VLC_FOURCC('Y','V','Y','U') +/* Packed YUV 2:1:1, Y:U:Y:V */ +#define VLC_CODEC_Y211 VLC_FOURCC('Y','2','1','1') +/* Packed YUV 4:2:2, U:Y:V:Y, reverted */ +#define VLC_CODEC_CYUV VLC_FOURCC('c','y','u','v') +/* 10-bit 4:2:2 Component YCbCr */ +#define VLC_CODEC_V210 VLC_FOURCC('v','2','1','0') +/* I420 packed for RTP (RFC 4175) */ +#define VLC_CODEC_R420 VLC_FOURCC('r','4','2','0') +/* Packed YUV 4:4:4 V:U:Y:A */ +#define VLC_CODEC_VUYA VLC_FOURCC('V','U','Y','A') + + +/* RGB */ + +/* Palettized RGB with palette element R:G:B */ +#define VLC_CODEC_RGBP VLC_FOURCC('R','G','B','P') +/* 8 bits RGB */ +#define VLC_CODEC_RGB8 VLC_FOURCC('R','G','B','8') +/* 12 bits RGB padded to 16 bits */ +#define VLC_CODEC_RGB12 VLC_FOURCC('R','V','1','2') +/* 15 bits RGB padded to 16 bits */ +#define VLC_CODEC_RGB15 VLC_FOURCC('R','V','1','5') +/* 16 bits RGB */ +#define VLC_CODEC_RGB16 VLC_FOURCC('R','V','1','6') +/* 24 bits RGB */ +#define VLC_CODEC_RGB24 VLC_FOURCC('R','V','2','4') +/* 24 bits RGB padded to 32 bits */ +#define VLC_CODEC_RGB32 VLC_FOURCC('R','V','3','2') +/* 32 bits RGBA */ +#define VLC_CODEC_RGBA VLC_FOURCC('R','G','B','A') +/* 32 bits ARGB */ +#define VLC_CODEC_ARGB VLC_FOURCC('A','R','G','B') +/* 32 bits BGRA */ +#define VLC_CODEC_BGRA VLC_FOURCC('B','G','R','A') +/* 32 bits BGRA 10:10:10:2 */ +#define VLC_CODEC_RGBA10 VLC_FOURCC('R','G','A','0') +/* 64 bits RGBA */ +#define VLC_CODEC_RGBA64 VLC_FOURCC('R','G','A','4') + +/* Planar GBR 4:4:4 8 bits */ +#define VLC_CODEC_GBR_PLANAR VLC_FOURCC('G','B','R','8') +#define VLC_CODEC_GBR_PLANAR_9B VLC_FOURCC('G','B','9','B') +#define VLC_CODEC_GBR_PLANAR_9L VLC_FOURCC('G','B','9','L') +#define VLC_CODEC_GBR_PLANAR_10B VLC_FOURCC('G','B','A','B') +#define VLC_CODEC_GBR_PLANAR_10L VLC_FOURCC('G','B','A','L') +#define VLC_CODEC_GBR_PLANAR_16L VLC_FOURCC('G','B','F','L') +#define VLC_CODEC_GBR_PLANAR_16B VLC_FOURCC('G','B','F','B') + +/* 8 bits grey */ +#define VLC_CODEC_GREY VLC_FOURCC('G','R','E','Y') +/* 10 bits grey */ +#define VLC_CODEC_GREY_10L VLC_FOURCC('G','0','F','L') +#define VLC_CODEC_GREY_10B VLC_FOURCC('G','0','F','B') +/* 12 bits grey */ +#define VLC_CODEC_GREY_12L VLC_FOURCC('G','2','F','L') +#define VLC_CODEC_GREY_12B VLC_FOURCC('G','2','F','B') +/* 16 bits grey */ +#define VLC_CODEC_GREY_16L VLC_FOURCC('G','R','F','L') +#define VLC_CODEC_GREY_16B VLC_FOURCC('G','R','F','B') + +/* VDPAU video surface YCbCr 4:2:0 */ +#define VLC_CODEC_VDPAU_VIDEO_420 VLC_FOURCC('V','D','V','0') +/* VDPAU video surface YCbCr 4:2:2 */ +#define VLC_CODEC_VDPAU_VIDEO_422 VLC_FOURCC('V','D','V','2') +/* VDPAU video surface YCbCr 4:4:4 */ +#define VLC_CODEC_VDPAU_VIDEO_444 VLC_FOURCC('V','D','V','4') +/* VDPAU output surface RGBA */ +#define VLC_CODEC_VDPAU_OUTPUT VLC_FOURCC('V','D','O','R') + +/* VAAPI opaque surface */ +#define VLC_CODEC_VAAPI_420 VLC_FOURCC('V','A','O','P') /* 4:2:0 8 bpc */ +#define VLC_CODEC_VAAPI_420_10BPP VLC_FOURCC('V','A','O','0') /* 4:2:0 10 bpc */ + +/* MediaCodec/IOMX opaque buffer type */ +#define VLC_CODEC_ANDROID_OPAQUE VLC_FOURCC('A','N','O','P') + +/* Broadcom MMAL opaque buffer type */ +#define VLC_CODEC_MMAL_OPAQUE VLC_FOURCC('M','M','A','L') + +/* DXVA2 opaque video surface for use with D3D9 */ +#define VLC_CODEC_D3D9_OPAQUE VLC_FOURCC('D','X','A','9') /* 4:2:0 8 bpc */ +#define VLC_CODEC_D3D9_OPAQUE_10B VLC_FOURCC('D','X','A','0') /* 4:2:0 10 bpc */ + +/* D3D11VA opaque video surface for use with D3D11 */ +#define VLC_CODEC_D3D11_OPAQUE VLC_FOURCC('D','X','1','1') /* 4:2:0 8 bpc */ +#define VLC_CODEC_D3D11_OPAQUE_10B VLC_FOURCC('D','X','1','0') /* 4:2:0 10 bpc */ + +/* CVPixelBuffer opaque buffer type */ +#define VLC_CODEC_CVPX_NV12 VLC_FOURCC('C','V','P','N') +#define VLC_CODEC_CVPX_UYVY VLC_FOURCC('C','V','P','Y') +#define VLC_CODEC_CVPX_I420 VLC_FOURCC('C','V','P','I') +#define VLC_CODEC_CVPX_BGRA VLC_FOURCC('C','V','P','B') +#define VLC_CODEC_CVPX_P010 VLC_FOURCC('C','V','P','P') + +/* Image codec (video) */ +#define VLC_CODEC_PNG VLC_FOURCC('p','n','g',' ') +#define VLC_CODEC_PPM VLC_FOURCC('p','p','m',' ') +#define VLC_CODEC_PGM VLC_FOURCC('p','g','m',' ') +#define VLC_CODEC_PGMYUV VLC_FOURCC('p','g','m','y') +#define VLC_CODEC_PAM VLC_FOURCC('p','a','m',' ') +#define VLC_CODEC_JPEG VLC_FOURCC('j','p','e','g') +#define VLC_CODEC_BPG VLC_FOURCC('B','P','G',0xFB) +#define VLC_CODEC_JPEGLS VLC_FOURCC('M','J','L','S') +#define VLC_CODEC_BMP VLC_FOURCC('b','m','p',' ') +#define VLC_CODEC_TIFF VLC_FOURCC('t','i','f','f') +#define VLC_CODEC_GIF VLC_FOURCC('g','i','f',' ') +#define VLC_CODEC_TARGA VLC_FOURCC('t','g','a',' ') +#define VLC_CODEC_SVG VLC_FOURCC('s','v','g',' ') +#define VLC_CODEC_SGI VLC_FOURCC('s','g','i',' ') +#define VLC_CODEC_PNM VLC_FOURCC('p','n','m',' ') +#define VLC_CODEC_PCX VLC_FOURCC('p','c','x',' ') +#define VLC_CODEC_XWD VLC_FOURCC('X','W','D',' ') +#define VLC_CODEC_TXD VLC_FOURCC('T','X','D',' ') +#define VLC_CODEC_WEBP VLC_FOURCC('W','E','B','P') + + +/* Audio codec */ +#define VLC_CODEC_MPGA VLC_FOURCC('m','p','g','a') +#define VLC_CODEC_MP4A VLC_FOURCC('m','p','4','a') +#define VLC_CODEC_ALS VLC_FOURCC('a','l','s',' ') +#define VLC_CODEC_A52 VLC_FOURCC('a','5','2',' ') +#define VLC_CODEC_EAC3 VLC_FOURCC('e','a','c','3') +#define VLC_CODEC_DTS VLC_FOURCC('d','t','s',' ') +#define VLC_CODEC_WMA1 VLC_FOURCC('W','M','A','1') +#define VLC_CODEC_WMA2 VLC_FOURCC('W','M','A','2') +#define VLC_CODEC_WMAP VLC_FOURCC('W','M','A','P') +#define VLC_CODEC_WMAL VLC_FOURCC('W','M','A','L') +#define VLC_CODEC_WMAS VLC_FOURCC('W','M','A','S') +#define VLC_CODEC_FLAC VLC_FOURCC('f','l','a','c') +#define VLC_CODEC_MLP VLC_FOURCC('m','l','p',' ') +#define VLC_CODEC_TRUEHD VLC_FOURCC('t','r','h','d') +#define VLC_CODEC_DVAUDIO VLC_FOURCC('d','v','a','u') +#define VLC_CODEC_SPEEX VLC_FOURCC('s','p','x',' ') +#define VLC_CODEC_OPUS VLC_FOURCC('O','p','u','s') +#define VLC_CODEC_VORBIS VLC_FOURCC('v','o','r','b') +#define VLC_CODEC_MACE3 VLC_FOURCC('M','A','C','3') +#define VLC_CODEC_MACE6 VLC_FOURCC('M','A','C','6') +#define VLC_CODEC_MUSEPACK7 VLC_FOURCC('M','P','C',' ') +#define VLC_CODEC_MUSEPACK8 VLC_FOURCC('M','P','C','K') +#define VLC_CODEC_RA_144 VLC_FOURCC('1','4','_','4') +#define VLC_CODEC_RA_288 VLC_FOURCC('2','8','_','8') +#define VLC_CODEC_INTERPLAY_DPCM VLC_FOURCC('i','d','p','c') +#define VLC_CODEC_ROQ_DPCM VLC_FOURCC('R','o','Q','a') +#define VLC_CODEC_DSICINAUDIO VLC_FOURCC('D','C','I','A') +#define VLC_CODEC_ADPCM_4XM VLC_FOURCC('4','x','m','a') +#define VLC_CODEC_ADPCM_EA VLC_FOURCC('A','D','E','A') +#define VLC_CODEC_ADPCM_XA VLC_FOURCC('x','a',' ',' ') +#define VLC_CODEC_ADPCM_ADX VLC_FOURCC('a','d','x',' ') +#define VLC_CODEC_ADPCM_IMA_WS VLC_FOURCC('A','I','W','S') +#define VLC_CODEC_ADPCM_G722 VLC_FOURCC('g','7','2','2') +#define VLC_CODEC_ADPCM_G726 VLC_FOURCC('g','7','2','6') +#define VLC_CODEC_ADPCM_SWF VLC_FOURCC('S','W','F','a') +#define VLC_CODEC_ADPCM_MS VLC_FOURCC('m','s',0x00,0x02) +#define VLC_CODEC_ADPCM_IMA_WAV VLC_FOURCC('m','s',0x00,0x11) +#define VLC_CODEC_ADPCM_IMA_AMV VLC_FOURCC('i','m','a','v') +#define VLC_CODEC_ADPCM_IMA_QT VLC_FOURCC('i','m','a','4') +#define VLC_CODEC_ADPCM_YAMAHA VLC_FOURCC('m','s',0x00,0x20) +#define VLC_CODEC_ADPCM_DK3 VLC_FOURCC('m','s',0x00,0x62) +#define VLC_CODEC_ADPCM_DK4 VLC_FOURCC('m','s',0x00,0x61) +#define VLC_CODEC_ADPCM_CREATIVE VLC_FOURCC('m','s',0x00,0xC0) +#define VLC_CODEC_ADPCM_SBPRO_2 VLC_FOURCC('m','s',0x00,0xC2) +#define VLC_CODEC_ADPCM_SBPRO_3 VLC_FOURCC('m','s',0x00,0xC3) +#define VLC_CODEC_ADPCM_SBPRO_4 VLC_FOURCC('m','s',0x00,0xC4) +#define VLC_CODEC_ADPCM_THP VLC_FOURCC('T','H','P','A') +#define VLC_CODEC_ADPCM_XA_EA VLC_FOURCC('X','A','J', 0) +#define VLC_CODEC_G723_1 VLC_FOURCC('g','7','2', 0x31) +#define VLC_CODEC_G729 VLC_FOURCC('g','7','2','9') +#define VLC_CODEC_VMDAUDIO VLC_FOURCC('v','m','d','a') +#define VLC_CODEC_AMR_NB VLC_FOURCC('s','a','m','r') +#define VLC_CODEC_AMR_WB VLC_FOURCC('s','a','w','b') +#define VLC_CODEC_ALAC VLC_FOURCC('a','l','a','c') +#define VLC_CODEC_QDM2 VLC_FOURCC('Q','D','M','2') +#define VLC_CODEC_QDMC VLC_FOURCC('Q','D','M','C') +#define VLC_CODEC_COOK VLC_FOURCC('c','o','o','k') +#define VLC_CODEC_SIPR VLC_FOURCC('s','i','p','r') +#define VLC_CODEC_TTA VLC_FOURCC('T','T','A','1') +#define VLC_CODEC_SHORTEN VLC_FOURCC('s','h','n',' ') +#define VLC_CODEC_WAVPACK VLC_FOURCC('W','V','P','K') +#define VLC_CODEC_GSM VLC_FOURCC('g','s','m',' ') +#define VLC_CODEC_GSM_MS VLC_FOURCC('a','g','s','m') +#define VLC_CODEC_ATRAC1 VLC_FOURCC('a','t','r','1') +#define VLC_CODEC_ATRAC3 VLC_FOURCC('a','t','r','c') +#define VLC_CODEC_ATRAC3P VLC_FOURCC('a','t','r','p') +#define VLC_CODEC_IMC VLC_FOURCC(0x1,0x4,0x0,0x0) +#define VLC_CODEC_TRUESPEECH VLC_FOURCC(0x22,0x0,0x0,0x0) +#define VLC_CODEC_NELLYMOSER VLC_FOURCC('N','E','L','L') +#define VLC_CODEC_APE VLC_FOURCC('A','P','E',' ') +#define VLC_CODEC_QCELP VLC_FOURCC('Q','c','l','p') +#define VLC_CODEC_302M VLC_FOURCC('3','0','2','m') +#define VLC_CODEC_DVD_LPCM VLC_FOURCC('l','p','c','m') +#define VLC_CODEC_DVDA_LPCM VLC_FOURCC('a','p','c','m') +#define VLC_CODEC_BD_LPCM VLC_FOURCC('b','p','c','m') +#define VLC_CODEC_WIDI_LPCM VLC_FOURCC('w','p','c','m') +#define VLC_CODEC_SDDS VLC_FOURCC('s','d','d','s') +#define VLC_CODEC_MIDI VLC_FOURCC('M','I','D','I') +#define VLC_CODEC_RALF VLC_FOURCC('R','A','L','F') + +#define VLC_CODEC_S8 VLC_FOURCC('s','8',' ',' ') +#define VLC_CODEC_U8 VLC_FOURCC('u','8',' ',' ') +#define VLC_CODEC_S16L VLC_FOURCC('s','1','6','l') +#define VLC_CODEC_S16L_PLANAR VLC_FOURCC('s','1','l','p') +#define VLC_CODEC_S16B VLC_FOURCC('s','1','6','b') +#define VLC_CODEC_U16L VLC_FOURCC('u','1','6','l') +#define VLC_CODEC_U16B VLC_FOURCC('u','1','6','b') +#define VLC_CODEC_S20B VLC_FOURCC('s','2','0','b') +#define VLC_CODEC_S24L VLC_FOURCC('s','2','4','l') +#define VLC_CODEC_S24B VLC_FOURCC('s','2','4','b') +#define VLC_CODEC_U24L VLC_FOURCC('u','2','4','l') +#define VLC_CODEC_U24B VLC_FOURCC('u','2','4','b') +#define VLC_CODEC_S24L32 VLC_FOURCC('s','2','4','4') +#define VLC_CODEC_S24B32 VLC_FOURCC('S','2','4','4') +#define VLC_CODEC_S32L VLC_FOURCC('s','3','2','l') +#define VLC_CODEC_S32B VLC_FOURCC('s','3','2','b') +#define VLC_CODEC_U32L VLC_FOURCC('u','3','2','l') +#define VLC_CODEC_U32B VLC_FOURCC('u','3','2','b') +#define VLC_CODEC_F32L VLC_FOURCC('f','3','2','l') +#define VLC_CODEC_F32B VLC_FOURCC('f','3','2','b') +#define VLC_CODEC_F64L VLC_FOURCC('f','6','4','l') +#define VLC_CODEC_F64B VLC_FOURCC('f','6','4','b') + +#define VLC_CODEC_ALAW VLC_FOURCC('a','l','a','w') +#define VLC_CODEC_MULAW VLC_FOURCC('m','l','a','w') +#define VLC_CODEC_DAT12 VLC_FOURCC('L','P','1','2') +#define VLC_CODEC_S24DAUD VLC_FOURCC('d','a','u','d') +#define VLC_CODEC_TWINVQ VLC_FOURCC('T','W','I','N') +#define VLC_CODEC_BMVAUDIO VLC_FOURCC('B','M','V','A') +#define VLC_CODEC_ULEAD_DV_AUDIO_NTSC VLC_FOURCC('m','s',0x02,0x15) +#define VLC_CODEC_ULEAD_DV_AUDIO_PAL VLC_FOURCC('m','s',0x02,0x16) +#define VLC_CODEC_INDEO_AUDIO VLC_FOURCC('m','s',0x04,0x02) +#define VLC_CODEC_METASOUND VLC_FOURCC('m','s',0x00,0x75) +#define VLC_CODEC_ON2AVC VLC_FOURCC('m','s',0x05,0x00) +#define VLC_CODEC_TAK VLC_FOURCC('t','a','k',' ') +#define VLC_CODEC_SMACKAUDIO VLC_FOURCC('S','M','K','A') +#define VLC_CODEC_ADPCM_IMA_EA_SEAD VLC_FOURCC('S','E','A','D') +#define VLC_CODEC_ADPCM_EA_R1 VLC_FOURCC('E','A','R','1') +#define VLC_CODEC_ADPCM_IMA_APC VLC_FOURCC('A','I','P','C') + +/* Subtitle */ +#define VLC_CODEC_SPU VLC_FOURCC('s','p','u',' ') +#define VLC_CODEC_DVBS VLC_FOURCC('d','v','b','s') +#define VLC_CODEC_SUBT VLC_FOURCC('s','u','b','t') +#define VLC_CODEC_XSUB VLC_FOURCC('X','S','U','B') +#define VLC_CODEC_SSA VLC_FOURCC('s','s','a',' ') +#define VLC_CODEC_TEXT VLC_FOURCC('T','E','X','T') +#define VLC_CODEC_TELETEXT VLC_FOURCC('t','e','l','x') +#define VLC_CODEC_KATE VLC_FOURCC('k','a','t','e') +#define VLC_CODEC_CMML VLC_FOURCC('c','m','m','l') +#define VLC_CODEC_ITU_T140 VLC_FOURCC('t','1','4','0') +#define VLC_CODEC_USF VLC_FOURCC('u','s','f',' ') +#define VLC_CODEC_OGT VLC_FOURCC('o','g','t',' ') +#define VLC_CODEC_CVD VLC_FOURCC('c','v','d',' ') +#define VLC_CODEC_TX3G VLC_FOURCC('t','x','3','g') +#define VLC_CODEC_ARIB_A VLC_FOURCC('a','r','b','a') +#define VLC_CODEC_ARIB_C VLC_FOURCC('a','r','b','c') +/* Blu-ray Presentation Graphics */ +#define VLC_CODEC_BD_PG VLC_FOURCC('b','d','p','g') +#define VLC_CODEC_BD_TEXT VLC_FOURCC('b','d','t','x') +/* EBU STL (TECH. 3264-E) */ +#define VLC_CODEC_EBU_STL VLC_FOURCC('S','T','L',' ') +#define VLC_CODEC_SCTE_18 VLC_FOURCC('S','C','1','8') +#define VLC_CODEC_SCTE_27 VLC_FOURCC('S','C','2','7') +/* EIA/CEA-608/708 */ +#define VLC_CODEC_CEA608 VLC_FOURCC('c','6','0','8') +#define VLC_CODEC_CEA708 VLC_FOURCC('c','7','0','8') +#define VLC_CODEC_TTML VLC_FOURCC('T','T','M','L') +#define VLC_CODEC_WEBVTT VLC_FOURCC('w','v','t','t') + +/* XYZ colorspace 12 bits packed in 16 bits, organisation |XXX0|YYY0|ZZZ0| */ +#define VLC_CODEC_XYZ12 VLC_FOURCC('X','Y','1','2') + + +/* Special endian dependent values + * The suffic N means Native + * The suffix I means Inverted (ie non native) */ +#ifdef WORDS_BIGENDIAN +# define VLC_CODEC_S16N VLC_CODEC_S16B +# define VLC_CODEC_U16N VLC_CODEC_U16B +# define VLC_CODEC_S24N VLC_CODEC_S24B +# define VLC_CODEC_U24N VLC_CODEC_U24B +# define VLC_CODEC_S32N VLC_CODEC_S32B +# define VLC_CODEC_U32N VLC_CODEC_U32B +# define VLC_CODEC_FL32 VLC_CODEC_F32B +# define VLC_CODEC_FL64 VLC_CODEC_F64B + +# define VLC_CODEC_S16I VLC_CODEC_S16L +# define VLC_CODEC_U16I VLC_CODEC_U16L +# define VLC_CODEC_S24I VLC_CODEC_S24L +# define VLC_CODEC_U24I VLC_CODEC_U24L +# define VLC_CODEC_S32I VLC_CODEC_S32L +# define VLC_CODEC_U32I VLC_CODEC_U32L + +#else +# define VLC_CODEC_S16N VLC_CODEC_S16L +# define VLC_CODEC_U16N VLC_CODEC_U16L +# define VLC_CODEC_S24N VLC_CODEC_S24L +# define VLC_CODEC_U24N VLC_CODEC_U24L +# define VLC_CODEC_S32N VLC_CODEC_S32L +# define VLC_CODEC_U32N VLC_CODEC_U32L +# define VLC_CODEC_FL32 VLC_CODEC_F32L +# define VLC_CODEC_FL64 VLC_CODEC_F64L + +# define VLC_CODEC_S16I VLC_CODEC_S16B +# define VLC_CODEC_U16I VLC_CODEC_U16B +# define VLC_CODEC_S24I VLC_CODEC_S24B +# define VLC_CODEC_U24I VLC_CODEC_U24B +# define VLC_CODEC_S32I VLC_CODEC_S32B +# define VLC_CODEC_U32I VLC_CODEC_U32B +#endif + +/* Non official codecs, used to force a profile in an encoder */ +/* MPEG-1 video */ +#define VLC_CODEC_MP1V VLC_FOURCC('m','p','1','v') +/* MPEG-2 video */ +#define VLC_CODEC_MP2V VLC_FOURCC('m','p','2','v') +/* MPEG-I/II layer 2 audio */ +#define VLC_CODEC_MP2 VLC_FOURCC('m','p','2',' ') +/* MPEG-I/II layer 3 audio */ +#define VLC_CODEC_MP3 VLC_FOURCC('m','p','3',' ') + +/** + * It returns the codec associated to a fourcc within an ES category. + * + * If not found, it will return the given fourcc. + * If found, it will always be one of the VLC_CODEC_ defined above. + * + * You may use UNKNOWN_ES for the ES category if you don't have the information. + */ +VLC_API vlc_fourcc_t vlc_fourcc_GetCodec( int i_cat, vlc_fourcc_t i_fourcc ); + +/** + * It returns the codec associated to a fourcc stored in a zero terminated + * string. + * + * If the string is NULL or does not have exactly 4 characters, it will + * return 0, otherwise it behaves like vlc_fourcc_GetCodec. + * + * Provided for convenience. + */ +VLC_API vlc_fourcc_t vlc_fourcc_GetCodecFromString( int i_cat, const char * ); + +/** + * It converts the given fourcc to an audio codec when possible. + * + * The fourccs converted are aflt, araw/pcm , twos, sowt. When an incompatible i_bits + * is detected, 0 is returned. + * The other fourccs go through vlc_fourcc_GetCodec and i_bits is not checked. + */ +VLC_API vlc_fourcc_t vlc_fourcc_GetCodecAudio( vlc_fourcc_t i_fourcc, int i_bits ); + +/** + * It returns the description of the given fourcc or NULL if not found. + * + * You may use UNKNOWN_ES for the ES category if you don't have the information. + */ +VLC_API const char * vlc_fourcc_GetDescription( int i_cat, vlc_fourcc_t i_fourcc ); + +/** + * It returns a list (terminated with the value 0) of YUV fourccs in + * decreasing priority order for the given chroma. + * + * It will always return a non NULL pointer that must not be freed. + */ +VLC_API const vlc_fourcc_t * vlc_fourcc_GetYUVFallback( vlc_fourcc_t ); + +/** + * It returns a list (terminated with the value 0) of RGB fourccs in + * decreasing priority order for the given chroma. + * + * It will always return a non NULL pointer that must not be freed. + */ +VLC_API const vlc_fourcc_t * vlc_fourcc_GetRGBFallback( vlc_fourcc_t ); + +/** + * It returns true if the given fourcc is YUV and false otherwise. + */ +VLC_API bool vlc_fourcc_IsYUV( vlc_fourcc_t ); + +/** + * It returns true if the two fourccs are equivalent if their U&V planes are + * swapped. + */ +VLC_API bool vlc_fourcc_AreUVPlanesSwapped(vlc_fourcc_t , vlc_fourcc_t ); + +/** + * Chroma related information. + */ +typedef struct { + unsigned plane_count; + struct { + vlc_rational_t w; + vlc_rational_t h; + } p[4]; + unsigned pixel_size; /* Number of bytes per pixel for a plane */ + unsigned pixel_bits; /* Number of bits actually used bits per pixel for a plane */ +} vlc_chroma_description_t; + +/** + * It returns a vlc_chroma_description_t describing the requested fourcc or NULL + * if not found. + */ +VLC_API const vlc_chroma_description_t * vlc_fourcc_GetChromaDescription( vlc_fourcc_t fourcc ) VLC_USED; + +#endif /* _VLC_FOURCC_H */ + diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_fs.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_fs.h new file mode 100644 index 0000000..8fda513 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_fs.h @@ -0,0 +1,294 @@ +/***************************************************************************** + * vlc_fs.h: File system helpers + ***************************************************************************** + * Copyright © 2006-2010 Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_FS_H +#define VLC_FS_H 1 + +#include +#include + +struct stat; +struct iovec; + +#ifdef _WIN32 +# include +# ifndef stat +# define stat _stati64 +# endif +# ifndef fstat +# define fstat _fstati64 +# endif +# ifndef _MSC_VER +# undef lseek +# define lseek _lseeki64 +# endif +#endif + +#ifdef __ANDROID__ +# define lseek lseek64 +#endif + + +/** + * \defgroup os Operating system + * @{ + * \defgroup file File system + * @{ + * + * \file + * The functions in this file help with using low-level Unix-style file + * descriptors, BSD sockets and directories. In general, they retain the + * prototype and most semantics from their respective standard equivalents. + * However, there are a few differences: + * - On Windows, file path arguments are expected in UTF-8 format. + * They are converted to UTF-16 internally, thus enabling access to paths + * outside of the local Windows ANSI code page. + * - On POSIX systems, file descriptors are created with the close-on-exec + * flag set (atomically where possible), so that they do not leak to + * child process after fork-and-exec. + * - vlc_scandir(), inspired by GNU scandir(), passes file names rather than + * dirent structure pointers to its callbacks. + * - vlc_accept() takes an extra boolean for nonblocking mode (compare with + * the flags parameter in POSIX.next accept4()). + * - Writing functions do not emit a SIGPIPE signal in case of broken pipe. + * + * \defgroup fd File descriptors + * @{ + */ + +/** + * Opens a system file handle. + * + * @param filename file path to open (with UTF-8 encoding) + * @param flags open() flags, see the C library open() documentation + * @return a file handle on success, -1 on error (see errno). + * @note Contrary to standard open(), this function returns a file handle + * with the close-on-exec flag preset. + */ +VLC_API int vlc_open(const char *filename, int flags, ...) VLC_USED; + +/** + * Opens a system file handle relative to an existing directory handle. + * + * @param dir directory file descriptor + * @param filename file path to open (with UTF-8 encoding) + * @param flags open() flags, see the C library open() documentation + * @return a file handle on success, -1 on error (see errno). + * @note Contrary to standard open(), this function returns a file handle + * with the close-on-exec flag preset. + */ +VLC_API int vlc_openat(int fd, const char *filename, int flags, ...) VLC_USED; + +VLC_API int vlc_mkstemp( char * ); + +/** + * Duplicates a file descriptor. The new file descriptor has the close-on-exec + * descriptor flag preset. + * @return a new file descriptor, -1 (see errno) + */ +VLC_API int vlc_dup(int) VLC_USED; + +/** + * Creates a pipe (see "man pipe" for further reference). The new file + * descriptors have the close-on-exec flag preset. + * @return 0 on success, -1 on error (see errno) + */ +VLC_API int vlc_pipe(int [2]) VLC_USED; + +/** + * Creates an anonymous regular file descriptor, i.e. a descriptor for a + * temporary file. + * + * The file is initially empty. The storage space is automatically reclaimed + * when all file descriptors referencing it are closed. + * + * The new file descriptor has the close-on-exec flag preset. + * + * @return a file descriptor on success, -1 on error (see errno) + */ +VLC_API int vlc_memfd(void) VLC_USED; + +/** + * Writes data to a file descriptor. Unlike write(), if EPIPE error occurs, + * this function does not generate a SIGPIPE signal. + * @note If the file descriptor is known to be neither a pipe/FIFO nor a + * connection-oriented socket, the normal write() should be used. + */ +VLC_API ssize_t vlc_write(int, const void *, size_t); + +/** + * Writes data from an iovec structure to a file descriptor. Unlike writev(), + * if EPIPE error occurs, this function does not generate a SIGPIPE signal. + */ +VLC_API ssize_t vlc_writev(int, const struct iovec *, int); + +/** + * Closes a file descriptor. + * + * This closes a file descriptor. If this is a last file descriptor for the + * underlying open file, the file is closed too; the exact semantics depend + * on the type of file. + * + * @note The file descriptor is always closed when the function returns, even + * if the function returns an error. The sole exception is if the file + * descriptor was not currently valid, and thus cannot be closed (errno will + * then be set to EBADF). + * + * @param fd file descriptor + * @return Normally, zero is returned. + * If an I/O error is detected before or while closing, the function may return + * -1. Such an error is unrecoverable since the descriptor is closed. + * + * A nul return value does not necessarily imply that all pending I/O + * succeeded, since I/O might still occur asynchronously afterwards. + */ +VLC_API int vlc_close(int fd); + +/** + * @} + */ + +/** + * Finds file/inode information - like stat(). + * @note As far as possible, fstat() should be used instead. + * + * @param filename UTF-8 file path + */ +VLC_API int vlc_stat(const char *filename, struct stat *) VLC_USED; + +/** + * Finds file/inode information, as lstat(). + * Consider using fstat() instead, if possible. + * + * @param filename UTF-8 file path + */ +VLC_API int vlc_lstat(const char *filename, struct stat *) VLC_USED; + +/** + * Removes a file. + * + * @param filename a UTF-8 string with the name of the file you want to delete. + * @return A 0 return value indicates success. A -1 return value indicates an + * error, and an error code is stored in errno + */ +VLC_API int vlc_unlink(const char *filename); + +/** + * Moves a file atomically. This only works within a single file system. + * + * @param oldpath path to the file before the move + * @param newpath intended path to the file after the move + * @return A 0 return value indicates success. A -1 return value indicates an + * error, and an error code is stored in errno + */ +VLC_API int vlc_rename(const char *oldpath, const char *newpath); + +VLC_API FILE * vlc_fopen( const char *filename, const char *mode ) VLC_USED; + +/** + * \defgroup dir Directories + * @{ + */ + +/** + * Opens a DIR pointer. + * + * @param dirname UTF-8 representation of the directory name + * @return a pointer to the DIR struct, or NULL in case of error. + * Release with standard closedir(). + */ +VLC_API DIR *vlc_opendir(const char *dirname) VLC_USED; + +/** + * Reads the next file name from an open directory. + * + * @param dir directory handle as returned by vlc_opendir() + * (must not be used by another thread concurrently) + * + * @return a UTF-8 string of the directory entry. The string is valid until + * the next call to vlc_readdir() or closedir() on the handle. + * If there are no more entries in the directory, NULL is returned. + * If an error occurs, errno is set and NULL is returned. + */ +VLC_API const char *vlc_readdir(DIR *dir) VLC_USED; + +VLC_API int vlc_loaddir( DIR *dir, char ***namelist, int (*select)( const char * ), int (*compar)( const char **, const char ** ) ); +VLC_API int vlc_scandir( const char *dirname, char ***namelist, int (*select)( const char * ), int (*compar)( const char **, const char ** ) ); + +/** + * Creates a directory. + * + * @param dirname a UTF-8 string with the name of the directory that you + * want to create. + * @param mode directory permissions + * @return 0 on success, -1 on error (see errno). + */ +VLC_API int vlc_mkdir(const char *dirname, mode_t mode); + +/** + * Determines the current working directory. + * + * @return the current working directory (must be free()'d) + * or NULL on error + */ +VLC_API char *vlc_getcwd(void) VLC_USED; + +/** @} */ +/** @} */ + +#if defined( _WIN32 ) +typedef struct vlc_DIR +{ + _WDIR *wdir; /* MUST be first, see */ + char *entry; + union + { + DWORD drives; + bool insert_dot_dot; + } u; +} vlc_DIR; + +static inline int vlc_closedir( DIR *dir ) +{ + vlc_DIR *vdir = (vlc_DIR *)dir; + _WDIR *wdir = vdir->wdir; + + free( vdir->entry ); + free( vdir ); + return (wdir != NULL) ? _wclosedir( wdir ) : 0; +} +# undef closedir +# define closedir vlc_closedir + +static inline void vlc_rewinddir( DIR *dir ) +{ + _WDIR *wdir = *(_WDIR **)dir; + + _wrewinddir( wdir ); +} +# undef rewinddir +# define rewinddir vlc_rewinddir +#endif + +#ifdef __ANDROID__ +# define lseek lseek64 +#endif + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_gcrypt.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_gcrypt.h new file mode 100644 index 0000000..a04e1b1 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_gcrypt.h @@ -0,0 +1,47 @@ +/***************************************************************************** + * vlc_gcrypt.h: VLC thread support for gcrypt + ***************************************************************************** + * Copyright (C) 2004-2010 Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * \file + * This file implements gcrypt support functions in vlc + */ + +#include + +static inline void vlc_gcrypt_init (void) +{ + /* This would need a process-wide static mutex with all libraries linking + * to a given instance of libgcrypt. We cannot do this as we have different + * plugins linking with gcrypt, and some underlying libraries may use it + * behind our back. Only way is to always link gcrypt statically (ouch!) or + * have upstream gcrypt provide one shared object per threading system. */ + static bool done = false; + + vlc_global_lock (VLC_GCRYPT_MUTEX); + if (!done) + { + /* The suggested way for an application to make sure that global_init + * has been called is by using gcry_check_version. (see global_init + * comments in gcrypt sources) */ + gcry_check_version(NULL); + done = true; + } + vlc_global_unlock (VLC_GCRYPT_MUTEX); +} diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_http.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_http.h new file mode 100644 index 0000000..a48ea79 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_http.h @@ -0,0 +1,97 @@ +/***************************************************************************** + * vlc_http.h: Shared code for HTTP clients + ***************************************************************************** + * Copyright (C) 2001-2008 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * Christophe Massiot + * Rémi Denis-Courmont + * Antoine Cellerier + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_HTTP_H +#define VLC_HTTP_H 1 + +/** + * \file + * This file defines functions, structures, enums and macros shared between + * HTTP clients. + */ + +#include +#include + +/* RFC 2617: Basic and Digest Access Authentication */ +typedef struct vlc_http_auth_t +{ + char *psz_realm; + char *psz_domain; + char *psz_nonce; + char *psz_opaque; + char *psz_stale; + char *psz_algorithm; + char *psz_qop; + int i_nonce; + char *psz_cnonce; + char *psz_HA1; /* stored H(A1) value if algorithm = "MD5-sess" */ +} vlc_http_auth_t; + + +VLC_API void vlc_http_auth_Init( vlc_http_auth_t * ); +VLC_API void vlc_http_auth_Deinit( vlc_http_auth_t * ); +VLC_API void vlc_http_auth_ParseWwwAuthenticateHeader + ( vlc_object_t *, vlc_http_auth_t * , const char * ); +VLC_API int vlc_http_auth_ParseAuthenticationInfoHeader + ( vlc_object_t *, vlc_http_auth_t *, + const char *, const char *, + const char *, const char *, + const char * ); +VLC_API char *vlc_http_auth_FormatAuthorizationHeader + ( vlc_object_t *, vlc_http_auth_t *, + const char *, const char *, + const char *, const char * ) VLC_USED; + +/* RFC 6265: cookies */ + +typedef struct vlc_http_cookie_jar_t vlc_http_cookie_jar_t; + +VLC_API vlc_http_cookie_jar_t * vlc_http_cookies_new( void ) VLC_USED; +VLC_API void vlc_http_cookies_destroy( vlc_http_cookie_jar_t * p_jar ); + +/** + * Parse a value of an incoming Set-Cookie header and append the + * cookie to the cookie jar if appropriate. + * + * @param jar cookie jar object + * @param cookie header field value of Set-Cookie + * @return true, if the cookie was added, false otherwise + */ +VLC_API bool vlc_http_cookies_store( vlc_http_cookie_jar_t *jar, + const char *cookie, const char *host, const char *path ); + +/** + * Returns a cookie value that match the given URL. + * + * @param p_jar a cookie jar + * @param p_url the URL for which the cookies are returned + * @return A string consisting of semicolon-separated cookie NAME=VALUE pairs. + */ +VLC_API char *vlc_http_cookies_fetch( vlc_http_cookie_jar_t *jar, bool secure, + const char *host, const char *path ); + +#endif /* VLC_HTTP_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_httpd.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_httpd.h new file mode 100644 index 0000000..29b8229 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_httpd.h @@ -0,0 +1,152 @@ +/***************************************************************************** + * vlc_httpd.h: builtin HTTP/RTSP server. + ***************************************************************************** + * Copyright (C) 2004-2006 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_HTTPD_H +#define VLC_HTTPD_H 1 + +/** + * \file + * HTTP/RTSP server API. + */ + +enum +{ + HTTPD_MSG_NONE, + + /* answer */ + HTTPD_MSG_ANSWER, + + /* http request */ + HTTPD_MSG_GET, + HTTPD_MSG_HEAD, + HTTPD_MSG_POST, + + /* rtsp request */ + HTTPD_MSG_OPTIONS, + HTTPD_MSG_DESCRIBE, + HTTPD_MSG_SETUP, + HTTPD_MSG_PLAY, + HTTPD_MSG_PAUSE, + HTTPD_MSG_GETPARAMETER, + HTTPD_MSG_TEARDOWN, + + /* just to track the count of MSG */ + HTTPD_MSG_MAX +}; + +enum +{ + HTTPD_PROTO_NONE, + HTTPD_PROTO_HTTP, /* HTTP/1.x */ + HTTPD_PROTO_RTSP, /* RTSP/1.x */ + HTTPD_PROTO_HTTP0, /* HTTP/0.x */ +}; + +typedef struct httpd_host_t httpd_host_t; +typedef struct httpd_client_t httpd_client_t; +/* create a new host */ +VLC_API httpd_host_t *vlc_http_HostNew( vlc_object_t * ) VLC_USED; +VLC_API httpd_host_t *vlc_https_HostNew( vlc_object_t * ) VLC_USED; +VLC_API httpd_host_t *vlc_rtsp_HostNew( vlc_object_t * ) VLC_USED; +/* delete a host */ +VLC_API void httpd_HostDelete( httpd_host_t * ); + +typedef struct +{ + char * name; + char * value; +} httpd_header; + +typedef struct httpd_message_t +{ + httpd_client_t *cl; /* NULL if not throught a connection e vlc internal */ + + uint8_t i_type; + uint8_t i_proto; + uint8_t i_version; + + /* for an answer */ + int i_status; + + /* for a query */ + char *psz_url; + /* FIXME find a clean way to handle GET(psz_args) + and POST(body) through the same code */ + uint8_t *psz_args; + + /* options */ + size_t i_headers; + httpd_header *p_headers; + + /* body */ + int64_t i_body_offset; + int i_body; + uint8_t *p_body; + +} httpd_message_t; + +typedef struct httpd_url_t httpd_url_t; +typedef struct httpd_callback_sys_t httpd_callback_sys_t; +typedef int (*httpd_callback_t)( httpd_callback_sys_t *, httpd_client_t *, httpd_message_t *answer, const httpd_message_t *query ); +/* register a new url */ +VLC_API httpd_url_t * httpd_UrlNew( httpd_host_t *, const char *psz_url, const char *psz_user, const char *psz_password ) VLC_USED; +/* register callback on a url */ +VLC_API int httpd_UrlCatch( httpd_url_t *, int i_msg, httpd_callback_t, httpd_callback_sys_t * ); +/* delete a url */ +VLC_API void httpd_UrlDelete( httpd_url_t * ); + +VLC_API char* httpd_ClientIP( const httpd_client_t *cl, char *, int * ); +VLC_API char* httpd_ServerIP( const httpd_client_t *cl, char *, int * ); + +/* High level */ + +typedef struct httpd_file_t httpd_file_t; +typedef struct httpd_file_sys_t httpd_file_sys_t; +typedef int (*httpd_file_callback_t)( httpd_file_sys_t *, httpd_file_t *, uint8_t *psz_request, uint8_t **pp_data, int *pi_data ); +VLC_API httpd_file_t * httpd_FileNew( httpd_host_t *, const char *psz_url, const char *psz_mime, const char *psz_user, const char *psz_password, httpd_file_callback_t pf_fill, httpd_file_sys_t * ) VLC_USED; +VLC_API httpd_file_sys_t * httpd_FileDelete( httpd_file_t * ); + + +typedef struct httpd_handler_t httpd_handler_t; +typedef int (*httpd_handler_callback_t)( void *, httpd_handler_t *, char *psz_url, uint8_t *psz_request, int i_type, uint8_t *p_in, int i_in, char *psz_remote_addr, char *psz_remote_host, uint8_t **pp_data, int *pi_data ); +VLC_API httpd_handler_t * httpd_HandlerNew( httpd_host_t *, const char *psz_url, const char *psz_user, const char *psz_password, httpd_handler_callback_t pf_fill, void * ) VLC_USED; +VLC_API void * httpd_HandlerDelete( httpd_handler_t * ); + +typedef struct httpd_redirect_t httpd_redirect_t; +VLC_API httpd_redirect_t * httpd_RedirectNew( httpd_host_t *, const char *psz_url_dst, const char *psz_url_src ) VLC_USED; +VLC_API void httpd_RedirectDelete( httpd_redirect_t * ); + + +typedef struct httpd_stream_t httpd_stream_t; +VLC_API httpd_stream_t * httpd_StreamNew( httpd_host_t *, const char *psz_url, const char *psz_mime, const char *psz_user, const char *psz_password ) VLC_USED; +VLC_API void httpd_StreamDelete( httpd_stream_t * ); +VLC_API int httpd_StreamHeader( httpd_stream_t *, uint8_t *p_data, int i_data ); +VLC_API int httpd_StreamSend( httpd_stream_t *, const block_t *p_block ); +VLC_API int httpd_StreamSetHTTPHeaders(httpd_stream_t *, const httpd_header *, size_t); + +/* Msg functions facilities */ +VLC_API void httpd_MsgAdd( httpd_message_t *, const char *psz_name, const char *psz_value, ... ) VLC_FORMAT( 3, 4 ); +/* return "" if not found. The string is not allocated */ +VLC_API const char * httpd_MsgGet( const httpd_message_t *, const char *psz_name ); + +#endif /* _VLC_HTTPD_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_image.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_image.h new file mode 100644 index 0000000..2b308fd --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_image.h @@ -0,0 +1,81 @@ +/***************************************************************************** + * vlc_image.h : wrapper for image reading/writing facilities + ***************************************************************************** + * Copyright (C) 2004 VLC authors and VideoLAN + * $Id$ + * + * Authors: Gildas Bazin + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_IMAGE_H +#define VLC_IMAGE_H 1 + +# include +# include + +/** + * \file + * This file defines functions and structures for image conversions in vlc + */ + +# ifdef __cplusplus +extern "C" { +# endif + +struct image_handler_t +{ + picture_t * (*pf_read) ( image_handler_t *, block_t *, + const video_format_t *, video_format_t * ); + picture_t * (*pf_read_url) ( image_handler_t *, const char *, + video_format_t *, video_format_t * ); + block_t * (*pf_write) ( image_handler_t *, picture_t *, + const video_format_t *, const video_format_t * ); + int (*pf_write_url) ( image_handler_t *, picture_t *, + const video_format_t *, video_format_t *, + const char * ); + + picture_t * (*pf_convert) ( image_handler_t *, picture_t *, + const video_format_t *, video_format_t * ); + + /* Private properties */ + vlc_object_t *p_parent; + decoder_t *p_dec; + encoder_t *p_enc; + filter_t *p_filter; + + picture_fifo_t *outfifo; +}; + +VLC_API image_handler_t * image_HandlerCreate( vlc_object_t * ) VLC_USED; +#define image_HandlerCreate( a ) image_HandlerCreate( VLC_OBJECT(a) ) +VLC_API void image_HandlerDelete( image_handler_t * ); + +#define image_Read( a, b, c, d ) a->pf_read( a, b, c, d ) +#define image_ReadUrl( a, b, c, d ) a->pf_read_url( a, b, c, d ) +#define image_Write( a, b, c, d ) a->pf_write( a, b, c, d ) +#define image_WriteUrl( a, b, c, d, e ) a->pf_write_url( a, b, c, d, e ) +#define image_Convert( a, b, c, d ) a->pf_convert( a, b, c, d ) + +VLC_API vlc_fourcc_t image_Type2Fourcc( const char *psz_name ); +VLC_API vlc_fourcc_t image_Ext2Fourcc( const char *psz_name ); +VLC_API vlc_fourcc_t image_Mime2Fourcc( const char *psz_mime ); + +# ifdef __cplusplus +} +# endif + +#endif /* _VLC_IMAGE_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_inhibit.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_inhibit.h new file mode 100644 index 0000000..b1f7330 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_inhibit.h @@ -0,0 +1,54 @@ +/***************************************************************************** + * vlc_inhibit.h: VLC screen saver inhibition + ***************************************************************************** + * Copyright (C) 2009 Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * \file + * This file defines the interface for screen-saver inhibition modules + */ + +#ifndef VLC_INHIBIT_H +# define VLC_INHIBIT_H 1 + +typedef struct vlc_inhibit vlc_inhibit_t; +typedef struct vlc_inhibit_sys vlc_inhibit_sys_t; + +enum vlc_inhibit_flags +{ + VLC_INHIBIT_NONE=0 /*< No inhibition */, + VLC_INHIBIT_SUSPEND=0x1 /*< Processor is in use - do not suspend */, + VLC_INHIBIT_DISPLAY=0x2 /*< Display is in use - do not blank/lock */, +#define VLC_INHIBIT_AUDIO (VLC_INHIBIT_SUSPEND) +#define VLC_INHIBIT_VIDEO (VLC_INHIBIT_SUSPEND|VLC_INHIBIT_DISPLAY) +}; + +struct vlc_inhibit +{ + VLC_COMMON_MEMBERS + + vlc_inhibit_sys_t *p_sys; + void (*inhibit) (vlc_inhibit_t *, unsigned flags); +}; + +static inline void vlc_inhibit_Set (vlc_inhibit_t *ih, unsigned flags) +{ + ih->inhibit (ih, flags); +} + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_input.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_input.h new file mode 100644 index 0000000..0687836 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_input.h @@ -0,0 +1,703 @@ +/***************************************************************************** + * vlc_input.h: Core input structures + ***************************************************************************** + * Copyright (C) 1999-2015 VLC authors and VideoLAN + * $Id$ + * + * Authors: Christophe Massiot + * Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_INPUT_H +#define VLC_INPUT_H 1 + +/** + * \defgroup input Input + * Input thread + * @{ + * \file + * Input thread interface + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +/***************************************************************************** + * Seek point: (generalisation of chapters) + *****************************************************************************/ +struct seekpoint_t +{ + int64_t i_time_offset; + char *psz_name; +}; + +static inline seekpoint_t *vlc_seekpoint_New( void ) +{ + seekpoint_t *point = (seekpoint_t*)malloc( sizeof( seekpoint_t ) ); + if( !point ) + return NULL; + point->i_time_offset = -1; + point->psz_name = NULL; + return point; +} + +static inline void vlc_seekpoint_Delete( seekpoint_t *point ) +{ + if( !point ) return; + free( point->psz_name ); + free( point ); +} + +static inline seekpoint_t *vlc_seekpoint_Duplicate( const seekpoint_t *src ) +{ + seekpoint_t *point = vlc_seekpoint_New(); + if( likely(point) ) + { + if( src->psz_name ) point->psz_name = strdup( src->psz_name ); + point->i_time_offset = src->i_time_offset; + } + return point; +} + +/***************************************************************************** + * Title: + *****************************************************************************/ + +/* input_title_t.i_flags field */ +#define INPUT_TITLE_MENU 0x01 /* Menu title */ +#define INPUT_TITLE_INTERACTIVE 0x02 /* Interactive title. Playback position has no meaning. */ + +typedef struct input_title_t +{ + char *psz_name; + + int64_t i_length; /* Length(microsecond) if known, else 0 */ + + unsigned i_flags; /* Is it a menu or a normal entry */ + + /* Title seekpoint */ + int i_seekpoint; + seekpoint_t **seekpoint; +} input_title_t; + +static inline input_title_t *vlc_input_title_New(void) +{ + input_title_t *t = (input_title_t*)malloc( sizeof( input_title_t ) ); + if( !t ) + return NULL; + + t->psz_name = NULL; + t->i_flags = 0; + t->i_length = 0; + t->i_seekpoint = 0; + t->seekpoint = NULL; + + return t; +} + +static inline void vlc_input_title_Delete( input_title_t *t ) +{ + int i; + if( t == NULL ) + return; + + free( t->psz_name ); + for( i = 0; i < t->i_seekpoint; i++ ) + vlc_seekpoint_Delete( t->seekpoint[i] ); + free( t->seekpoint ); + free( t ); +} + +static inline input_title_t *vlc_input_title_Duplicate( const input_title_t *t ) +{ + input_title_t *dup = vlc_input_title_New( ); + if( dup == NULL) return NULL; + + if( t->psz_name ) dup->psz_name = strdup( t->psz_name ); + dup->i_flags = t->i_flags; + dup->i_length = t->i_length; + if( t->i_seekpoint > 0 ) + { + dup->seekpoint = (seekpoint_t**)vlc_alloc( t->i_seekpoint, sizeof(seekpoint_t*) ); + if( likely(dup->seekpoint) ) + { + for( int i = 0; i < t->i_seekpoint; i++ ) + dup->seekpoint[i] = vlc_seekpoint_Duplicate( t->seekpoint[i] ); + dup->i_seekpoint = t->i_seekpoint; + } + } + + return dup; +} + +/***************************************************************************** + * Attachments + *****************************************************************************/ +struct input_attachment_t +{ + char *psz_name; + char *psz_mime; + char *psz_description; + + size_t i_data; + void *p_data; +}; + +static inline void vlc_input_attachment_Delete( input_attachment_t *a ) +{ + if( !a ) + return; + + free( a->p_data ); + free( a->psz_description ); + free( a->psz_mime ); + free( a->psz_name ); + free( a ); +} + +static inline input_attachment_t *vlc_input_attachment_New( const char *psz_name, + const char *psz_mime, + const char *psz_description, + const void *p_data, + size_t i_data ) +{ + input_attachment_t *a = (input_attachment_t *)malloc( sizeof (*a) ); + if( unlikely(a == NULL) ) + return NULL; + + a->psz_name = strdup( psz_name ? psz_name : "" ); + a->psz_mime = strdup( psz_mime ? psz_mime : "" ); + a->psz_description = strdup( psz_description ? psz_description : "" ); + a->i_data = i_data; + a->p_data = malloc( i_data ); + if( i_data > 0 && likely(a->p_data != NULL) ) + memcpy( a->p_data, p_data, i_data ); + + if( unlikely(a->psz_name == NULL || a->psz_mime == NULL + || a->psz_description == NULL || (i_data > 0 && a->p_data == NULL)) ) + { + vlc_input_attachment_Delete( a ); + a = NULL; + } + return a; +} + +static inline input_attachment_t *vlc_input_attachment_Duplicate( const input_attachment_t *a ) +{ + return vlc_input_attachment_New( a->psz_name, a->psz_mime, a->psz_description, + a->p_data, a->i_data ); +} + +/***************************************************************************** + * input defines/constants. + *****************************************************************************/ + +/** + * This defines an opaque input resource handler. + */ +typedef struct input_resource_t input_resource_t; + +/** + * Main structure representing an input thread. This structure is mostly + * private. The only public fields are read-only and constant. + */ +struct input_thread_t +{ + VLC_COMMON_MEMBERS +}; + +/** + * Record prefix string. + * TODO make it configurable. + */ +#define INPUT_RECORD_PREFIX "vlc-record-%Y-%m-%d-%Hh%Mm%Ss-$ N-$ p" + +/***************************************************************************** + * Input events and variables + *****************************************************************************/ + +/** + * \defgroup inputvariable Input variables + * + * The input provides multiples variable you can write to and/or read from. + * + * TODO complete the documentation. + * The read only variables are: + * - "length" + * - "can-seek" (if you can seek, it doesn't say if 'bar display' has be shown + * or not, for that check position != 0.0) + * - "can-pause" + * - "can-rate" + * - "can-rewind" + * - "can-record" (if a stream can be recorded while playing) + * - "teletext-es" (list of id from the spu tracks (spu-es) that are teletext, the + * variable value being the one currently selected, -1 if no teletext) + * - "signal-quality" + * - "signal-strength" + * - "program-scrambled" (if the current program is scrambled) + * - "cache" (level of data cached [0 .. 1]) + * + * The read-write variables are: + * - state (\see input_state_e) + * - rate + * - position + * - time, time-offset + * - title, next-title, prev-title + * - chapter, next-chapter, next-chapter-prev + * - program, audio-es, video-es, spu-es + * - audio-delay, spu-delay + * - bookmark (bookmark list) + * - record + * - frame-next + * - navigation (list of "title %2i") + * - "title %2i" + * + * The variable used for event is + * - intf-event (\see input_event_type_e) + */ + +/** + * Input state + * + * This enum is used by the variable "state" + */ +typedef enum input_state_e +{ + INIT_S = 0, + OPENING_S, + PLAYING_S, + PAUSE_S, + END_S, + ERROR_S, +} input_state_e; + +/** + * Input rate. + * + * It is an float used by the variable "rate" in the + * range [INPUT_RATE_DEFAULT/INPUT_RATE_MAX, INPUT_RATE_DEFAULT/INPUT_RATE_MIN] + * the default value being 1. It represents the ratio of playback speed to + * nominal speed (bigger is faster). + * + * Internally, the rate is stored as a value in the range + * [INPUT_RATE_MIN, INPUT_RATE_MAX]. + * internal rate = INPUT_RATE_DEFAULT / rate variable + */ + +/** + * Default rate value + */ +#define INPUT_RATE_DEFAULT 1000 +/** + * Minimal rate value + */ +#define INPUT_RATE_MIN 32 /* Up to 32/1 */ +/** + * Maximal rate value + */ +#define INPUT_RATE_MAX 32000 /* Up to 1/32 */ + +/** + * Input events + * + * You can catch input event by adding a callback on the variable "intf-event". + * This variable is an integer that will hold a input_event_type_e value. + */ +typedef enum input_event_type_e +{ + /* "state" has changed */ + INPUT_EVENT_STATE, + /* b_dead is true */ + INPUT_EVENT_DEAD, + + /* "rate" has changed */ + INPUT_EVENT_RATE, + + /* At least one of "position" or "time" */ + INPUT_EVENT_POSITION, + + /* "length" has changed */ + INPUT_EVENT_LENGTH, + + /* A title has been added or removed or selected. + * It implies that the chapter has changed (no chapter event is sent) */ + INPUT_EVENT_TITLE, + /* A chapter has been added or removed or selected. */ + INPUT_EVENT_CHAPTER, + + /* A program ("program") has been added or removed or selected, + * or "program-scrambled" has changed.*/ + INPUT_EVENT_PROGRAM, + /* A ES has been added or removed or selected */ + INPUT_EVENT_ES, + /* "teletext-es" has changed */ + INPUT_EVENT_TELETEXT, + + /* "record" has changed */ + INPUT_EVENT_RECORD, + + /* input_item_t media has changed */ + INPUT_EVENT_ITEM_META, + /* input_item_t info has changed */ + INPUT_EVENT_ITEM_INFO, + /* input_item_t epg has changed */ + INPUT_EVENT_ITEM_EPG, + + /* Input statistics have been updated */ + INPUT_EVENT_STATISTICS, + /* At least one of "signal-quality" or "signal-strength" has changed */ + INPUT_EVENT_SIGNAL, + + /* "audio-delay" has changed */ + INPUT_EVENT_AUDIO_DELAY, + /* "spu-delay" has changed */ + INPUT_EVENT_SUBTITLE_DELAY, + + /* "bookmark" has changed */ + INPUT_EVENT_BOOKMARK, + + /* cache" has changed */ + INPUT_EVENT_CACHE, + + /* A audio_output_t object has been created/deleted by *the input* */ + INPUT_EVENT_AOUT, + /* A vout_thread_t object has been created/deleted by *the input* */ + INPUT_EVENT_VOUT, + +} input_event_type_e; + +/** + * Input queries + */ +enum input_query_e +{ + /* input variable "position" */ + INPUT_GET_POSITION, /* arg1= double * res= */ + INPUT_SET_POSITION, /* arg1= double res=can fail */ + + /* input variable "length" */ + INPUT_GET_LENGTH, /* arg1= int64_t * res=can fail */ + + /* input variable "time" */ + INPUT_GET_TIME, /* arg1= int64_t * res= */ + INPUT_SET_TIME, /* arg1= int64_t res=can fail */ + + /* input variable "rate" (nominal is INPUT_RATE_DEFAULT) */ + INPUT_GET_RATE, /* arg1= int * res= */ + INPUT_SET_RATE, /* arg1= int res=can fail */ + + /* input variable "state" */ + INPUT_GET_STATE, /* arg1= int * res= */ + INPUT_SET_STATE, /* arg1= int res=can fail */ + + /* input variable "audio-delay" and "sub-delay" */ + INPUT_GET_AUDIO_DELAY, /* arg1 = int* res=can fail */ + INPUT_SET_AUDIO_DELAY, /* arg1 = int res=can fail */ + INPUT_GET_SPU_DELAY, /* arg1 = int* res=can fail */ + INPUT_SET_SPU_DELAY, /* arg1 = int res=can fail */ + + /* Menu (VCD/DVD/BD) Navigation */ + /** Activate the navigation item selected. res=can fail */ + INPUT_NAV_ACTIVATE, + /** Use the up arrow to select a navigation item above. res=can fail */ + INPUT_NAV_UP, + /** Use the down arrow to select a navigation item under. res=can fail */ + INPUT_NAV_DOWN, + /** Use the left arrow to select a navigation item on the left. res=can fail */ + INPUT_NAV_LEFT, + /** Use the right arrow to select a navigation item on the right. res=can fail */ + INPUT_NAV_RIGHT, + /** Activate the popup Menu (for BD). res=can fail */ + INPUT_NAV_POPUP, + /** Activate disc Root Menu. res=can fail */ + INPUT_NAV_MENU, + + /* Meta datas */ + INPUT_ADD_INFO, /* arg1= char* arg2= char* arg3=... res=can fail */ + INPUT_REPLACE_INFOS,/* arg1= info_category_t * res=cannot fail */ + INPUT_MERGE_INFOS,/* arg1= info_category_t * res=cannot fail */ + INPUT_DEL_INFO, /* arg1= char* arg2= char* res=can fail */ + + /* bookmarks */ + INPUT_GET_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ + INPUT_GET_BOOKMARKS, /* arg1= seekpoint_t *** arg2= int * res=can fail */ + INPUT_CLEAR_BOOKMARKS, /* res=can fail */ + INPUT_ADD_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ + INPUT_CHANGE_BOOKMARK, /* arg1= seekpoint_t * arg2= int * res=can fail */ + INPUT_DEL_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ + INPUT_SET_BOOKMARK, /* arg1= int res=can fail */ + + /* titles */ + INPUT_GET_TITLE_INFO, /* arg1=input_title_t** arg2= int * res=can fail */ + INPUT_GET_FULL_TITLE_INFO, /* arg1=input_title_t*** arg2= int * res=can fail */ + + /* seekpoints */ + INPUT_GET_SEEKPOINTS, /* arg1=seekpoint_t*** arg2= int * res=can fail */ + + /* Attachments */ + INPUT_GET_ATTACHMENTS, /* arg1=input_attachment_t***, arg2=int* res=can fail */ + INPUT_GET_ATTACHMENT, /* arg1=input_attachment_t**, arg2=char* res=can fail */ + + /* On the fly input slave */ + INPUT_ADD_SLAVE, /* arg1= enum slave_type, arg2= const char *, + * arg3= bool forced, arg4= bool notify, + * arg5= bool check_extension */ + + /* On the fly record while playing */ + INPUT_SET_RECORD_STATE, /* arg1=bool res=can fail */ + INPUT_GET_RECORD_STATE, /* arg1=bool* res=can fail */ + + /* ES */ + INPUT_RESTART_ES, /* arg1=int (-AUDIO/VIDEO/SPU_ES for the whole category) */ + + /* Viewpoint */ + INPUT_UPDATE_VIEWPOINT, /* arg1=(const vlc_viewpoint_t*), arg2=bool b_absolute */ + INPUT_SET_INITIAL_VIEWPOINT, /* arg1=(const vlc_viewpoint_t*) */ + + /* Input ressources + * XXX You must call vlc_object_release as soon as possible */ + INPUT_GET_AOUT, /* arg1=audio_output_t ** res=can fail */ + INPUT_GET_VOUTS, /* arg1=vout_thread_t ***, size_t * res=can fail */ + INPUT_GET_ES_OBJECTS, /* arg1=int id, vlc_object_t **dec, vout_thread_t **, audio_output_t ** */ + + /* Renderers */ + INPUT_SET_RENDERER, /* arg1=vlc_renderer_item_t* */ + + /* External clock managments */ + INPUT_GET_PCR_SYSTEM, /* arg1=vlc_tick_t *, arg2=vlc_tick_t * res=can fail */ + INPUT_MODIFY_PCR_SYSTEM,/* arg1=int absolute, arg2=vlc_tick_t res=can fail */ +}; + +/** @}*/ + +/***************************************************************************** + * Prototypes + *****************************************************************************/ + +VLC_API input_thread_t * input_Create( vlc_object_t *p_parent, input_item_t *, + const char *psz_log, input_resource_t *, + vlc_renderer_item_t* p_renderer ) VLC_USED; +#define input_Create(a,b,c,d,e) input_Create(VLC_OBJECT(a),b,c,d,e) + +VLC_API int input_Start( input_thread_t * ); + +VLC_API void input_Stop( input_thread_t * ); + +VLC_API int input_Read( vlc_object_t *, input_item_t * ); +#define input_Read(a,b) input_Read(VLC_OBJECT(a),b) + +VLC_API int input_vaControl( input_thread_t *, int i_query, va_list ); + +VLC_API int input_Control( input_thread_t *, int i_query, ... ); + +VLC_API void input_Close( input_thread_t * ); + +/** + * Create a new input_thread_t and start it. + * + * Provided for convenience. + * + * \see input_Create + */ +static inline +input_thread_t *input_CreateAndStart( vlc_object_t *parent, + input_item_t *item, const char *log ) +{ + input_thread_t *input = input_Create( parent, item, log, NULL, NULL ); + if( input != NULL && input_Start( input ) ) + { + vlc_object_release( input ); + input = NULL; + } + return input; +} +#define input_CreateAndStart(a,b,c) input_CreateAndStart(VLC_OBJECT(a),b,c) + +/** + * Get the input item for an input thread + * + * You have to keep a reference to the input or to the input_item_t until + * you do not need it anymore. + */ +VLC_API input_item_t* input_GetItem( input_thread_t * ) VLC_USED; + +/** + * It will return the current state of the input. + * Provided for convenience. + */ +static inline input_state_e input_GetState( input_thread_t * p_input ) +{ + input_state_e state = INIT_S; + input_Control( p_input, INPUT_GET_STATE, &state ); + return state; +} + +/** + * Return one of the video output (if any). If possible, you should use + * INPUT_GET_VOUTS directly and process _all_ video outputs instead. + * @param p_input an input thread from which to get a video output + * @return NULL on error, or a video output thread pointer (which needs to be + * released with vlc_object_release()). + */ +static inline vout_thread_t *input_GetVout( input_thread_t *p_input ) +{ + vout_thread_t **pp_vout, *p_vout; + size_t i_vout; + + if( input_Control( p_input, INPUT_GET_VOUTS, &pp_vout, &i_vout ) ) + return NULL; + + for( size_t i = 1; i < i_vout; i++ ) + vlc_object_release( (vlc_object_t *)(pp_vout[i]) ); + + p_vout = (i_vout >= 1) ? pp_vout[0] : NULL; + free( pp_vout ); + return p_vout; +} + +static inline int input_AddSlave( input_thread_t *p_input, enum slave_type type, + const char *psz_uri, bool b_forced, + bool b_notify, bool b_check_ext ) +{ + return input_Control( p_input, INPUT_ADD_SLAVE, type, psz_uri, b_forced, + b_notify, b_check_ext ); +} + +/** + * Update the viewpoint of the input thread. The viewpoint will be applied to + * all vouts and aouts. + * + * @param p_input an input thread + * @param p_viewpoint the viewpoint value + * @param b_absolute if true replace the old viewpoint with the new one. If + * false, increase/decrease it. + * @return VLC_SUCCESS or a VLC error code + */ +static inline int input_UpdateViewpoint( input_thread_t *p_input, + const vlc_viewpoint_t *p_viewpoint, + bool b_absolute ) +{ + return input_Control( p_input, INPUT_UPDATE_VIEWPOINT, p_viewpoint, + b_absolute ); +} + +/** + * Return the audio output (if any) associated with an input. + * @param p_input an input thread + * @return NULL on error, or the audio output (which needs to be + * released with vlc_object_release()). + */ +static inline audio_output_t *input_GetAout( input_thread_t *p_input ) +{ + audio_output_t *p_aout; + return input_Control( p_input, INPUT_GET_AOUT, &p_aout ) ? NULL : p_aout; +} + +/** + * Returns the objects associated to an ES. + * + * You must release all non NULL object using vlc_object_release. + * You may set pointer of pointer to NULL to avoid retreiving it. + */ +static inline int input_GetEsObjects( input_thread_t *p_input, int i_id, + vlc_object_t **pp_decoder, + vout_thread_t **pp_vout, audio_output_t **pp_aout ) +{ + return input_Control( p_input, INPUT_GET_ES_OBJECTS, i_id, + pp_decoder, pp_vout, pp_aout ); +} + +/** + * \see input_clock_GetSystemOrigin + */ +static inline int input_GetPcrSystem( input_thread_t *p_input, vlc_tick_t *pi_system, vlc_tick_t *pi_delay ) +{ + return input_Control( p_input, INPUT_GET_PCR_SYSTEM, pi_system, pi_delay ); +} +/** + * \see input_clock_ChangeSystemOrigin + */ +static inline int input_ModifyPcrSystem( input_thread_t *p_input, bool b_absolute, vlc_tick_t i_system ) +{ + return input_Control( p_input, INPUT_MODIFY_PCR_SYSTEM, b_absolute, i_system ); +} + +/* */ +VLC_API decoder_t * input_DecoderCreate( vlc_object_t *, const es_format_t *, input_resource_t * ) VLC_USED; +VLC_API void input_DecoderDelete( decoder_t * ); +VLC_API void input_DecoderDecode( decoder_t *, block_t *, bool b_do_pace ); +VLC_API void input_DecoderDrain( decoder_t * ); +VLC_API void input_DecoderFlush( decoder_t * ); + +/** + * This function creates a sane filename path. + */ +VLC_API char * input_CreateFilename( input_thread_t *, const char *psz_path, const char *psz_prefix, const char *psz_extension ) VLC_USED; + +/** + * It creates an empty input resource handler. + * + * The given object MUST stay alive as long as the input_resource_t is + * not deleted. + */ +VLC_API input_resource_t * input_resource_New( vlc_object_t * ) VLC_USED; + +/** + * It releases an input resource. + */ +VLC_API void input_resource_Release( input_resource_t * ); + +/** + * Forcefully destroys the video output (e.g. when the playlist is stopped). + */ +VLC_API void input_resource_TerminateVout( input_resource_t * ); + +/** + * This function releases all resources (object). + */ +VLC_API void input_resource_Terminate( input_resource_t * ); + +/** + * \return the current audio output if any. + * Use vlc_object_release() to drop the reference. + */ +VLC_API audio_output_t *input_resource_HoldAout( input_resource_t * ); + +/** + * This function creates or recycles an audio output. + */ +VLC_API audio_output_t *input_resource_GetAout( input_resource_t * ); + +/** + * This function retains or destroys an audio output. + */ +VLC_API void input_resource_PutAout( input_resource_t *, audio_output_t * ); + +/** + * Prevents the existing audio output (if any) from being recycled. + */ +VLC_API void input_resource_ResetAout( input_resource_t * ); + +/** @} */ +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_input_item.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_input_item.h new file mode 100644 index 0000000..62494cb --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_input_item.h @@ -0,0 +1,483 @@ +/***************************************************************************** + * vlc_input_item.h: Core input item + ***************************************************************************** + * Copyright (C) 1999-2009 VLC authors and VideoLAN + * $Id$ + * + * Authors: Christophe Massiot + * Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_INPUT_ITEM_H +#define VLC_INPUT_ITEM_H 1 + +/** + * \file + * This file defines functions, structures and enums for input items in vlc + */ + +#include +#include +#include + +#include + +typedef struct input_item_opaque input_item_opaque_t; +typedef struct input_item_slave input_item_slave_t; + +struct info_t +{ + char *psz_name; /**< Name of this info */ + char *psz_value; /**< Value of the info */ +}; + +struct info_category_t +{ + char *psz_name; /**< Name of this category */ + int i_infos; /**< Number of infos in the category */ + struct info_t **pp_infos; /**< Pointer to an array of infos */ +}; + +/** + * Describes an input and is used to spawn input_thread_t objects. + */ +struct input_item_t +{ + char *psz_name; /**< text describing this item */ + char *psz_uri; /**< mrl of this item */ + + int i_options; /**< Number of input options */ + char **ppsz_options; /**< Array of input options */ + uint8_t *optflagv; /**< Some flags of input options */ + unsigned optflagc; + input_item_opaque_t *opaques; /**< List of opaque pointer values */ + + vlc_tick_t i_duration; /**< Duration in microseconds */ + + + int i_categories; /**< Number of info categories */ + info_category_t **pp_categories; /**< Pointer to the first info category */ + + int i_es; /**< Number of es format descriptions */ + es_format_t **es; /**< Es formats */ + + input_stats_t *p_stats; /**< Statistics */ + + vlc_meta_t *p_meta; + + int i_epg; /**< Number of EPG entries */ + vlc_epg_t **pp_epg; /**< EPG entries */ + int64_t i_epg_time; /** EPG timedate as epoch time */ + const vlc_epg_t *p_epg_table; /** running/selected program cur/next EPG table */ + + int i_slaves; /**< Number of slaves */ + input_item_slave_t **pp_slaves; /**< Slave entries that will be loaded by + the input_thread */ + + vlc_event_manager_t event_manager; + + vlc_mutex_t lock; /**< Lock for the item */ + + uint8_t i_type; /**< Type (file, disc, ... see input_item_type_e) */ + bool b_net; /**< Net: always true for TYPE_STREAM, it + depends for others types */ + bool b_error_when_reading;/**< Error When Reading */ + + int i_preparse_depth; /**< How many level of sub items can be preparsed: + -1: recursive, 0: none, >0: n levels */ + + bool b_preparse_interact; /**< Force interaction with the user when + preparsing.*/ +}; + +enum input_item_type_e +{ + ITEM_TYPE_UNKNOWN, + ITEM_TYPE_FILE, + ITEM_TYPE_DIRECTORY, + ITEM_TYPE_DISC, + ITEM_TYPE_CARD, + ITEM_TYPE_STREAM, + ITEM_TYPE_PLAYLIST, + ITEM_TYPE_NODE, + + /* This one is not a real type but the number of input_item types. */ + ITEM_TYPE_NUMBER +}; + +enum input_item_net_type +{ + ITEM_NET_UNKNOWN, + ITEM_NET, + ITEM_LOCAL +}; + +enum slave_type +{ + SLAVE_TYPE_SPU, + SLAVE_TYPE_AUDIO, +}; + +enum slave_priority +{ + SLAVE_PRIORITY_MATCH_NONE = 1, + SLAVE_PRIORITY_MATCH_RIGHT, + SLAVE_PRIORITY_MATCH_LEFT, + SLAVE_PRIORITY_MATCH_ALL, + SLAVE_PRIORITY_USER +}; + +/* Extensions must be in alphabetical order */ +#define MASTER_EXTENSIONS \ + "asf", "avi", "divx", \ + "f4v", "flv", "m1v", \ + "m2v", "m4v", "mkv", \ + "mov", "mp2", "mp2v", \ + "mp4", "mp4v", "mpe", \ + "mpeg", "mpeg1", "mpeg2", \ + "mpeg4", "mpg", "mpv2", \ + "mxf", "ogv", "ogx", \ + "ps", "vro","webm", \ + "wmv", "wtv" + +#define SLAVE_SPU_EXTENSIONS \ + "aqt", "ass", "cdg", \ + "dks", "idx", "jss", \ + "mpl2", "mpsub", "pjs", \ + "psb", "rt", "sami", "sbv", \ + "scc", "smi", "srt", \ + "ssa", "stl", "sub", \ + "ttml", "tt", "usf", \ + "vtt", "webvtt" + +#define SLAVE_AUDIO_EXTENSIONS \ + "aac", "ac3", "dts", \ + "dtshd", "eac3", "flac", \ + "m4a", "mp3", "pcm" \ + +struct input_item_slave +{ + enum slave_type i_type; /**< Slave type (spu, audio) */ + enum slave_priority i_priority; /**< Slave priority */ + bool b_forced; /**< Slave should be selected */ + char psz_uri[]; /**< Slave mrl */ +}; + +struct input_item_node_t +{ + input_item_t * p_item; + int i_children; + input_item_node_t **pp_children; +}; + +VLC_API void input_item_CopyOptions( input_item_t *p_child, input_item_t *p_parent ); +VLC_API void input_item_SetName( input_item_t *p_item, const char *psz_name ); + +/** + * Start adding multiple subitems. + * + * Create a root node to hold a tree of subitems for given item + */ +VLC_API input_item_node_t * input_item_node_Create( input_item_t *p_input ) VLC_USED; + +/** + * Add a new child node to this parent node that will point to this subitem. + */ +VLC_API input_item_node_t * input_item_node_AppendItem( input_item_node_t *p_node, input_item_t *p_item ); + +/** + * Add an already created node to children of this parent node. + */ +VLC_API void input_item_node_AppendNode( input_item_node_t *p_parent, input_item_node_t *p_child ); + +/** + * Remove a node from its parent. + */ +void input_item_node_RemoveNode( input_item_node_t *parent, + input_item_node_t *child ); + +/** + * Delete a node created with input_item_node_Create() and all its children. + */ +VLC_API void input_item_node_Delete( input_item_node_t *p_node ); + +/** + * Option flags + */ +enum input_item_option_e +{ + /* Allow VLC to trust the given option. + * By default options are untrusted */ + VLC_INPUT_OPTION_TRUSTED = 0x2, + + /* Add the option, unless the same option + * is already present. */ + VLC_INPUT_OPTION_UNIQUE = 0x100, +}; + +/** + * This function allows to add an option to an existing input_item_t. + */ +VLC_API int input_item_AddOption(input_item_t *, const char *, unsigned i_flags ); +/** + * This function add several options to an existing input_item_t. + */ +VLC_API int input_item_AddOptions(input_item_t *, int i_options, + const char *const *ppsz_options, + unsigned i_flags ); +VLC_API int input_item_AddOpaque(input_item_t *, const char *, void *); + +void input_item_ApplyOptions(vlc_object_t *, input_item_t *); + +VLC_API bool input_item_slave_GetType(const char *, enum slave_type *); + +VLC_API input_item_slave_t *input_item_slave_New(const char *, enum slave_type, + enum slave_priority); +#define input_item_slave_Delete(p_slave) free(p_slave) + +/** + * This function allows adding a slave to an existing input item. + * The slave is owned by the input item after this call. + */ +VLC_API int input_item_AddSlave(input_item_t *, input_item_slave_t *); + +/* */ +VLC_API bool input_item_HasErrorWhenReading( input_item_t * ); +VLC_API void input_item_SetMeta( input_item_t *, vlc_meta_type_t meta_type, const char *psz_val ); +VLC_API bool input_item_MetaMatch( input_item_t *p_i, vlc_meta_type_t meta_type, const char *psz ); +VLC_API char * input_item_GetMeta( input_item_t *p_i, vlc_meta_type_t meta_type ) VLC_USED; +VLC_API char * input_item_GetName( input_item_t * p_i ) VLC_USED; +VLC_API char * input_item_GetTitleFbName( input_item_t * p_i ) VLC_USED; +VLC_API char * input_item_GetURI( input_item_t * p_i ) VLC_USED; +VLC_API char * input_item_GetNowPlayingFb( input_item_t *p_item ) VLC_USED; +VLC_API void input_item_SetURI( input_item_t * p_i, const char *psz_uri ); +VLC_API vlc_tick_t input_item_GetDuration( input_item_t * p_i ); +VLC_API void input_item_SetDuration( input_item_t * p_i, vlc_tick_t i_duration ); +VLC_API bool input_item_IsPreparsed( input_item_t *p_i ); +VLC_API bool input_item_IsArtFetched( input_item_t *p_i ); + +#define INPUT_META( name ) \ +static inline \ +void input_item_Set ## name (input_item_t *p_input, const char *val) \ +{ \ + input_item_SetMeta (p_input, vlc_meta_ ## name, val); \ +} \ +static inline \ +char *input_item_Get ## name (input_item_t *p_input) \ +{ \ + return input_item_GetMeta (p_input, vlc_meta_ ## name); \ +} + +INPUT_META(Title) +INPUT_META(Artist) +INPUT_META(AlbumArtist) +INPUT_META(Genre) +INPUT_META(Copyright) +INPUT_META(Album) +INPUT_META(TrackNumber) +INPUT_META(Description) +INPUT_META(Rating) +INPUT_META(Date) +INPUT_META(Setting) +INPUT_META(URL) +INPUT_META(Language) +INPUT_META(NowPlaying) +INPUT_META(ESNowPlaying) +INPUT_META(Publisher) +INPUT_META(EncodedBy) +INPUT_META(ArtworkURL) +INPUT_META(TrackID) +INPUT_META(TrackTotal) +INPUT_META(Director) +INPUT_META(Season) +INPUT_META(Episode) +INPUT_META(ShowName) +INPUT_META(Actors) +INPUT_META(DiscNumber) + +#define input_item_SetTrackNum input_item_SetTrackNumber +#define input_item_GetTrackNum input_item_GetTrackNumber +#define input_item_SetArtURL input_item_SetArtworkURL +#define input_item_GetArtURL input_item_GetArtworkURL + +VLC_API char * input_item_GetInfo( input_item_t *p_i, const char *psz_cat,const char *psz_name ) VLC_USED; +VLC_API int input_item_AddInfo( input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ... ) VLC_FORMAT( 4, 5 ); +VLC_API int input_item_DelInfo( input_item_t *p_i, const char *psz_cat, const char *psz_name ); +VLC_API void input_item_ReplaceInfos( input_item_t *, info_category_t * ); +VLC_API void input_item_MergeInfos( input_item_t *, info_category_t * ); + +/** + * This function creates a new input_item_t with the provided information. + * + * XXX You may also use input_item_New, as they need less arguments. + */ +VLC_API input_item_t * input_item_NewExt( const char *psz_uri, + const char *psz_name, + vlc_tick_t i_duration, int i_type, + enum input_item_net_type i_net ) VLC_USED; + +#define input_item_New( psz_uri, psz_name ) \ + input_item_NewExt( psz_uri, psz_name, -1, ITEM_TYPE_UNKNOWN, ITEM_NET_UNKNOWN ) + +#define input_item_NewCard( psz_uri, psz_name ) \ + input_item_NewExt( psz_uri, psz_name, -1, ITEM_TYPE_CARD, ITEM_LOCAL ) + +#define input_item_NewDisc( psz_uri, psz_name, i_duration ) \ + input_item_NewExt( psz_uri, psz_name, i_duration, ITEM_TYPE_DISC, ITEM_LOCAL ) + +#define input_item_NewStream( psz_uri, psz_name, i_duration ) \ + input_item_NewExt( psz_uri, psz_name, i_duration, ITEM_TYPE_STREAM, ITEM_NET ) + +#define input_item_NewDirectory( psz_uri, psz_name, i_net ) \ + input_item_NewExt( psz_uri, psz_name, -1, ITEM_TYPE_DIRECTORY, i_net ) + +#define input_item_NewFile( psz_uri, psz_name, i_duration, i_net ) \ + input_item_NewExt( psz_uri, psz_name, i_duration, ITEM_TYPE_FILE, i_net ) + +/** + * This function creates a new input_item_t as a copy of another. + */ +VLC_API input_item_t * input_item_Copy(input_item_t * ) VLC_USED; + +/** Holds an input item, i.e. creates a new reference. */ +VLC_API input_item_t *input_item_Hold(input_item_t *); + +/** Releases an input item, i.e. decrements its reference counter. */ +VLC_API void input_item_Release(input_item_t *); + +typedef enum input_item_meta_request_option_t +{ + META_REQUEST_OPTION_NONE = 0x00, + META_REQUEST_OPTION_SCOPE_LOCAL = 0x01, + META_REQUEST_OPTION_SCOPE_NETWORK = 0x02, + META_REQUEST_OPTION_SCOPE_ANY = 0x03, + META_REQUEST_OPTION_DO_INTERACT = 0x04 +} input_item_meta_request_option_t; + +/* status of the vlc_InputItemPreparseEnded event */ +enum input_item_preparse_status +{ + ITEM_PREPARSE_SKIPPED, + ITEM_PREPARSE_FAILED, + ITEM_PREPARSE_TIMEOUT, + ITEM_PREPARSE_DONE +}; + +VLC_API int libvlc_MetadataRequest( libvlc_int_t *, input_item_t *, + input_item_meta_request_option_t, + int, void * ); +VLC_API int libvlc_ArtRequest(libvlc_int_t *, input_item_t *, + input_item_meta_request_option_t ); +VLC_API void libvlc_MetadataCancel( libvlc_int_t *, void * ); + +/****************** + * Input stats + ******************/ +struct input_stats_t +{ + vlc_mutex_t lock; + + /* Input */ + int64_t i_read_packets; + int64_t i_read_bytes; + float f_input_bitrate; + float f_average_input_bitrate; + + /* Demux */ + int64_t i_demux_read_packets; + int64_t i_demux_read_bytes; + float f_demux_bitrate; + float f_average_demux_bitrate; + int64_t i_demux_corrupted; + int64_t i_demux_discontinuity; + + /* Decoders */ + int64_t i_decoded_audio; + int64_t i_decoded_video; + + /* Vout */ + int64_t i_displayed_pictures; + int64_t i_lost_pictures; + + /* Sout */ + int64_t i_sent_packets; + int64_t i_sent_bytes; + float f_send_bitrate; + + /* Aout */ + int64_t i_played_abuffers; + int64_t i_lost_abuffers; +}; + +/** + * Access pf_readdir helper struct + * \see vlc_readdir_helper_init() + * \see vlc_readdir_helper_additem() + * \see vlc_readdir_helper_finish() + */ +struct vlc_readdir_helper +{ + input_item_node_t *p_node; + void **pp_slaves; + size_t i_slaves; + void **pp_dirs; + size_t i_dirs; + int i_sub_autodetect_fuzzy; + bool b_show_hiddenfiles; + bool b_flatten; + char *psz_ignored_exts; +}; + +/** + * Init a vlc_readdir_helper struct + * + * \param p_rdh need to be cleaned with vlc_readdir_helper_finish() + * \param p_node node that will be used to add items + */ +VLC_API void vlc_readdir_helper_init(struct vlc_readdir_helper *p_rdh, + vlc_object_t *p_obj, input_item_node_t *p_node); +#define vlc_readdir_helper_init(p_rdh, p_obj, p_node) \ + vlc_readdir_helper_init(p_rdh, VLC_OBJECT(p_obj), p_node) + +/** + * Finish adding items to the node + * + * \param b_success if true, items of the node will be sorted. + */ +VLC_API void vlc_readdir_helper_finish(struct vlc_readdir_helper *p_rdh, bool b_success); + +/** + * Add a new input_item_t entry to the node of the vlc_readdir_helper struct. + * + * \param p_rdh previously inited vlc_readdir_helper struct + * \param psz_uri uri of the new item + * \param psz_flatpath flattened path of the new item. If not NULL, this + * function will create an input item for each sub folders (separated + * by '/') of psz_flatpath (so, this will un-flatten the folder + * hierarchy). Either psz_flatpath or psz_filename must be valid. + * \param psz_filename file name of the new item. If NULL, the file part of path + * will be used as a filename. Either psz_flatpath or psz_filename must + * be valid. + * \param i_type see \ref input_item_type_e + * \param i_net see \ref input_item_net_type + */ +VLC_API int vlc_readdir_helper_additem(struct vlc_readdir_helper *p_rdh, + const char *psz_uri, const char *psz_flatpath, + const char *psz_filename, + int i_type, int i_net); + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_interface.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_interface.h new file mode 100644 index 0000000..e90eaa2 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_interface.h @@ -0,0 +1,332 @@ +/***************************************************************************** + * vlc_interface.h: interface access for other threads + * This library provides basic functions for threads to interact with user + * interface, such as message output. + ***************************************************************************** + * Copyright (C) 1999, 2000 VLC authors and VideoLAN + * $Id$ + * + * Authors: Vincent Seguin + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_INTF_H_ +#define VLC_INTF_H_ + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct intf_dialog_args_t intf_dialog_args_t; + +/** + * \defgroup interface Interface + * VLC user interfaces + * @{ + * \file + * VLC user interface modules + */ + +typedef struct intf_sys_t intf_sys_t; + +/** Describe all interface-specific data of the interface thread */ +typedef struct intf_thread_t +{ + VLC_COMMON_MEMBERS + + struct intf_thread_t *p_next; /** LibVLC interfaces book keeping */ + + /* Specific interfaces */ + intf_sys_t * p_sys; /** system interface */ + + /** Interface module */ + module_t * p_module; + + /** Specific for dialogs providers */ + void ( *pf_show_dialog ) ( struct intf_thread_t *, int, int, + intf_dialog_args_t * ); + + config_chain_t *p_cfg; +} intf_thread_t; + +/** \brief Arguments passed to a dialogs provider + * This describes the arguments passed to the dialogs provider. They are + * mainly used with INTF_DIALOG_FILE_GENERIC. + */ +struct intf_dialog_args_t +{ + intf_thread_t *p_intf; + char *psz_title; + + char **psz_results; + int i_results; + + void (*pf_callback) ( intf_dialog_args_t * ); + void *p_arg; + + /* Specifically for INTF_DIALOG_FILE_GENERIC */ + char *psz_extensions; + bool b_save; + bool b_multiple; + + /* Specific to INTF_DIALOG_INTERACTION */ + struct interaction_dialog_t *p_dialog; +}; + +VLC_API int intf_Create( playlist_t *, const char * ); + +VLC_API void libvlc_Quit( libvlc_int_t * ); + +static inline playlist_t *pl_Get( struct intf_thread_t *intf ) +{ + return (playlist_t *)(intf->obj.parent); +} + +/** + * Retrieves the current input thread from the playlist. + * @note The returned object must be released with vlc_object_release(). + */ +#define pl_CurrentInput(intf) (playlist_CurrentInput(pl_Get(intf))) + +/** + * @ingroup messages + * @{ + */ + +VLC_API void vlc_LogSet(libvlc_int_t *, vlc_log_cb cb, void *data); + +/*@}*/ + +/* Interface dialog ids for dialog providers */ +typedef enum vlc_intf_dialog { + INTF_DIALOG_FILE_SIMPLE = 1, + INTF_DIALOG_FILE, + INTF_DIALOG_DISC, + INTF_DIALOG_NET, + INTF_DIALOG_CAPTURE, + INTF_DIALOG_SAT, + INTF_DIALOG_DIRECTORY, + + INTF_DIALOG_STREAMWIZARD, + INTF_DIALOG_WIZARD, + + INTF_DIALOG_PLAYLIST, + INTF_DIALOG_MESSAGES, + INTF_DIALOG_FILEINFO, + INTF_DIALOG_PREFS, + INTF_DIALOG_BOOKMARKS, + INTF_DIALOG_EXTENDED, + INTF_DIALOG_RENDERER, + + INTF_DIALOG_POPUPMENU = 20, + INTF_DIALOG_AUDIOPOPUPMENU, + INTF_DIALOG_VIDEOPOPUPMENU, + INTF_DIALOG_MISCPOPUPMENU, + + INTF_DIALOG_FILE_GENERIC = 30, + INTF_DIALOG_INTERACTION = 50, + INTF_DIALOG_SENDKEY = 51, + + INTF_DIALOG_UPDATEVLC = 90, + INTF_DIALOG_VLM, + + INTF_DIALOG_EXIT = 99 +} vlc_intf_dialog; + +/* Useful text messages shared by interfaces */ +#define INTF_ABOUT_MSG LICENSE_MSG + +#define EXTENSIONS_AUDIO_CSV "3ga", "669", "a52", "aac", "ac3", "adt", "adts", "aif", "aifc", "aiff", \ + "amb", "amr", "aob", "ape", "au", "awb", "caf", "dts", "flac", "it", "kar", \ + "m4a", "m4b", "m4p", "m5p", "mka", "mlp", "mod", "mpa", "mp1", "mp2", "mp3", "mpc", "mpga", "mus", \ + "oga", "ogg", "oma", "opus", "qcp", "ra", "rmi", "s3m", "sid", "spx", "tak", "thd", "tta", \ + "voc", "vqf", "w64", "wav", "wma", "wv", "xa", "xm" + +#define EXTENSIONS_VIDEO_CSV "3g2", "3gp", "3gp2", "3gpp", "amv", "asf", "avi", "bik", "crf", "dav", "divx", "drc", "dv", "dvr-ms" \ + "evo", "f4v", "flv", "gvi", "gxf", "iso", \ + "m1v", "m2v", "m2t", "m2ts", "m4v", "mkv", "mov",\ + "mp2", "mp2v", "mp4", "mp4v", "mpe", "mpeg", "mpeg1", \ + "mpeg2", "mpeg4", "mpg", "mpv2", "mts", "mtv", "mxf", "mxg", "nsv", "nuv", \ + "ogg", "ogm", "ogv", "ogx", "ps", \ + "rec", "rm", "rmvb", "rpl", "thp", "tod", "ts", "tts", "txd", "vob", "vro", \ + "webm", "wm", "wmv", "wtv", "xesc" + +#define EXTENSIONS_AUDIO \ + "*.3ga;" \ + "*.669;" \ + "*.a52;" \ + "*.aac;" \ + "*.ac3;" \ + "*.adt;" \ + "*.adts;" \ + "*.aif;"\ + "*.aifc;"\ + "*.aiff;"\ + "*.amb;" \ + "*.amr;" \ + "*.aob;" \ + "*.ape;" \ + "*.au;" \ + "*.awb;" \ + "*.caf;" \ + "*.dts;" \ + "*.flac;"\ + "*.it;" \ + "*.kar;" \ + "*.m4a;" \ + "*.m4b;" \ + "*.m4p;" \ + "*.m5p;" \ + "*.mid;" \ + "*.mka;" \ + "*.mlp;" \ + "*.mod;" \ + "*.mpa;" \ + "*.mp1;" \ + "*.mp2;" \ + "*.mp3;" \ + "*.mpc;" \ + "*.mpga;" \ + "*.mus;" \ + "*.oga;" \ + "*.ogg;" \ + "*.oma;" \ + "*.opus;" \ + "*.qcp;" \ + "*.ra;" \ + "*.rmi;" \ + "*.s3m;" \ + "*.sid;" \ + "*.spx;" \ + "*.tak;" \ + "*.thd;" \ + "*.tta;" \ + "*.voc;" \ + "*.vqf;" \ + "*.w64;" \ + "*.wav;" \ + "*.wma;" \ + "*.wv;" \ + "*.xa;" \ + "*.xm" + +#define EXTENSIONS_VIDEO "*.3g2;*.3gp;*.3gp2;*.3gpp;*.amv;*.asf;*.avi;*.bik;*.bin;*.crf;*.dav;*.divx;*.drc;*.dv;*.dvr-ms;*.evo;*.f4v;*.flv;*.gvi;*.gxf;*.iso;*.m1v;*.m2v;" \ + "*.m2t;*.m2ts;*.m4v;*.mkv;*.mov;*.mp2;*.mp2v;*.mp4;*.mp4v;*.mpe;*.mpeg;*.mpeg1;" \ + "*.mpeg2;*.mpeg4;*.mpg;*.mpv2;*.mts;*.mtv;*.mxf;*.mxg;*.nsv;*.nuv;" \ + "*.ogg;*.ogm;*.ogv;*.ogx;*.ps;" \ + "*.rec;*.rm;*.rmvb;*.rpl;*.thp;*.tod;*.tp;*.ts;*.tts;*.txd;*.vob;*.vro;*.webm;*.wm;*.wmv;*.wtv;*.xesc" + +#define EXTENSIONS_PLAYLIST "*.asx;*.b4s;*.cue;*.ifo;*.m3u;*.m3u8;*.pls;*.ram;*.rar;*.sdp;*.vlc;*.xspf;*.wax;*.wvx;*.zip;*.conf" + +#define EXTENSIONS_MEDIA EXTENSIONS_VIDEO ";" EXTENSIONS_AUDIO ";" \ + EXTENSIONS_PLAYLIST + +#define EXTENSIONS_SUBTITLE "*.cdg;*.idx;*.srt;" \ + "*.sub;*.utf;*.ass;" \ + "*.ssa;*.aqt;" \ + "*.jss;*.psb;" \ + "*.rt;*.sami;*.smi;*.txt;" \ + "*.smil;*.stl;*.usf;" \ + "*.dks;*.pjs;*.mpl2;*.mks;" \ + "*.vtt;*.tt;*.ttml;*.dfxp;" \ + "*.scc" + +/** \defgroup interaction Interaction + * \ingroup interface + * Interaction between user and modules + * @{ + */ + +/** + * This structure describes a piece of interaction with the user + */ +typedef struct interaction_dialog_t +{ + int i_type; ///< Type identifier + char *psz_title; ///< Title + char *psz_description; ///< Descriptor string + char *psz_default_button; ///< default button title (~OK) + char *psz_alternate_button;///< alternate button title (~NO) + /// other button title (optional,~Cancel) + char *psz_other_button; + + char *psz_returned[1]; ///< returned responses from the user + + vlc_value_t val; ///< value coming from core for dialogue + int i_timeToGo; ///< time (in sec) until shown progress is finished + bool b_cancelled; ///< was the dialogue cancelled ? + + void * p_private; ///< Private interface data + + int i_status; ///< Dialog status; + int i_action; ///< Action to perform; + int i_flags; ///< Misc flags + int i_return; ///< Return status + + vlc_object_t *p_parent; ///< The vlc object that asked + //for interaction + intf_thread_t *p_interface; + vlc_mutex_t *p_lock; +} interaction_dialog_t; + +/** + * Possible flags . Dialog types + */ +#define DIALOG_GOT_ANSWER 0x01 +#define DIALOG_YES_NO_CANCEL 0x02 +#define DIALOG_LOGIN_PW_OK_CANCEL 0x04 +#define DIALOG_PSZ_INPUT_OK_CANCEL 0x08 +#define DIALOG_BLOCKING_ERROR 0x10 +#define DIALOG_NONBLOCKING_ERROR 0x20 +#define DIALOG_USER_PROGRESS 0x80 +#define DIALOG_INTF_PROGRESS 0x100 + +/** Possible return codes */ +enum +{ + DIALOG_OK_YES, + DIALOG_NO, + DIALOG_CANCELLED +}; + +/** Possible status */ +enum +{ + ANSWERED_DIALOG, ///< Got "answer" + DESTROYED_DIALOG, ///< Interface has destroyed it +}; + +/** Possible actions */ +enum +{ + INTERACT_NEW, + INTERACT_UPDATE, + INTERACT_HIDE, + INTERACT_DESTROY +}; + +#define intf_UserStringInput( a, b, c, d ) (VLC_OBJECT(a),b,c,d, VLC_EGENERIC) +#define interaction_Register( t ) (t, VLC_EGENERIC) +#define interaction_Unregister( t ) (t, VLC_EGENERIC) + + +/** @} */ +/** @} */ + +# ifdef __cplusplus +} +# endif +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_interrupt.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_interrupt.h new file mode 100644 index 0000000..ff37573 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_interrupt.h @@ -0,0 +1,238 @@ +/***************************************************************************** + * vlc_interrupt.h: + ***************************************************************************** + * Copyright (C) 2015 Remlab T:mi + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * @file + * This file declares interruptible sleep functions. + */ + +#ifndef VLC_INTERRUPT_H +# define VLC_INTERRUPT_H 1 +# include +# ifndef _WIN32 +# include /* socklen_t */ +# else +# include +# endif + +struct pollfd; +struct iovec; +struct sockaddr; +struct msghdr; + +/** + * @defgroup interrupt Interruptible sleep + * @{ + * @defgroup interrupt_sleep Interruptible sleep functions + * @{ + */ + +/** + * Interruptible variant of vlc_sem_wait(). + * + * Waits on a semaphore like vlc_sem_wait(). If the calling thread has an + * interruption context (as set by vlc_interrupt_set()), and another thread + * invokes vlc_interrupt_raise() on that context, the semaphore is incremented. + * + * @warning The calling thread should be the only thread ever to wait on the + * specified semaphore. Otherwise, interruptions may not be delivered + * accurately (the wrong thread may be woken up). + * + * @note This function is (always) a cancellation point. + * + * @return EINTR if the semaphore was incremented due to an interruption, + * otherwise zero. + */ +VLC_API int vlc_sem_wait_i11e(vlc_sem_t *); + +/** + * Interruptible variant of mwait(). + * + * Waits for a specified timestamp or, if the calling thread has an + * interruption context, an interruption. + * + * @return EINTR if an interruption occurred, otherwise 0 once the timestamp is + * reached. + */ +VLC_API int vlc_mwait_i11e(vlc_tick_t); + +/** + * Interruptible variant of msleep(). + * + * Waits for a specified timeout duration or, if the calling thread has an + * interruption context, an interruption. + * + * @param delay timeout value (in microseconds) + * + * @return EINTR if an interruption occurred, otherwise 0 once the timeout + * expired. + */ +static inline int vlc_msleep_i11e(vlc_tick_t delay) +{ + return vlc_mwait_i11e(mdate() + delay); +} + +/** + * Interruptible variant of poll(). + * + * Waits for file descriptors I/O events, a timeout, a signal or a VLC I/O + * interruption. Except for VLC I/O interruptions, this function behaves + * just like the standard poll(). + * + * @note This function is always a cancellation point (as poll()). + * @see poll() manual page + * + * @param fds table of events to wait for + * @param nfds number of entries in the table + * @param timeout time to wait in milliseconds or -1 for infinite + * + * @return A strictly positive result represent the number of pending events. + * 0 is returned if the time-out is reached without events. + * -1 is returned if a VLC I/O interrupt occurs (and errno is set to EINTR) + * or if an error occurs. + */ +VLC_API int vlc_poll_i11e(struct pollfd *, unsigned, int); + +VLC_API ssize_t vlc_readv_i11e(int fd, struct iovec *, int); +VLC_API ssize_t vlc_writev_i11e(int fd, const struct iovec *, int); +VLC_API ssize_t vlc_read_i11e(int fd, void *, size_t); +VLC_API ssize_t vlc_write_i11e(int fd, const void *, size_t); + +VLC_API ssize_t vlc_recvmsg_i11e(int fd, struct msghdr *, int flags); +VLC_API ssize_t vlc_sendmsg_i11e(int fd, const struct msghdr *, int flags); + +VLC_API ssize_t vlc_recvfrom_i11e(int fd, void *, size_t, int flags, + struct sockaddr *, socklen_t *); +VLC_API ssize_t vlc_sendto_i11e(int fd, const void *, size_t, int flags, + const struct sockaddr *, socklen_t); + +static inline ssize_t vlc_recv_i11e(int fd, void *buf, size_t len, int flags) +{ + return vlc_recvfrom_i11e(fd, buf, len, flags, NULL, NULL); +} + +static inline +ssize_t vlc_send_i11e(int fd, const void *buf, size_t len, int flags) +{ + return vlc_sendto_i11e(fd, buf, len, flags, NULL, 0); +} + +VLC_API int vlc_accept_i11e(int fd, struct sockaddr *, socklen_t *, bool); + +/** + * Registers a custom interrupt handler. + * + * Registers a custom callback as interrupt handler for the calling thread. + * The callback must be unregistered with vlc_interrupt_unregister() before + * thread termination and before any further callback registration. + * + * If the calling thread has no interruption context, this function has no + * effects. + */ +VLC_API void vlc_interrupt_register(void (*cb)(void *), void *opaque); + +VLC_API int vlc_interrupt_unregister(void); + +/** + * @} + * @defgroup interrupt_context Interrupt context signaling and manipulation + * @{ + */ +typedef struct vlc_interrupt vlc_interrupt_t; + +/** + * Creates an interruption context. + */ +VLC_API vlc_interrupt_t *vlc_interrupt_create(void) VLC_USED; + +/** + * Destroys an interrupt context. + */ +VLC_API void vlc_interrupt_destroy(vlc_interrupt_t *); + +/** + * Sets the interruption context for the calling thread. + * @param newctx the interruption context to attach or NULL for none + * @return the previous interruption context or NULL if none + * + * @note This function is not a cancellation point. + * @warning A context can be attached to no more than one thread at a time. + */ +VLC_API vlc_interrupt_t *vlc_interrupt_set(vlc_interrupt_t *); + +/** + * Raises an interruption through a specified context. + * + * This is used to asynchronously wake a thread up while it is waiting on some + * other events (typically I/O events). + * + * @note This function is thread-safe. + * @note This function is not a cancellation point. + */ +VLC_API void vlc_interrupt_raise(vlc_interrupt_t *); + +/** + * Marks the interruption context as "killed". + * + * This is not reversible. + */ +VLC_API void vlc_interrupt_kill(vlc_interrupt_t *); + +/** + * Checks if the interruption context was "killed". + * + * Indicates whether the interruption context of the calling thread (if any) + * was killed with vlc_interrupt_kill(). + */ +VLC_API bool vlc_killed(void) VLC_USED; + +/** + * Enables forwarding of interruption. + * + * If an interruption is raised through the context of the calling thread, + * it will be forwarded to the specified other context. This is used to cross + * thread boundaries. + * + * If the calling thread has no interrupt context, this function does nothing. + * + * @param to context to forward to + */ +VLC_API void vlc_interrupt_forward_start(vlc_interrupt_t *to, + void *data[2]); + +/** + * Undoes vlc_interrupt_forward_start(). + * + * This function must be called after each successful call to + * vlc_interrupt_forward_start() before any other interruptible call is made + * in the same thread. + * + * If an interruption was raised against the context of the calling thread + * (after the previous call to vlc_interrupt_forward_start()), it is dequeued. + * + * If the calling thread has no interrupt context, this function does nothing + * and returns zero. + * + * @return 0 if no interrupt was raised, EINTR if an interrupt was raised + */ +VLC_API int vlc_interrupt_forward_stop(void *const data[2]); + +/** @} @} */ +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_keystore.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_keystore.h new file mode 100644 index 0000000..5588711 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_keystore.h @@ -0,0 +1,317 @@ +/***************************************************************************** + * vlc_keystore.h: + ***************************************************************************** + * Copyright (C) 2015-2016 VLC authors and VideoLAN + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_KEYSTORE_H +# define VLC_KEYSTORE_H + +#include + +typedef struct vlc_keystore vlc_keystore; +typedef struct vlc_keystore_entry vlc_keystore_entry; +typedef struct vlc_credential vlc_credential; + +/* Called from src/libvlc.c */ +int +libvlc_InternalKeystoreInit(libvlc_int_t *p_libvlc); + +/* Called from src/libvlc.c */ +void +libvlc_InternalKeystoreClean(libvlc_int_t *p_libvlc); + +/** + * @defgroup keystore Keystore and credential API + * @{ + * @file + * This file declares vlc keystore API + * @defgroup keystore_public Keystore public API + * @{ + */ + +/** + * List of keys that can be stored via the keystore API + */ +enum vlc_keystore_key { + KEY_PROTOCOL, + KEY_USER, + KEY_SERVER, + KEY_PATH, + KEY_PORT, + KEY_REALM, + KEY_AUTHTYPE, + KEY_MAX, +}; +#define VLC_KEYSTORE_VALUES_INIT(ppsz_values) memset(ppsz_values, 0, sizeof(const char *) * KEY_MAX) + +/** + * Keystore entry returned by vlc_keystore_find() + */ +struct vlc_keystore_entry +{ + /** Set of key/values. Values can be NULL */ + char * ppsz_values[KEY_MAX]; + /** Secret password */ + uint8_t * p_secret; + /** Length of the secret */ + size_t i_secret_len; +}; + +/** + * Create a keystore object + * + * A keystore object is persistent across runtime. It is saved on local + * filesystem via a vlc keystore module (KWallet, SecretService, Apple Keychain + * Service ...). + * + * @note to be released with vlc_keystore_release() + * + * @param p_parent the parent object used to create the keystore object + * + * @return a pointer to the keystore object, or NULL in case of error + */ +VLC_API vlc_keystore * +vlc_keystore_create(vlc_object_t *p_parent); +#define vlc_keystore_create(x) vlc_keystore_create(VLC_OBJECT(x)) + +/** + * Release a keystore object + */ +VLC_API void +vlc_keystore_release(vlc_keystore *p_keystore); + + +/** + * Store a secret associated with a set of key/values + * + * @param ppsz_values set of key/values, see vlc_keystore_key. + * ppsz_values[KEY_PROTOCOL] and ppsz_values[KEY_SERVER] must be valid + * strings + * @param p_secret binary secret or string password + * @param i_secret_len length of p_secret. If it's less than 0, then p_secret + * is assumed to be a '\0' terminated string + * @param psz_label user friendly label + * + * @return VLC_SUCCESS on success, or VLC_EGENERIC on error + */ +VLC_API int +vlc_keystore_store(vlc_keystore *p_keystore, + const char *const ppsz_values[KEY_MAX], + const uint8_t* p_secret, ssize_t i_secret_len, + const char *psz_label); + +/** + * Find all entries that match a set of key/values + * + * @param ppsz_values set of key/values, see vlc_keystore_key, any values can + * be NULL + * @param pp_entries list of found entries. To be released with + * vlc_keystore_release_entries() + * + * @return the number of entries + */ +VLC_API unsigned int +vlc_keystore_find(vlc_keystore *p_keystore, + const char *const ppsz_values[KEY_MAX], + vlc_keystore_entry **pp_entries) VLC_USED; + +/** + * Remove all entries that match a set of key/values + * + * @note only entries added by VLC can be removed + * + * @param ppsz_values set of key/values, see vlc_keystore_key, any values can + * be NULL + * + * @return the number of entries + */ +VLC_API unsigned int +vlc_keystore_remove(vlc_keystore *p_keystore, + const char *const ppsz_values[KEY_MAX]); + +/** + * Release the list of entries returned by vlc_keystore_find() + */ +VLC_API void +vlc_keystore_release_entries(vlc_keystore_entry *p_entries, unsigned int i_count); + +/** + * @} + * @defgroup credential Credential API + * @{ + */ + +/** + * @note init with vlc_credential_init() + */ +struct vlc_credential +{ + /** url to store or to search */ + const vlc_url_t *p_url; + /** http realm or smb domain to search, can be overridden after a call to + * vlc_credential_get() */ + const char *psz_realm; + /** http authtype to search, can be overridden after a call to + * vlc_credential_get() */ + const char *psz_authtype; + /** valid only if vlc_credential_get() returned true */ + const char *psz_username; + /** valid only if vlc_credential_get() returned true */ + const char *psz_password; + + /* internal */ + enum { + GET_FROM_URL, + GET_FROM_OPTION, + GET_FROM_MEMORY_KEYSTORE, + GET_FROM_KEYSTORE, + GET_FROM_DIALOG, + } i_get_order; + + vlc_keystore *p_keystore; + vlc_keystore_entry *p_entries; + unsigned int i_entries_count; + + char *psz_split_domain; + char *psz_var_username; + char *psz_var_password; + + char *psz_dialog_username; + char *psz_dialog_password; + bool b_from_keystore; + bool b_store; +}; + +/** + * Init a credential struct + * + * @note to be cleaned with vlc_credential_clean() + * + * @param psz_url url to store or to search + */ +VLC_API void +vlc_credential_init(vlc_credential *p_credential, const vlc_url_t *p_url); + +/** + * Clean a credential struct + */ +VLC_API void +vlc_credential_clean(vlc_credential *p_credential); + +/** + * Get a username/password couple + * + * This will search for a credential using url, VLC options, the vlc_keystore + * or by asking the user via dialog_Login(). This function can be called + * indefinitely, it will first return the user/password from the url (if any), + * then from VLC options (if any), then from the keystore (if any), and finally + * from the dialog (if any). This function will return true as long as the user + * fill the dialog texts and will return false when the user cancel it. + * + * @param p_parent the parent object (for var, keystore and dialog) + * @param psz_option_username VLC option name for the username + * @param psz_option_password VLC option name for the password + * @param psz_dialog_title dialog title, if NULL, this function won't use the + * keystore or the dialog + * @param psz_dialog_fmt dialog text using format + * + * @return true if vlc_credential.psz_username and vlc_credential.psz_password + * are valid, otherwise this function should not be called again. + */ + +VLC_API bool +vlc_credential_get(vlc_credential *p_credential, vlc_object_t *p_parent, + const char *psz_option_username, + const char *psz_option_password, + const char *psz_dialog_title, + const char *psz_dialog_fmt, ...) VLC_FORMAT(6, 7); +#define vlc_credential_get(a, b, c, d, e, f, ...) \ + vlc_credential_get(a, VLC_OBJECT(b), c, d, e, f, ##__VA_ARGS__) + +/** + * Store the last dialog credential returned by vlc_credential_get() + * + * This function will store the credential in the memory keystore if it's + * valid, or will store in the permanent one if it comes from the dialog and if + * the user asked for it. + * + * @return true if the credential was stored or comes from the keystore, false + * otherwise + */ +VLC_API bool +vlc_credential_store(vlc_credential *p_credential, vlc_object_t *p_parent); +#define vlc_credential_store(a, b) \ + vlc_credential_store(a, VLC_OBJECT(b)) + +/** + * @} + * @defgroup keystore_implementation Implemented by keystore modules + * @{ + */ + +#define VLC_KEYSTORE_NAME "libVLC" + +static inline int +vlc_keystore_entry_set_secret(vlc_keystore_entry *p_entry, + const uint8_t *p_secret, size_t i_secret_len) +{ + p_entry->p_secret = (uint8_t*) malloc(i_secret_len); + if (!p_entry->p_secret) + return VLC_EGENERIC; + memcpy(p_entry->p_secret, p_secret, i_secret_len); + p_entry->i_secret_len = i_secret_len; + return VLC_SUCCESS; +} + +static inline void +vlc_keystore_release_entry(vlc_keystore_entry *p_entry) +{ + for (unsigned int j = 0; j < KEY_MAX; ++j) + { + free(p_entry->ppsz_values[j]); + p_entry->ppsz_values[j] = NULL; + } + free(p_entry->p_secret); + p_entry->p_secret = NULL; +} + +typedef struct vlc_keystore_sys vlc_keystore_sys; +struct vlc_keystore +{ + VLC_COMMON_MEMBERS + module_t *p_module; + vlc_keystore_sys *p_sys; + + /** See vlc_keystore_store() */ + int (*pf_store)(vlc_keystore *p_keystore, + const char *const ppsz_values[KEY_MAX], + const uint8_t *p_secret, + size_t i_secret_len, const char *psz_label); + /** See vlc_keystore_find() */ + unsigned int (*pf_find)(vlc_keystore *p_keystore, + const char *const ppsz_values[KEY_MAX], + vlc_keystore_entry **pp_entries); + + /** See vlc_keystore_remove() */ + unsigned int (*pf_remove)(vlc_keystore *p_keystore, + const char *const ppsz_values[KEY_MAX]); +}; + +/** @} @} */ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_main.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_main.h new file mode 100644 index 0000000..77866f2 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_main.h @@ -0,0 +1,38 @@ +/***************************************************************************** + * vlc_main.h: access to all program variables + * Declaration and extern access to LibVLC instance object. + ***************************************************************************** + * Copyright (C) 1999, 2000, 2001, 2002, 2008 VLC authors and VideoLAN + * + * Authors: Vincent Seguin + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * \file + * This file defines libvlc_int_t internal libvlc instance + */ + +/***************************************************************************** + * libvlc_internal_instance_t + ***************************************************************************** + * This structure is a LibVLC instance, for use by libvlc core and plugins + *****************************************************************************/ +struct libvlc_int_t +{ + VLC_COMMON_MEMBERS +}; + diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_md5.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_md5.h new file mode 100644 index 0000000..e72ff2f --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_md5.h @@ -0,0 +1,59 @@ +/***************************************************************************** + * vlc_md5.h: MD5 hash + ***************************************************************************** + * Copyright © 2004-2011 VLC authors and VideoLAN + * + * Authors: Rémi Denis-Courmont + * Rafaël Carré + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_MD5_H +# define VLC_MD5_H + +/** + * \file + * This file defines functions and structures to compute MD5 digests + */ + +struct md5_s +{ + uint32_t A, B, C, D; /* chaining variables */ + uint32_t nblocks; + uint8_t buf[64]; + int count; +}; + +VLC_API void InitMD5( struct md5_s * ); +VLC_API void AddMD5( struct md5_s *, const void *, size_t ); +VLC_API void EndMD5( struct md5_s * ); + +/** + * Returns a char representation of the md5 hash, as shown by UNIX md5 or + * md5sum tools. + */ +static inline char * psz_md5_hash( struct md5_s *md5_s ) +{ + char *psz = (char*)malloc( 33 ); /* md5 string is 32 bytes + NULL character */ + if( likely(psz) ) + { + for( int i = 0; i < 16; i++ ) + sprintf( &psz[2*i], "%02" PRIx8, md5_s->buf[i] ); + } + return psz; +} + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_media_library.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_media_library.h new file mode 100644 index 0000000..640c719 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_media_library.h @@ -0,0 +1,127 @@ +/***************************************************************************** + * vlc_media_library.h: SQL-based media library + ***************************************************************************** + * Copyright (C) 2008-2010 the VideoLAN Team and AUTHORS + * $Id$ + * + * Authors: Antoine Lejeune + * Jean-Philippe André + * Rémi Duraffort + * Adrien Maglo + * Srikanth Raju + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_MEDIA_LIBRARY_H +# define VLC_MEDIA_LIBRARY_H + +# ifdef __cplusplus +extern "C" { +# endif + +/***************************************************************************** + * ML Enums + *****************************************************************************/ + +#define ML_PERSON_ARTIST "Artist" +#define ML_PERSON_ALBUM_ARTIST "Album Artist" +#define ML_PERSON_ENCODER "Encoder" +#define ML_PERSON_PUBLISHER "Publisher" + + +/** List of Query select types. + * In a query array or variable argument list, each select type is followed + * by an argument (X) of variable type (char* or int, @see ml_element_t). + * These types can be used either in the query list or in the result array. + * Some types are reserved for the result array: + */ +typedef enum +{ + ML_ALBUM = 1, /**< Album Title */ + ML_ALBUM_ID, /**< Album ID */ + ML_ALBUM_COVER, /**< Album Cover art url */ + /* FIXME: Remove ML_ARTIST */ + ML_ARTIST, /**< Artist, interpreted as ML_PEOPLE + && ML_PEOPLE_ROLE = ML_PERSON_ARTIST */ + ML_ARTIST_ID, /**< Artist ID, interpreted as ML_PEOPLE_ID + && ML_PEOPLE_ROLE = ML_PERSON_ARTIST */ + ML_COMMENT, /**< Comment about media */ + ML_COUNT_MEDIA, /**< Number of medias */ + ML_COUNT_ALBUM, /**< Number of albums */ + ML_COUNT_PEOPLE, /**< Number of people */ + ML_COVER, /**< Cover art url */ + ML_DURATION, /**< Duration in ms */ + ML_DISC_NUMBER, /**< Disc number of the track */ + ML_EXTRA, /**< Extra/comment (string) on the media */ + ML_FIRST_PLAYED, /**< First time media was played */ + ML_FILESIZE, /**< Size of the media file */ + ML_GENRE, /**< Genre of the media (if any) */ + ML_ID, /**< Media ID */ + ML_IMPORT_TIME, /**< Date when media was imported */ + ML_LANGUAGE, /**< Language */ + ML_LAST_PLAYED, /**< Last play UNIX timestamp */ + ML_LAST_SKIPPED, /**< Time when media was last skipped */ + ML_ORIGINAL_TITLE, /**< Media original title (if any) */ + ML_PEOPLE, /**< Any People associated with this media */ + ML_PEOPLE_ID, /**< Id of a person */ + ML_PEOPLE_ROLE, /**< Person role */ + ML_PLAYED_COUNT, /**< Media play count */ + ML_PREVIEW, /**< Url of the video preview */ + ML_SKIPPED_COUNT, /**< Number of times skipped */ + ML_SCORE, /**< Computed media score */ + ML_TITLE, /**< Media title */ + ML_TRACK_NUMBER, /**< Media track number (if any) */ + ML_TYPE, /**< Media type. @see ml_type_e */ + ML_URI, /**< Media full URI. */ + ML_VOTE, /**< Media user vote value */ + ML_YEAR, /**< Media publishing year */ + ML_DIRECTORY, /**< Monitored directory */ + ML_MEDIA, /**< Full media descriptor. @see ml_media_t */ + ML_MEDIA_SPARSE, /**< Sparse media. @see ml_media_t */ + ML_MEDIA_EXTRA, /**< Sparse + Extra = Full media */ + + /* Some special elements */ + ML_LIMIT = -1, /**< Limit a query to X results */ + ML_SORT_DESC = -2, /**< Sort a query descending on argument X */ + ML_SORT_ASC = -3, /**< Sort a query ascending on argument X */ + ML_DISTINCT = -4, /**< Add DISTINCT to SELECT statements. */ + ML_END = -42 /**< End of argument list */ +} ml_select_e; + +/** Media types (audio, video, etc...) */ +typedef enum +{ + ML_UNKNOWN = 0, /**< Unknown media type */ + ML_AUDIO = 1 << 0, /**< Audio only media */ + ML_VIDEO = 1 << 1, /**< Video media. May contain audio channels */ + ML_STREAM = 1 << 2, /**< Streamed media = not a local file */ + ML_NODE = 1 << 3, /**< Nodes like simple nodes, directories, playlists, etc */ + ML_REMOVABLE = 1 << 4, /**< Removable media: CD/DVD/Card/... */ +} ml_type_e; + +/** Query result item/list type: integers, strings, medias, timestamps */ +typedef enum { + ML_TYPE_INT, /**< Object is an int */ + ML_TYPE_PSZ, /**< A string char* */ + ML_TYPE_TIME, /**< A timestamp vlc_tick_t */ + ML_TYPE_MEDIA, /**< A pointer to a media ml_media_t* */ +} ml_result_type_e; + +#ifdef __cplusplus +} +#endif /* C++ */ + +#endif /* VLC_MEDIA_LIBRARY_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_memstream.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_memstream.h new file mode 100644 index 0000000..0ed78a7 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_memstream.h @@ -0,0 +1,76 @@ +/***************************************************************************** + * vlc_memstream.h: + ***************************************************************************** + * Copyright (C) 2016 Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_MEMSTREAM_H +# define VLC_MEMSTREAM_H 1 + +# include +# include + +struct vlc_memstream +{ + union + { + FILE *stream; + int error; + }; + char *ptr; + size_t length; +}; + +VLC_API +int vlc_memstream_open(struct vlc_memstream *ms); + +VLC_API +int vlc_memstream_flush(struct vlc_memstream *ms) VLC_USED; + +VLC_API +int vlc_memstream_close(struct vlc_memstream *ms) VLC_USED; + +VLC_API +size_t vlc_memstream_write(struct vlc_memstream *ms, + const void *ptr, size_t len); + +VLC_API +int vlc_memstream_putc(struct vlc_memstream *ms, int c); + +VLC_API +int vlc_memstream_puts(struct vlc_memstream *ms, const char *str); + +VLC_API +int vlc_memstream_vprintf(struct vlc_memstream *ms, const char *fmt, + va_list args); + +VLC_API +int vlc_memstream_printf(struct vlc_memstream *s, const char *fmt, + ...) VLC_FORMAT(2,3); + +# ifdef __GNUC__ +static inline int vlc_memstream_puts_len(struct vlc_memstream *ms, + const char *str, size_t len) +{ + return (vlc_memstream_write(ms, str, len) == len) ? (int)len : EOF; +} +# define vlc_memstream_puts(ms,s) \ + (__builtin_constant_p(__builtin_strlen(s)) ? \ + vlc_memstream_puts_len(ms,s,__builtin_strlen(s)) : \ + vlc_memstream_puts(ms,s)) +# endif +#endif /* VLC_MEMSTREAM_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_messages.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_messages.h new file mode 100644 index 0000000..63f9476 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_messages.h @@ -0,0 +1,108 @@ +/***************************************************************************** + * vlc_messages.h: messages interface + * This library provides basic functions for threads to interact with user + * interface, such as message output. + ***************************************************************************** + * Copyright (C) 1999, 2000, 2001, 2002 VLC authors and VideoLAN + * $Id$ + * + * Authors: Vincent Seguin + * Samuel Hocevar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_MESSAGES_H_ +#define VLC_MESSAGES_H_ + +#include + +/** + * \defgroup messages Logging + * \brief Message logs + * + * Functions for modules to emit log messages. + * + * @{ + * \file + * Logging functions + */ + +/** Message types */ +enum vlc_log_type +{ + VLC_MSG_INFO=0, /**< Important information */ + VLC_MSG_ERR, /**< Error */ + VLC_MSG_WARN, /**< Warning */ + VLC_MSG_DBG, /**< Debug */ +}; + +/** + * Log message + */ +typedef struct vlc_log_t +{ + uintptr_t i_object_id; /**< Emitter (temporarily) unique object ID or 0 */ + const char *psz_object_type; /**< Emitter object type name */ + const char *psz_module; /**< Emitter module (source code) */ + const char *psz_header; /**< Additional header (used by VLM media) */ + const char *file; /**< Source code file name or NULL */ + int line; /**< Source code file line number or -1 */ + const char *func; /**< Source code calling function name or NULL */ + unsigned long tid; /**< Emitter thread ID */ +} vlc_log_t; + +VLC_API void vlc_Log(vlc_object_t *obj, int prio, const char *module, + const char *file, unsigned line, const char *func, + const char *format, ...) VLC_FORMAT(7, 8); +VLC_API void vlc_vaLog(vlc_object_t *obj, int prio, const char *module, + const char *file, unsigned line, const char *func, + const char *format, va_list ap); +#define msg_GenericVa(o, p, fmt, ap) \ + vlc_vaLog(VLC_OBJECT(o), p, vlc_module_name, __FILE__, __LINE__, \ + __func__, fmt, ap) + +#define msg_Generic(o, p, ...) \ + vlc_Log(VLC_OBJECT(o), p, vlc_module_name, __FILE__, __LINE__, \ + __func__, __VA_ARGS__) +#define msg_Info(p_this, ...) \ + msg_Generic(p_this, VLC_MSG_INFO, __VA_ARGS__) +#define msg_Err(p_this, ...) \ + msg_Generic(p_this, VLC_MSG_ERR, __VA_ARGS__) +#define msg_Warn(p_this, ...) \ + msg_Generic(p_this, VLC_MSG_WARN, __VA_ARGS__) +#define msg_Dbg(p_this, ...) \ + msg_Generic(p_this, VLC_MSG_DBG, __VA_ARGS__) + +extern const char vlc_module_name[]; + +VLC_API const char *vlc_strerror(int); +VLC_API const char *vlc_strerror_c(int); + +/** + * Message logging callback signature. + * \param data data pointer as provided to vlc_msg_SetCallback(). + * \param type message type (VLC_MSG_* values from enum vlc_log_type) + * \param item meta information + * \param fmt format string + * \param args format string arguments + */ +typedef void (*vlc_log_cb) (void *data, int type, const vlc_log_t *item, + const char *fmt, va_list args); + +/** + * @} + */ +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_meta.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_meta.h new file mode 100644 index 0000000..d390d0b --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_meta.h @@ -0,0 +1,165 @@ +/***************************************************************************** + * vlc_meta.h: Stream meta-data + ***************************************************************************** + * Copyright (C) 2004 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_META_H +#define VLC_META_H 1 + +/** + * \file + * This file defines functions and structures for stream meta-data in vlc + * + */ + +typedef enum vlc_meta_type_t +{ + vlc_meta_Title, + vlc_meta_Artist, + vlc_meta_Genre, + vlc_meta_Copyright, + vlc_meta_Album, + vlc_meta_TrackNumber, + vlc_meta_Description, + vlc_meta_Rating, + vlc_meta_Date, + vlc_meta_Setting, + vlc_meta_URL, + vlc_meta_Language, + vlc_meta_NowPlaying, + vlc_meta_ESNowPlaying, + vlc_meta_Publisher, + vlc_meta_EncodedBy, + vlc_meta_ArtworkURL, + vlc_meta_TrackID, + vlc_meta_TrackTotal, + vlc_meta_Director, + vlc_meta_Season, + vlc_meta_Episode, + vlc_meta_ShowName, + vlc_meta_Actors, + vlc_meta_AlbumArtist, + vlc_meta_DiscNumber, + vlc_meta_DiscTotal +} vlc_meta_type_t; + +#define VLC_META_TYPE_COUNT 27 + +#define ITEM_PREPARSED 1 +#define ITEM_ART_FETCHED 2 +#define ITEM_ART_NOTFOUND 4 + +/** + * Basic function to deal with meta + */ +struct vlc_meta_t; + +VLC_API vlc_meta_t * vlc_meta_New( void ) VLC_USED; +VLC_API void vlc_meta_Delete( vlc_meta_t *m ); +VLC_API void vlc_meta_Set( vlc_meta_t *p_meta, vlc_meta_type_t meta_type, const char *psz_val ); +VLC_API const char * vlc_meta_Get( const vlc_meta_t *p_meta, vlc_meta_type_t meta_type ); + +VLC_API void vlc_meta_AddExtra( vlc_meta_t *m, const char *psz_name, const char *psz_value ); +VLC_API const char * vlc_meta_GetExtra( const vlc_meta_t *m, const char *psz_name ); +VLC_API unsigned vlc_meta_GetExtraCount( const vlc_meta_t *m ); + +/** + * Allocate a copy of all extra meta names and a table with it. + * Be sure to free both the returned pointers and its name. + */ +VLC_API char ** vlc_meta_CopyExtraNames( const vlc_meta_t *m ) VLC_USED; + +VLC_API void vlc_meta_Merge( vlc_meta_t *dst, const vlc_meta_t *src ); + +VLC_API int vlc_meta_GetStatus( vlc_meta_t *m ); +VLC_API void vlc_meta_SetStatus( vlc_meta_t *m, int status ); + +/** + * Returns a localizes string describing the meta + */ +VLC_API const char * vlc_meta_TypeToLocalizedString( vlc_meta_type_t meta_type ); + +typedef struct meta_export_t +{ + VLC_COMMON_MEMBERS + input_item_t *p_item; + const char *psz_file; +} meta_export_t; + +VLC_API int input_item_WriteMeta(vlc_object_t *, input_item_t *); + +/* Setters for meta. + * Warning: Make sure to use the input_item meta setters (defined in vlc_input_item.h) + * instead of those one. */ +#define vlc_meta_SetTitle( meta, b ) vlc_meta_Set( meta, vlc_meta_Title, b ) +#define vlc_meta_SetArtist( meta, b ) vlc_meta_Set( meta, vlc_meta_Artist, b ) +#define vlc_meta_SetGenre( meta, b ) vlc_meta_Set( meta, vlc_meta_Genre, b ) +#define vlc_meta_SetCopyright( meta, b ) vlc_meta_Set( meta, vlc_meta_Copyright, b ) +#define vlc_meta_SetAlbum( meta, b ) vlc_meta_Set( meta, vlc_meta_Album, b ) +#define vlc_meta_SetTrackNum( meta, b ) vlc_meta_Set( meta, vlc_meta_TrackNumber, b ) +#define vlc_meta_SetDescription( meta, b ) vlc_meta_Set( meta, vlc_meta_Description, b ) +#define vlc_meta_SetRating( meta, b ) vlc_meta_Set( meta, vlc_meta_Rating, b ) +#define vlc_meta_SetDate( meta, b ) vlc_meta_Set( meta, vlc_meta_Date, b ) +#define vlc_meta_SetSetting( meta, b ) vlc_meta_Set( meta, vlc_meta_Setting, b ) +#define vlc_meta_SetURL( meta, b ) vlc_meta_Set( meta, vlc_meta_URL, b ) +#define vlc_meta_SetLanguage( meta, b ) vlc_meta_Set( meta, vlc_meta_Language, b ) +#define vlc_meta_SetNowPlaying( meta, b ) vlc_meta_Set( meta, vlc_meta_NowPlaying, b ) +#define vlc_meta_SetPublisher( meta, b ) vlc_meta_Set( meta, vlc_meta_Publisher, b ) +#define vlc_meta_SetEncodedBy( meta, b ) vlc_meta_Set( meta, vlc_meta_EncodedBy, b ) +#define vlc_meta_SetArtURL( meta, b ) vlc_meta_Set( meta, vlc_meta_ArtworkURL, b ) +#define vlc_meta_SetTrackID( meta, b ) vlc_meta_Set( meta, vlc_meta_TrackID, b ) +#define vlc_meta_SetTrackTotal( meta, b ) vlc_meta_Set( meta, vlc_meta_TrackTotal, b ) +#define vlc_meta_SetDirector( meta, b ) vlc_meta_Set( meta, vlc_meta_Director, b ) +#define vlc_meta_SetSeason( meta, b ) vlc_meta_Set( meta, vlc_meta_Season, b ) +#define vlc_meta_SetEpisode( meta, b ) vlc_meta_Set( meta, vlc_meta_Episode, b ) +#define vlc_meta_SetShowName( meta, b ) vlc_meta_Set( meta, vlc_meta_ShowName, b ) +#define vlc_meta_SetActors( meta, b ) vlc_meta_Set( meta, vlc_meta_Actors, b ) +#define vlc_meta_SetAlbumArtist( meta, b ) vlc_meta_Set( meta, vlc_meta_AlbumArtist, b ) +#define vlc_meta_SetDiscNumber( meta, b ) vlc_meta_Set( meta, vlc_meta_DiscNumber, b ) + +#define VLC_META_TITLE vlc_meta_TypeToLocalizedString( vlc_meta_Title ) +#define VLC_META_ARTIST vlc_meta_TypeToLocalizedString( vlc_meta_Artist ) +#define VLC_META_GENRE vlc_meta_TypeToLocalizedString( vlc_meta_Genre ) +#define VLC_META_COPYRIGHT vlc_meta_TypeToLocalizedString( vlc_meta_Copyright ) +#define VLC_META_ALBUM vlc_meta_TypeToLocalizedString( vlc_meta_Album ) +#define VLC_META_TRACK_NUMBER vlc_meta_TypeToLocalizedString( vlc_meta_TrackNumber ) +#define VLC_META_DESCRIPTION vlc_meta_TypeToLocalizedString( vlc_meta_Description ) +#define VLC_META_RATING vlc_meta_TypeToLocalizedString( vlc_meta_Rating ) +#define VLC_META_DATE vlc_meta_TypeToLocalizedString( vlc_meta_Date ) +#define VLC_META_SETTING vlc_meta_TypeToLocalizedString( vlc_meta_Setting ) +#define VLC_META_URL vlc_meta_TypeToLocalizedString( vlc_meta_URL ) +#define VLC_META_LANGUAGE vlc_meta_TypeToLocalizedString( vlc_meta_Language ) +#define VLC_META_NOW_PLAYING vlc_meta_TypeToLocalizedString( vlc_meta_NowPlaying ) +#define VLC_META_PUBLISHER vlc_meta_TypeToLocalizedString( vlc_meta_Publisher ) +#define VLC_META_ENCODED_BY vlc_meta_TypeToLocalizedString( vlc_meta_EncodedBy ) +#define VLC_META_ART_URL vlc_meta_TypeToLocalizedString( vlc_meta_ArtworkURL ) +#define VLC_META_TRACKID vlc_meta_TypeToLocalizedString( vlc_meta_TrackID ) +#define VLC_META_DIRECTOR vlc_meta_TypeToLocalizedString( vlc_meta_Director ) +#define VLC_META_SEASON vlc_meta_TypeToLocalizedString( vlc_meta_Season ) +#define VLC_META_EPISODE vlc_meta_TypeToLocalizedString( vlc_meta_Episode ) +#define VLC_META_SHOW_NAME vlc_meta_TypeToLocalizedString( vlc_meta_ShowName ) +#define VLC_META_ACTORS vlc_meta_TypeToLocalizedString( vlc_meta_Actors ) +#define VLC_META_ALBUMARTIST vlc_meta_TypeToLocalizedString( vlc_meta_AlbumArtist ) +#define VLC_META_DISCNUMBER vlc_meta_TypeToLocalizedString( vlc_meta_DiscNumber ) + +#define VLC_META_EXTRA_MB_ALBUMID "MB_ALBUMID" + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_meta_fetcher.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_meta_fetcher.h new file mode 100644 index 0000000..e806145 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_meta_fetcher.h @@ -0,0 +1,38 @@ +/***************************************************************************** + * vlc_meta_fetcher.h + ***************************************************************************** + * Copyright (C) 2009 Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_META_FETCHER_H +#define VLC_META_FETCHER_H 1 + +typedef enum meta_fetcher_scope_t +{ + FETCHER_SCOPE_LOCAL = 0x01, + FETCHER_SCOPE_NETWORK = 0x02, + FETCHER_SCOPE_ANY = 0x03 +} meta_fetcher_scope_t; + +typedef struct meta_fetcher_t +{ + VLC_COMMON_MEMBERS + input_item_t *p_item; + meta_fetcher_scope_t e_scope; +} meta_fetcher_t; + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_mime.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_mime.h new file mode 100644 index 0000000..f04fc95 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_mime.h @@ -0,0 +1,31 @@ +/***************************************************************************** + * vlc_mime.h: Mime type recognition + ***************************************************************************** + * Copyright (C) 2012 VLC authors and VideoLAN + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_MIME_H +#define VLC_MIME_H 1 + +/** + * \file + * Mime type recognition helpers. + */ + +VLC_API const char * vlc_mime_Ext2Mime( const char *psz_url ); + +#endif /* _VLC_MIME_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_modules.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_modules.h new file mode 100644 index 0000000..c2d3c26 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_modules.h @@ -0,0 +1,85 @@ +/***************************************************************************** + * vlc_modules.h : Module descriptor and load functions + ***************************************************************************** + * Copyright (C) 2001-2011 VLC authors and VideoLAN + * $Id$ + * + * Authors: Samuel Hocevar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_MODULES_H +#define VLC_MODULES_H 1 + +/** + * \file + * This file defines functions for modules in vlc + */ + +typedef int (*vlc_activate_t)(void *func, va_list args); +typedef void (*vlc_deactivate_t)(void *func, va_list args); + +/***************************************************************************** + * Exported functions. + *****************************************************************************/ + +VLC_API module_t * vlc_module_load( vlc_object_t *obj, const char *cap, const char *name, bool strict, vlc_activate_t probe, ... ) VLC_USED; +#define vlc_module_load(o,c,n,s,...) \ + vlc_module_load(VLC_OBJECT(o),c,n,s,__VA_ARGS__) +VLC_API void vlc_module_unload( vlc_object_t *obj, module_t *, + vlc_deactivate_t deinit, ... ); +#define vlc_module_unload(o,m,d,...) \ + vlc_module_unload(VLC_OBJECT(o),m,d,__VA_ARGS__) + +VLC_API module_t * module_need( vlc_object_t *, const char *, const char *, bool ) VLC_USED; +#define module_need(a,b,c,d) module_need(VLC_OBJECT(a),b,c,d) +VLC_API void module_unneed( vlc_object_t *, module_t * ); +#define module_unneed(a,b) module_unneed(VLC_OBJECT(a),b) +VLC_API bool module_exists(const char *) VLC_USED; +VLC_API module_t * module_find(const char *) VLC_USED; + +int module_start(vlc_object_t *, const module_t *); +#define module_start(o, m) module_start(VLC_OBJECT(o),m) +void module_stop(vlc_object_t *, const module_t *); +#define module_stop(o, m) module_stop(VLC_OBJECT(o),m) + +VLC_API module_config_t * module_config_get( const module_t *, unsigned * ) VLC_USED; +VLC_API void module_config_free( module_config_t * ); + +VLC_API void module_list_free(module_t **); +VLC_API module_t ** module_list_get(size_t *n) VLC_USED; + +VLC_API bool module_provides( const module_t *m, const char *cap ); +VLC_API const char * module_get_object( const module_t *m ) VLC_USED; +VLC_API const char * module_get_name( const module_t *m, bool long_name ) VLC_USED; +#define module_GetLongName( m ) module_get_name( m, true ) +VLC_API const char * module_get_help( const module_t *m ) VLC_USED; +VLC_API const char * module_get_capability( const module_t *m ) VLC_USED; +VLC_API int module_get_score( const module_t *m ) VLC_USED; +VLC_API const char * module_gettext( const module_t *, const char * ) VLC_USED; + +VLC_USED static inline module_t *module_get_main (void) +{ + return module_find ("core"); +} +#define module_get_main(a) module_get_main() + +VLC_USED static inline bool module_is_main( const module_t * p_module ) +{ + return !strcmp( module_get_object( p_module ), "core" ); +} + +#endif /* VLC_MODULES_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_mouse.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_mouse.h new file mode 100644 index 0000000..481c359 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_mouse.h @@ -0,0 +1,148 @@ +/***************************************************************************** + * vlc_mouse.h: mouse related structures and functions + ***************************************************************************** + * Copyright (C) 2009 Laurent Aimar + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef _VLC_MOUSE_H +#define _VLC_MOUSE_H 1 + +/** + * Mouse buttons + */ +enum +{ + MOUSE_BUTTON_LEFT=0, + MOUSE_BUTTON_CENTER, + MOUSE_BUTTON_RIGHT, + MOUSE_BUTTON_WHEEL_UP, + MOUSE_BUTTON_WHEEL_DOWN, + MOUSE_BUTTON_WHEEL_LEFT, + MOUSE_BUTTON_WHEEL_RIGHT, + MOUSE_BUTTON_MAX +}; + +/** + * Mouse state + */ +typedef struct vlc_mouse_t +{ + /* Coordinate */ + int i_x; + int i_y; + /* Mask of pressed button */ + int i_pressed; + /* Is double clicked */ + bool b_double_click; +} vlc_mouse_t; + +static inline void vlc_mouse_Init( vlc_mouse_t *p_mouse ) +{ + p_mouse->i_x = 0; + p_mouse->i_y = 0; + p_mouse->i_pressed = 0; + p_mouse->b_double_click = false; +} + +/* */ +static inline void vlc_mouse_SetPressed( vlc_mouse_t *p_mouse, + int i_button ) +{ + p_mouse->i_pressed |= 1 << i_button; +} +static inline void vlc_mouse_SetReleased( vlc_mouse_t *p_mouse, + int i_button ) +{ + p_mouse->i_pressed &= ~(1 << i_button); +} +static inline void vlc_mouse_SetPosition( vlc_mouse_t *p_mouse, + int i_x, int i_y ) +{ + p_mouse->i_x = i_x; + p_mouse->i_y = i_y; +} + +/* */ +static inline bool vlc_mouse_IsPressed( const vlc_mouse_t *p_mouse, + int i_button ) +{ + return ( p_mouse->i_pressed & (1 << i_button) ) != 0; +} +static inline bool vlc_mouse_IsLeftPressed( const vlc_mouse_t *p_mouse ) +{ + return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_LEFT ); +} +static inline bool vlc_mouse_IsCenterPressed( const vlc_mouse_t *p_mouse ) +{ + return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_CENTER ); +} +static inline bool vlc_mouse_IsRightPressed( const vlc_mouse_t *p_mouse ) +{ + return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_RIGHT ); +} +static inline bool vlc_mouse_IsWheelUpPressed( const vlc_mouse_t *p_mouse ) +{ + return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_WHEEL_UP ); +} +static inline bool vlc_mouse_IsWheelDownPressed( const vlc_mouse_t *p_mouse ) +{ + return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_WHEEL_DOWN ); +} +static inline void vlc_mouse_GetMotion( int *pi_x, int *pi_y, + const vlc_mouse_t *p_old, + const vlc_mouse_t *p_new ) +{ + *pi_x = p_new->i_x - p_old->i_x; + *pi_y = p_new->i_y - p_old->i_y; +} + +/* */ +static inline bool vlc_mouse_HasChanged( const vlc_mouse_t *p_old, + const vlc_mouse_t *p_new ) +{ + return p_old->i_x != p_new->i_x || p_old->i_y != p_new->i_y || + p_old->i_pressed != p_new->i_pressed; +} +static inline bool vlc_mouse_HasMoved( const vlc_mouse_t *p_old, + const vlc_mouse_t *p_new ) +{ + return p_old->i_x != p_new->i_x || p_old->i_y != p_new->i_y; +} +static inline bool vlc_mouse_HasButton( const vlc_mouse_t *p_old, + const vlc_mouse_t *p_new ) +{ + return p_old->i_pressed != p_new->i_pressed; +} +static inline bool vlc_mouse_HasPressed( const vlc_mouse_t *p_old, + const vlc_mouse_t *p_new, + int i_button ) +{ + const int i_mask = 1 << i_button; + return (p_old->i_pressed & i_mask) == 0 && (p_new->i_pressed & i_mask); +} +static inline bool vlc_mouse_HasReleased( const vlc_mouse_t *p_old, + const vlc_mouse_t *p_new, + int i_button ) +{ + const int i_mask = 1 << i_button; + return (p_old->i_pressed & i_mask) && (p_new->i_pressed & i_mask) == 0; +} +#endif /* _VLC_MOUSE_H */ + diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_mtime.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_mtime.h new file mode 100644 index 0000000..902e8eb --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_mtime.h @@ -0,0 +1,78 @@ +/***************************************************************************** + * vlc_mtime.h: high resolution time management functions + ***************************************************************************** + * This header provides portable high precision time management functions, + * which should be the only ones used in other segments of the program, since + * functions like gettimeofday() and ftime() are not always supported. + * Most functions are declared as inline or as macros since they are only + * interfaces to system calls and have to be called frequently. + * 'm' stands for 'micro', since maximum resolution is the microsecond. + * Functions prototyped are implemented in interface/mtime.c. + ***************************************************************************** + * Copyright (C) 1996, 1997, 1998, 1999, 2000 VLC authors and VideoLAN + * $Id$ + * + * Authors: Vincent Seguin + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef __VLC_MTIME_H +# define __VLC_MTIME_H 1 + +/***************************************************************************** + * LAST_MDATE: date which will never happen + ***************************************************************************** + * This date can be used as a 'never' date, to mark missing events in a function + * supposed to return a date, such as nothing to display in a function + * returning the date of the first image to be displayed. It can be used in + * comparaison with other values: all existing dates will be earlier. + *****************************************************************************/ +#define LAST_MDATE ((vlc_tick_t)((uint64_t)(-1)/2)) + +/***************************************************************************** + * MSTRTIME_MAX_SIZE: maximum possible size of mstrtime + ***************************************************************************** + * This values is the maximal possible size of the string returned by the + * mstrtime() function, including '-' and the final '\0'. It should be used to + * allocate the buffer. + *****************************************************************************/ +#define MSTRTIME_MAX_SIZE 22 + +/***************************************************************************** + * Prototypes + *****************************************************************************/ +VLC_API char * secstotimestr( char *psz_buffer, int32_t secs ); + +/***************************************************************************** + * date_t: date incrementation without long-term rounding errors + *****************************************************************************/ +struct date_t +{ + vlc_tick_t date; + uint32_t i_divider_num; + uint32_t i_divider_den; + uint32_t i_remainder; +}; + +VLC_API void date_Init( date_t *, uint32_t, uint32_t ); +VLC_API void date_Change( date_t *, uint32_t, uint32_t ); +VLC_API void date_Set( date_t *, vlc_tick_t ); +VLC_API vlc_tick_t date_Get( const date_t * ); +VLC_API void date_Move( date_t *, vlc_tick_t ); +VLC_API vlc_tick_t date_Increment( date_t *, uint32_t ); +VLC_API vlc_tick_t date_Decrement( date_t *, uint32_t ); +VLC_API uint64_t NTPtime64( void ); +#endif /* !__VLC_MTIME_ */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_network.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_network.h new file mode 100644 index 0000000..e39ffd0 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_network.h @@ -0,0 +1,315 @@ +/***************************************************************************** + * vlc_network.h: interface to communicate with network plug-ins + ***************************************************************************** + * Copyright (C) 2002-2005 VLC authors and VideoLAN + * Copyright © 2006-2007 Rémi Denis-Courmont + * $Id$ + * + * Authors: Christophe Massiot + * Laurent Aimar + * Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_NETWORK_H +# define VLC_NETWORK_H + +/** + * \ingroup os + * \defgroup net Networking + * @{ + * \file + * Definitions for sockets and low-level networking + * \defgroup sockets Internet sockets + * @{ + */ + +#include +#include + +#if defined( _WIN32 ) +# define _NO_OLDNAMES 1 +# include +# include +# define net_errno (WSAGetLastError()) +# define net_Close(fd) ((void)closesocket((SOCKET)fd)) +# ifndef IPV6_V6ONLY +# define IPV6_V6ONLY 27 +# endif +#else +# include +# include +# include +# define net_errno errno +# define net_Close(fd) ((void)vlc_close(fd)) +#endif + +#ifndef MSG_NOSIGNAL +# define MSG_NOSIGNAL 0 +#endif + +/** + * Creates a socket file descriptor. + * + * This function creates a socket, similar to the standard socket() function. + * However, the new file descriptor has the close-on-exec flag set atomically, + * so as to avoid leaking the descriptor to child processes. + * + * The non-blocking flag can also optionally be set. + * + * @param pf protocol family + * @param type socket type + * @param proto network protocol + * @param nonblock true to create a non-blocking socket + * @return a new file descriptor or -1 on error + */ +VLC_API int vlc_socket(int pf, int type, int proto, bool nonblock) VLC_USED; + +/** + * Creates a pair of socket file descriptors. + * + * This function creates a pair of sockets that are mutually connected, + * much like the standard socketpair() function. However, the new file + * descriptors have the close-on-exec flag set atomically. + * See also vlc_socket(). + * + * @param pf protocol family + * @param type socket type + * @param proto network protocol + * @param nonblock true to create non-blocking sockets + * @retval 0 on success + * @retval -1 on failure + */ +VLC_API int vlc_socketpair(int pf, int type, int proto, int fds[2], + bool nonblock); + +struct sockaddr; + +/** + * Accepts an inbound connection request on a listening socket. + * + * This function creates a connected socket from a listening socket, much like + * the standard accept() function. However, the new file descriptor has the + * close-on-exec flag set atomically. See also vlc_socket(). + * + * @param lfd listening socket file descriptor + * @param addr pointer to the peer address or NULL [OUT] + * @param alen pointer to the length of the peer address or NULL [OUT] + * @param nonblock whether to put the new socket in non-blocking mode + * @return a new file descriptor or -1 on error + */ +VLC_API int vlc_accept(int lfd, struct sockaddr *addr, socklen_t *alen, + bool nonblock) VLC_USED; + +# ifdef __cplusplus +extern "C" { +# endif + +/* Portable networking layer communication */ +int net_Socket (vlc_object_t *obj, int family, int socktype, int proto); + +VLC_API int net_Connect(vlc_object_t *p_this, const char *psz_host, int i_port, int socktype, int protocol); +#define net_Connect(a, b, c, d, e) net_Connect(VLC_OBJECT(a), b, c, d, e) + +VLC_API int * net_Listen(vlc_object_t *p_this, const char *psz_host, int i_port, int socktype, int protocol); + +#define net_ListenTCP(a, b, c) net_Listen(VLC_OBJECT(a), b, c, \ + SOCK_STREAM, IPPROTO_TCP) + +static inline int net_ConnectTCP (vlc_object_t *obj, const char *host, int port) +{ + return net_Connect (obj, host, port, SOCK_STREAM, IPPROTO_TCP); +} +#define net_ConnectTCP(a, b, c) net_ConnectTCP(VLC_OBJECT(a), b, c) + +VLC_API int net_AcceptSingle(vlc_object_t *obj, int lfd); + +VLC_API int net_Accept( vlc_object_t *, int * ); +#define net_Accept(a, b) \ + net_Accept(VLC_OBJECT(a), b) + +VLC_API int net_ConnectDgram( vlc_object_t *p_this, const char *psz_host, int i_port, int hlim, int proto ); +#define net_ConnectDgram(a, b, c, d, e ) \ + net_ConnectDgram(VLC_OBJECT(a), b, c, d, e) + +static inline int net_ConnectUDP (vlc_object_t *obj, const char *host, int port, int hlim) +{ + return net_ConnectDgram (obj, host, port, hlim, IPPROTO_UDP); +} + +VLC_API int net_OpenDgram( vlc_object_t *p_this, const char *psz_bind, int i_bind, const char *psz_server, int i_server, int proto ); +#define net_OpenDgram( a, b, c, d, e, g ) \ + net_OpenDgram(VLC_OBJECT(a), b, c, d, e, g) + +static inline int net_ListenUDP1 (vlc_object_t *obj, const char *host, int port) +{ + return net_OpenDgram (obj, host, port, NULL, 0, IPPROTO_UDP); +} + +VLC_API void net_ListenClose( int *fd ); + +int net_Subscribe (vlc_object_t *obj, int fd, const struct sockaddr *addr, + socklen_t addrlen); + +VLC_API int net_SetCSCov( int fd, int sendcov, int recvcov ); + +VLC_API ssize_t net_Read( vlc_object_t *p_this, int fd, void *p_data, size_t i_data ); +#define net_Read(a,b,c,d) net_Read(VLC_OBJECT(a),b,c,d) +VLC_API ssize_t net_Write( vlc_object_t *p_this, int fd, const void *p_data, size_t i_data ); +#define net_Write(a,b,c,d) net_Write(VLC_OBJECT(a),b,c,d) +VLC_API char * net_Gets( vlc_object_t *p_this, int fd ); +#define net_Gets(a,b) net_Gets(VLC_OBJECT(a),b) + + +VLC_API ssize_t net_Printf( vlc_object_t *p_this, int fd, const char *psz_fmt, ... ) VLC_FORMAT( 3, 4 ); +#define net_Printf(o,fd,...) net_Printf(VLC_OBJECT(o),fd, __VA_ARGS__) +VLC_API ssize_t net_vaPrintf( vlc_object_t *p_this, int fd, const char *psz_fmt, va_list args ); +#define net_vaPrintf(a,b,c,d) net_vaPrintf(VLC_OBJECT(a),b,c,d) + +VLC_API int vlc_close(int); + +/** @} */ + +#ifdef _WIN32 +static inline int vlc_getsockopt(int s, int level, int name, + void *val, socklen_t *len) +{ + return getsockopt(s, level, name, (char *)val, len); +} +#define getsockopt vlc_getsockopt + +static inline int vlc_setsockopt(int s, int level, int name, + const void *val, socklen_t len) +{ + return setsockopt(s, level, name, (const char *)val, len); +} +#define setsockopt vlc_setsockopt +#endif + +/* Portable network names/addresses resolution layer */ + +#define NI_MAXNUMERICHOST 64 + +#ifndef AI_NUMERICSERV +# define AI_NUMERICSERV 0 +#endif +#ifndef AI_IDN +# define AI_IDN 0 /* GNU/libc extension */ +#endif + +#ifdef _WIN32 +# if !defined(WINAPI_FAMILY) || WINAPI_FAMILY != WINAPI_FAMILY_APP +# undef gai_strerror +# define gai_strerror gai_strerrorA +# endif +#endif + +VLC_API int vlc_getnameinfo( const struct sockaddr *, int, char *, int, int *, int ); +VLC_API int vlc_getaddrinfo (const char *, unsigned, + const struct addrinfo *, struct addrinfo **); +VLC_API int vlc_getaddrinfo_i11e(const char *, unsigned, + const struct addrinfo *, struct addrinfo **); + +static inline bool +net_SockAddrIsMulticast (const struct sockaddr *addr, socklen_t len) +{ + switch (addr->sa_family) + { +#ifdef IN_MULTICAST + case AF_INET: + { + const struct sockaddr_in *v4 = (const struct sockaddr_in *)addr; + if ((size_t)len < sizeof (*v4)) + return false; + return IN_MULTICAST (ntohl (v4->sin_addr.s_addr)) != 0; + } +#endif + +#ifdef IN6_IS_ADDR_MULTICAST + case AF_INET6: + { + const struct sockaddr_in6 *v6 = (const struct sockaddr_in6 *)addr; + if ((size_t)len < sizeof (*v6)) + return false; + return IN6_IS_ADDR_MULTICAST (&v6->sin6_addr) != 0; + } +#endif + } + + return false; +} + + +static inline int net_GetSockAddress( int fd, char *address, int *port ) +{ + struct sockaddr_storage addr; + socklen_t addrlen = sizeof( addr ); + + return getsockname( fd, (struct sockaddr *)&addr, &addrlen ) + || vlc_getnameinfo( (struct sockaddr *)&addr, addrlen, address, + NI_MAXNUMERICHOST, port, NI_NUMERICHOST ) + ? VLC_EGENERIC : 0; +} + +static inline int net_GetPeerAddress( int fd, char *address, int *port ) +{ + struct sockaddr_storage addr; + socklen_t addrlen = sizeof( addr ); + + return getpeername( fd, (struct sockaddr *)&addr, &addrlen ) + || vlc_getnameinfo( (struct sockaddr *)&addr, addrlen, address, + NI_MAXNUMERICHOST, port, NI_NUMERICHOST ) + ? VLC_EGENERIC : 0; +} + +static inline uint16_t net_GetPort (const struct sockaddr *addr) +{ + switch (addr->sa_family) + { +#ifdef AF_INET6 + case AF_INET6: + return ((const struct sockaddr_in6 *)addr)->sin6_port; +#endif + case AF_INET: + return ((const struct sockaddr_in *)addr)->sin_port; + } + return 0; +} + +static inline void net_SetPort (struct sockaddr *addr, uint16_t port) +{ + switch (addr->sa_family) + { +#ifdef AF_INET6 + case AF_INET6: + ((struct sockaddr_in6 *)addr)->sin6_port = port; + break; +#endif + case AF_INET: + ((struct sockaddr_in *)addr)->sin_port = port; + break; + } +} + +VLC_API char *vlc_getProxyUrl(const char *); + +# ifdef __cplusplus +} +# endif + +/** @} */ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_objects.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_objects.h new file mode 100644 index 0000000..4a28141 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_objects.h @@ -0,0 +1,75 @@ +/***************************************************************************** + * vlc_objects.h: vlc_object_t definition and manipulation methods + ***************************************************************************** + * Copyright (C) 2002-2008 VLC authors and VideoLAN + * $Id$ + * + * Authors: Samuel Hocevar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +/** + * \defgroup vlc_object VLC objects + * @{ + * \file + * Common VLC object defintions + */ + +/* Object flags */ +#define OBJECT_FLAGS_QUIET 0x0002 +#define OBJECT_FLAGS_NOINTERACT 0x0004 +#define OBJECT_FLAGS_INSECURE 0x1000 /* VLC 3.0 only, will be removed */ + +/***************************************************************************** + * The vlc_object_t type. Yes, it's that simple :-) + *****************************************************************************/ +/** The main vlc_object_t structure */ +struct vlc_object_t +{ + VLC_COMMON_MEMBERS +}; + +/***************************************************************************** + * Prototypes + *****************************************************************************/ +VLC_API void *vlc_object_create( vlc_object_t *, size_t ) VLC_MALLOC VLC_USED; +VLC_API vlc_object_t *vlc_object_find_name( vlc_object_t *, const char * ) VLC_USED VLC_DEPRECATED; +VLC_API void * vlc_object_hold( vlc_object_t * ); +VLC_API void vlc_object_release( vlc_object_t * ); +VLC_API vlc_list_t *vlc_list_children( vlc_object_t * ) VLC_USED; +VLC_API void vlc_list_release( vlc_list_t * ); +VLC_API char *vlc_object_get_name( const vlc_object_t * ) VLC_USED; +#define vlc_object_get_name(o) vlc_object_get_name(VLC_OBJECT(o)) + +#define vlc_object_create(a,b) vlc_object_create( VLC_OBJECT(a), b ) + +#define vlc_object_find_name(a,b) \ + vlc_object_find_name( VLC_OBJECT(a),b) + +#define vlc_object_hold(a) \ + vlc_object_hold( VLC_OBJECT(a) ) + +#define vlc_object_release(a) \ + vlc_object_release( VLC_OBJECT(a) ) + +#define vlc_list_children(a) \ + vlc_list_children( VLC_OBJECT(a) ) + +VLC_API VLC_MALLOC void *vlc_obj_malloc(vlc_object_t *, size_t); +VLC_API VLC_MALLOC void *vlc_obj_calloc(vlc_object_t *, size_t, size_t); +VLC_API void vlc_obj_free(vlc_object_t *, void *); + +/** @} */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_opengl.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_opengl.h new file mode 100644 index 0000000..fdebfeb --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_opengl.h @@ -0,0 +1,121 @@ +/***************************************************************************** + * vlc_opengl.h: VLC GL API + ***************************************************************************** + * Copyright (C) 2009 Laurent Aimar + * Copyright (C) 2011 Rémi Denis-Courmont + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_GL_H +#define VLC_GL_H 1 + +/** + * \file + * This file defines GL structures and functions. + */ + +struct vout_window_t; +struct vout_window_cfg_t; + +/** + * A VLC GL context (and its underlying surface) + */ +typedef struct vlc_gl_t vlc_gl_t; + +struct vlc_gl_t +{ + VLC_COMMON_MEMBERS + + struct vout_window_t *surface; + module_t *module; + void *sys; + + int (*makeCurrent)(vlc_gl_t *); + void (*releaseCurrent)(vlc_gl_t *); + void (*resize)(vlc_gl_t *, unsigned, unsigned); + void (*swap)(vlc_gl_t *); + void*(*getProcAddress)(vlc_gl_t *, const char *); + + enum { + VLC_GL_EXT_DEFAULT, + VLC_GL_EXT_EGL, + VLC_GL_EXT_WGL, + } ext; + + union { + /* if ext == VLC_GL_EXT_EGL */ + struct { + /* call eglQueryString() with current display */ + const char *(*queryString)(vlc_gl_t *, int32_t name); + /* call eglCreateImageKHR() with current display and context, can + * be NULL */ + void *(*createImageKHR)(vlc_gl_t *, unsigned target, void *buffer, + const int32_t *attrib_list); + /* call eglDestroyImageKHR() with current display, can be NULL */ + bool (*destroyImageKHR)(vlc_gl_t *, void *image); + } egl; + /* if ext == VLC_GL_EXT_WGL */ + struct + { + const char *(*getExtensionsString)(vlc_gl_t *); + } wgl; + }; +}; + +enum { + VLC_OPENGL, + VLC_OPENGL_ES2, +}; + +VLC_API vlc_gl_t *vlc_gl_Create(struct vout_window_t *, unsigned, const char *) VLC_USED; +VLC_API void vlc_gl_Release(vlc_gl_t *); +VLC_API void vlc_gl_Hold(vlc_gl_t *); + +static inline int vlc_gl_MakeCurrent(vlc_gl_t *gl) +{ + return gl->makeCurrent(gl); +} + +static inline void vlc_gl_ReleaseCurrent(vlc_gl_t *gl) +{ + gl->releaseCurrent(gl); +} + +static inline void vlc_gl_Resize(vlc_gl_t *gl, unsigned w, unsigned h) +{ + if (gl->resize != NULL) + gl->resize(gl, w, h); +} + +static inline void vlc_gl_Swap(vlc_gl_t *gl) +{ + gl->swap(gl); +} + +static inline void *vlc_gl_GetProcAddress(vlc_gl_t *gl, const char *name) +{ + return (gl->getProcAddress != NULL) ? gl->getProcAddress(gl, name) : NULL; +} + +VLC_API vlc_gl_t *vlc_gl_surface_Create(vlc_object_t *, + const struct vout_window_cfg_t *, + struct vout_window_t **) VLC_USED; +VLC_API bool vlc_gl_surface_CheckSize(vlc_gl_t *, unsigned *w, unsigned *h); +VLC_API void vlc_gl_surface_Destroy(vlc_gl_t *); + +#endif /* VLC_GL_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_picture.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_picture.h new file mode 100644 index 0000000..5d849f1 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_picture.h @@ -0,0 +1,259 @@ +/***************************************************************************** + * vlc_picture.h: picture definitions + ***************************************************************************** + * Copyright (C) 1999 - 2009 VLC authors and VideoLAN + * $Id$ + * + * Authors: Vincent Seguin + * Samuel Hocevar + * Olivier Aubert + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_PICTURE_H +#define VLC_PICTURE_H 1 + +/** + * \file + * This file defines picture structures and functions in vlc + */ + +#include + +/** Description of a planar graphic field */ +typedef struct plane_t +{ + uint8_t *p_pixels; /**< Start of the plane's data */ + + /* Variables used for fast memcpy operations */ + int i_lines; /**< Number of lines, including margins */ + int i_pitch; /**< Number of bytes in a line, including margins */ + + /** Size of a macropixel, defaults to 1 */ + int i_pixel_pitch; + + /* Variables used for pictures with margins */ + int i_visible_lines; /**< How many visible lines are there ? */ + int i_visible_pitch; /**< How many visible pixels are there ? */ + +} plane_t; + +/** + * Maximum number of plane for a picture + */ +#define PICTURE_PLANE_MAX (VOUT_MAX_PLANES) + +typedef struct picture_context_t +{ + void (*destroy)(struct picture_context_t *); + struct picture_context_t *(*copy)(struct picture_context_t *); +} picture_context_t; + +/** + * Video picture + */ +struct picture_t +{ + /** + * The properties of the picture + */ + video_frame_format_t format; + + plane_t p[PICTURE_PLANE_MAX]; /**< description of the planes */ + int i_planes; /**< number of allocated planes */ + + /** \name Picture management properties + * These properties can be modified using the video output thread API, + * but should never be written directly */ + /**@{*/ + vlc_tick_t date; /**< display date */ + bool b_force; + /**@}*/ + + /** \name Picture dynamic properties + * Those properties can be changed by the decoder + * @{ + */ + bool b_progressive; /**< is it a progressive frame ? */ + bool b_top_field_first; /**< which field is first */ + unsigned int i_nb_fields; /**< # of displayed fields */ + picture_context_t *context; /**< video format-specific data pointer */ + /**@}*/ + + /** Private data - the video output plugin might want to put stuff here to + * keep track of the picture */ + picture_sys_t * p_sys; + + /** Next picture in a FIFO a pictures */ + struct picture_t *p_next; +}; + +/** + * This function will create a new picture. + * The picture created will implement a default release management compatible + * with picture_Hold and picture_Release. This default management will release + * p_sys, gc.p_sys fields if non NULL. + */ +VLC_API picture_t * picture_New( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_sar_num, int i_sar_den ) VLC_USED; + +/** + * This function will create a new picture using the given format. + * + * When possible, it is preferred to use this function over picture_New + * as more information about the format is kept. + */ +VLC_API picture_t * picture_NewFromFormat( const video_format_t *p_fmt ) VLC_USED; + +/** + * Resource for a picture. + */ +typedef struct +{ + picture_sys_t *p_sys; + void (*pf_destroy)(picture_t *); + + /* Plane resources + * XXX all fields MUST be set to the right value. + */ + struct + { + uint8_t *p_pixels; /**< Start of the plane's data */ + int i_lines; /**< Number of lines, including margins */ + int i_pitch; /**< Number of bytes in a line, including margins */ + } p[PICTURE_PLANE_MAX]; + +} picture_resource_t; + +/** + * This function will create a new picture using the provided resource. + * + * If the resource is NULL then a plain picture_NewFromFormat is returned. + */ +VLC_API picture_t * picture_NewFromResource( const video_format_t *, const picture_resource_t * ) VLC_USED; + +/** + * This function will increase the picture reference count. + * It will not have any effect on picture obtained from vout + * + * It returns the given picture for convenience. + */ +VLC_API picture_t *picture_Hold( picture_t *p_picture ); + +/** + * This function will release a picture. + * It will not have any effect on picture obtained from vout + */ +VLC_API void picture_Release( picture_t *p_picture ); + +/** + * This function will copy all picture dynamic properties. + */ +VLC_API void picture_CopyProperties( picture_t *p_dst, const picture_t *p_src ); + +/** + * This function will reset a picture information (properties and quantizers). + * It is sometimes useful for reusing pictures (like from a pool). + */ +VLC_API void picture_Reset( picture_t * ); + +/** + * This function will copy the picture pixels. + * You can safely copy between pictures that do not have the same size, + * only the compatible(smaller) part will be copied. + */ +VLC_API void picture_CopyPixels( picture_t *p_dst, const picture_t *p_src ); +VLC_API void plane_CopyPixels( plane_t *p_dst, const plane_t *p_src ); + +/** + * This function will copy both picture dynamic properties and pixels. + * You have to notice that sometime a simple picture_Hold may do what + * you want without the copy overhead. + * Provided for convenience. + * + * \param p_dst pointer to the destination picture. + * \param p_src pointer to the source picture. + */ +VLC_API void picture_Copy( picture_t *p_dst, const picture_t *p_src ); + +/** + * Perform a shallow picture copy + * + * This function makes a shallow copy of an existing picture. The same planes + * and resources will be used, and the cloned picture reference count will be + * incremented. + * + * \return A clone picture on success, NULL on error. + */ +VLC_API picture_t *picture_Clone(picture_t *pic); + +/** + * This function will export a picture to an encoded bitstream. + * + * pp_image will contain the encoded bitstream in psz_format format. + * + * p_fmt can be NULL otherwise it will be set with the format used for the + * picture before encoding. + * + * i_override_width/height allow to override the width and/or the height of the + * picture to be encoded: + * - if strictly lower than 0, the original dimension will be used. + * - if equal to 0, it will be deduced from the other dimension which must be + * different to 0. + * - if strictly higher than 0, it will override the dimension. + * If at most one of them is > 0 then the picture aspect ratio will be kept. + */ +VLC_API int picture_Export( vlc_object_t *p_obj, block_t **pp_image, video_format_t *p_fmt, picture_t *p_picture, vlc_fourcc_t i_format, int i_override_width, int i_override_height ); + +/** + * This function will setup all fields of a picture_t without allocating any + * memory. + * XXX The memory must already be initialized. + * It does not need to be released. + * + * It will return VLC_EGENERIC if the core does not understand the requested + * format. + * + * It can be useful to get the properties of planes. + */ +VLC_API int picture_Setup( picture_t *, const video_format_t * ); + + +/***************************************************************************** + * Shortcuts to access image components + *****************************************************************************/ + +/* Plane indices */ +enum +{ + Y_PLANE = 0, + U_PLANE = 1, + V_PLANE = 2, + A_PLANE = 3, +}; + +/* Shortcuts */ +#define Y_PIXELS p[Y_PLANE].p_pixels +#define Y_PITCH p[Y_PLANE].i_pitch +#define U_PIXELS p[U_PLANE].p_pixels +#define U_PITCH p[U_PLANE].i_pitch +#define V_PIXELS p[V_PLANE].p_pixels +#define V_PITCH p[V_PLANE].i_pitch +#define A_PIXELS p[A_PLANE].p_pixels +#define A_PITCH p[A_PLANE].i_pitch + +/**@}*/ + +#endif /* VLC_PICTURE_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_picture_fifo.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_picture_fifo.h new file mode 100644 index 0000000..2f3a38c --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_picture_fifo.h @@ -0,0 +1,89 @@ +/***************************************************************************** + * vlc_picture_fifo.h: picture fifo definitions + ***************************************************************************** + * Copyright (C) 2009 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_PICTURE_FIFO_H +#define VLC_PICTURE_FIFO_H 1 + +/** + * \file + * This file defines picture fifo structures and functions in vlc + */ + +#include + +/** + * Picture fifo handle + * + * It is thread safe (push/pop). + */ +typedef struct picture_fifo_t picture_fifo_t; + +/** + * It creates an empty picture_fifo_t. + */ +VLC_API picture_fifo_t * picture_fifo_New( void ) VLC_USED; + +/** + * It destroys a fifo created by picture_fifo_New. + * + * All pictures inside the fifo will be released by picture_Release. + */ +VLC_API void picture_fifo_Delete( picture_fifo_t * ); + +/** + * It retreives a picture_t from the fifo. + * + * If the fifo is empty, it return NULL without waiting. + */ +VLC_API picture_t * picture_fifo_Pop( picture_fifo_t * ) VLC_USED; + +/** + * It returns the first picture_t pointer from the fifo but does not + * remove it. The picture returned has been hold for you so you + * must call picture_Release on it. + * + * If the fifo is empty, it return NULL without waiting. + */ +VLC_API picture_t * picture_fifo_Peek( picture_fifo_t * ) VLC_USED; + +/** + * It saves a picture_t into the fifo. + */ +VLC_API void picture_fifo_Push( picture_fifo_t *, picture_t * ); + +/** + * It release all picture inside the fifo that have a lower or equal date + * if flush_before or higher or equal to if not flush_before than the given one. + * + * All pictures inside the fifo will be released by picture_Release. + */ +VLC_API void picture_fifo_Flush( picture_fifo_t *, vlc_tick_t date, bool flush_before ); + +/** + * It applies a delta on all the picture timestamp. + */ +VLC_API void picture_fifo_OffsetDate( picture_fifo_t *, vlc_tick_t delta ); + + +#endif /* VLC_PICTURE_FIFO_H */ + diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_picture_pool.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_picture_pool.h new file mode 100644 index 0000000..8b04370 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_picture_pool.h @@ -0,0 +1,189 @@ +/***************************************************************************** + * vlc_picture_pool.h: picture pool definitions + ***************************************************************************** + * Copyright (C) 2009 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_PICTURE_POOL_H +#define VLC_PICTURE_POOL_H 1 + +/** + * \file + * This file defines picture pool structures and functions in vlc + */ + +#include + +/** + * Picture pool handle + */ +typedef struct picture_pool_t picture_pool_t; + +/** + * Picture pool configuration + */ +typedef struct { + unsigned picture_count; + picture_t *const *picture; + + int (*lock)(picture_t *); + void (*unlock)(picture_t *); +} picture_pool_configuration_t; + +/** + * Creates a pool of preallocated pictures. Free pictures can be allocated from + * the pool, and are returned to the pool when they are no longer referenced. + * + * This avoids allocating and deallocationg pictures repeatedly, and ensures + * that memory consumption remains within limits. + * + * To obtain a picture from the pool, use picture_pool_Get(). To increase and + * decrease the reference count, use picture_Hold() and picture_Release() + * respectively. + * + * If defined, picture_pool_configuration_t::lock will be called before + * a picture is used, and picture_pool_configuration_t::unlock will be called + * as soon as a picture is returned to the pool. + * Those callbacks can modify picture_t::p and access picture_t::p_sys. + * + * @return A pointer to the new pool on success, or NULL on error + * (pictures are not released on error). + */ +VLC_API picture_pool_t * picture_pool_NewExtended( const picture_pool_configuration_t * ) VLC_USED; + +/** + * Creates a picture pool with pictures in a given array. + * This is a convenience wrapper for picture_pool_NewExtended() without the + * lock and unlock callbacks. + * + * @param count number of pictures in the array + * @param tab array of pictures + * + * @return a pointer to the new pool on success, or NULL on error + * (pictures are not released on error) + */ +VLC_API picture_pool_t * picture_pool_New(unsigned count, + picture_t *const *tab) VLC_USED; + +/** + * Allocates pictures from the heap and creates a picture pool with them. + * This is a convenience wrapper for picture_NewFromFormat() and + * picture_pool_New(). + * + * @param fmt video format of pictures to allocate from the heap + * @param count number of pictures to allocate + * + * @return a pointer to the new pool on success, NULL on error + */ +VLC_API picture_pool_t * picture_pool_NewFromFormat(const video_format_t *fmt, + unsigned count) VLC_USED; + +/** + * Releases a pool created by picture_pool_NewExtended(), picture_pool_New() + * or picture_pool_NewFromFormat(). + * + * @note If there are no pending references to the pooled pictures, and the + * picture_resource_t.pf_destroy callback was not NULL, it will be invoked. + * Otherwise the default callback will be used. + * + * @warning If there are pending references (a.k.a. late pictures), the + * pictures will remain valid until the all pending references are dropped by + * picture_Release(). + */ +VLC_API void picture_pool_Release( picture_pool_t * ); + +/** + * Obtains a picture from a pool if any is immediately available. + * + * The picture must be released with picture_Release(). + * + * @return a picture, or NULL if all pictures in the pool are allocated + * + * @note This function is thread-safe. + */ +VLC_API picture_t * picture_pool_Get( picture_pool_t * ) VLC_USED; + +/** + * Obtains a picture from a pool. + * + * The picture must be released with picture_Release(). + * + * @return a picture or NULL on memory error + * + * @note This function is thread-safe. + */ +VLC_API picture_t *picture_pool_Wait(picture_pool_t *) VLC_USED; + +/** + * Enumerates all pictures in a pool, both free and allocated. + * + * @param cb callback to invoke once for each picture + * @param data opaque data parameter for the callback (first argument) + * + * @note Allocated pictures may be accessed asynchronously by other threads. + * Therefore, only read-only picture parameters can be read by the callback, + * typically picture_t.p_sys. + * Provided those rules are respected, the function is thread-safe. + */ +VLC_API void picture_pool_Enum( picture_pool_t *, + void (*cb)(void *, picture_t *), void *data ); + +/** + * Cancel the picture pool. + * + * It won't return any pictures via picture_pool_Get or picture_pool_Wait if + * canceled is true. This function will also unblock picture_pool_Wait. + * picture_pool_Reset will also reset the cancel state to false. + */ +void picture_pool_Cancel( picture_pool_t *, bool canceled ); + +/** + * Test if a picture belongs to the picture pool + * + * FIXME: remove this function when the vout_PutPicture() hack is fixed. + */ +bool picture_pool_OwnsPic( picture_pool_t *, picture_t *); + +/** + * Reserves pictures from a pool and creates a new pool with those. + * + * When the new pool is released, pictures are returned to the master pool. + * If the master pool was already released, pictures will be destroyed. + * + * @param count number of picture to reserve + * + * @return the new pool, or NULL if there were not enough pictures available + * or on error + * + * @note This function is thread-safe (but it might return NULL if other + * threads have already allocated too many pictures). + */ +VLC_API picture_pool_t * picture_pool_Reserve(picture_pool_t *, unsigned count) +VLC_USED; + +/** + * @return the total number of pictures in the given pool + * @note This function is thread-safe. + */ +VLC_API unsigned picture_pool_GetSize(const picture_pool_t *); + + +#endif /* VLC_PICTURE_POOL_H */ + diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_playlist.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_playlist.h new file mode 100644 index 0000000..322e271 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_playlist.h @@ -0,0 +1,443 @@ +/***************************************************************************** + * vlc_playlist.h : Playlist functions + ***************************************************************************** + * Copyright (C) 1999-2004 VLC authors and VideoLAN + * $Id$ + * + * Authors: Samuel Hocevar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_PLAYLIST_H_ +#define VLC_PLAYLIST_H_ + +# ifdef __cplusplus +extern "C" { +# endif + +#include +#include + +TYPEDEF_ARRAY(playlist_item_t*, playlist_item_array_t) + +struct intf_thread_t; + +/** + * \defgroup playlist VLC playlist + * VLC playlist controls + * @{ + * \file + * VLC playlist control interface + * + * The VLC playlist system has a tree structure. This allows advanced + * categorization, like for SAP streams (which are grouped by "sap groups"). + * + * The base structure for all playlist operations is the playlist_item_t. + * This is essentially a node within the playlist tree. Each playlist item + * references an input_item_t which contains the input stream info, such as + * location, name and meta-data. + * + * A playlist item is uniquely identified by its input item: + * \ref playlist_ItemGetByInput(). A single input item cannot be used by more + * than one playlist item at a time; if necessary, a copy of the input item can + * be made instead. + * + * The same playlist tree is visible to all user interfaces. To arbitrate + * access, a lock is used, see \ref playlist_Lock() and \ref playlist_Unlock(). + * + * Under the playlist root item node, the top-level items are the main + * media sources and include: + * - the actual playlist, + * - the media library, + * - the service discovery root node, whose children are services discovery + * module instances. + * + * So, here is an example: + * \verbatim + * Inputs array + * - input 1 -> name = foo 1 uri = ... + * - input 2 -> name = foo 2 uri = ... + * + * Playlist items tree + * - playlist (id 1) + * - category 1 (id 2) + * - foo 2 (id 6 - input 2) + * - media library (id 2) + * - foo 1 (id 5 - input 1) + * \endverbatim + * + * Sometimes, an item creates subitems. This happens for the directory access + * for example. In that case, if the item is under the "playlist" top-level + * item and playlist is configured to be flat then the item will be deleted and + * replaced with new subitems. If the item is under another top-level item, it + * will be transformed to a node and removed from the list of all items without + * nodes. + * + * For "standard" item addition, you can use playlist_Add(), playlist_AddExt() + * (more options) or playlist_AddInput() if you already created your input + * item. This will add the item at the root of "Playlist" or of "Media library" + * in each of the two trees. + * + * You can create nodes with playlist_NodeCreate() and can create items from + * existing input items to be placed under any node with + * playlist_NodeAddInput(). + * + * To delete an item, use playlist_NodeDelete( p_item ). + * + * The playlist defines the following event variables: + * + * - "item-change": It will contain a pointer to the input_item_t of a + * changed input item monitored by the playlist. + * + * - "playlist-item-append": It will contain a pointer to a playlist_item_t. + * - "playlist-item-deleted": It will contain a pointer to the playlist_item_t + * about to be deleted. + * + * - "leaf-to-parent": It will contain the playlist_item_t->i_id of an item that is transformed + * into a node. + * + * The playlist contains rate-variable which is propagated to current input if + * available also rate-slower/rate-faster is in use. + */ + +/** Helper structure to export to file part of the playlist */ +typedef struct playlist_export_t +{ + VLC_COMMON_MEMBERS + char *base_url; + FILE *p_file; + playlist_item_t *p_root; +} playlist_export_t; + +/** playlist item / node */ +struct playlist_item_t +{ + input_item_t *p_input; /**< Linked input item */ + + playlist_item_t **pp_children; /**< Children nodes/items */ + playlist_item_t *p_parent; /**< Item parent */ + int i_children; /**< Number of children, -1 if not a node */ + unsigned i_nb_played; /**< Times played */ + + int i_id; /**< Playlist item specific id */ + uint8_t i_flags; /**< Flags \see playlist_item_flags_e */ +}; + +typedef enum { + PLAYLIST_DBL_FLAG = 0x04, /**< Is it disabled ? */ + PLAYLIST_RO_FLAG = 0x08, /**< Write-enabled ? */ + PLAYLIST_SUBITEM_STOP_FLAG = 0x40, /**< Must playlist stop if the item gets subitems ?*/ + PLAYLIST_NO_INHERIT_FLAG = 0x80, /**< Will children inherit flags the R/O flag ? */ +} playlist_item_flags_e; + +/** Playlist status */ +typedef enum +{ PLAYLIST_STOPPED,PLAYLIST_RUNNING,PLAYLIST_PAUSED } playlist_status_t; + +/** Structure containing information about the playlist */ +struct playlist_t +{ + VLC_COMMON_MEMBERS + + playlist_item_array_t items; /**< Arrays of items */ + + playlist_item_array_t current; /**< Items currently being played */ + int i_current_index; /**< Index in current array */ + + /* Predefined items */ + playlist_item_t root; + playlist_item_t *p_playing; + playlist_item_t *p_media_library; +}; + +/* A bit of macro magic to generate an enum out of the following list, + * and later, to generate a list of static functions out of the same list. + * There is also SORT_RANDOM, which is always last and handled specially. + */ +#define VLC_DEFINE_SORT_FUNCTIONS \ + DEF( SORT_ID )\ + DEF( SORT_TITLE )\ + DEF( SORT_TITLE_NODES_FIRST )\ + DEF( SORT_ARTIST )\ + DEF( SORT_GENRE )\ + DEF( SORT_DURATION )\ + DEF( SORT_TITLE_NUMERIC )\ + DEF( SORT_ALBUM )\ + DEF( SORT_TRACK_NUMBER )\ + DEF( SORT_DESCRIPTION )\ + DEF( SORT_RATING )\ + DEF( SORT_URI )\ + DEF( SORT_DISC_NUMBER )\ + DEF( SORT_DATE ) + +#define DEF( s ) s, +enum +{ + VLC_DEFINE_SORT_FUNCTIONS + SORT_RANDOM, + NUM_SORT_FNS=SORT_RANDOM +}; +#undef DEF +#ifndef VLC_INTERNAL_PLAYLIST_SORT_FUNCTIONS +#undef VLC_DEFINE_SORT_FUNCTIONS +#endif + +enum +{ + ORDER_NORMAL = 0, + ORDER_REVERSE = 1, +}; + +#define PLAYLIST_END -1 + +enum pl_locked_state +{ + pl_Locked = true, + pl_Unlocked = false +}; + +/***************************************************************************** + * Prototypes + *****************************************************************************/ + +/* Helpers */ +#define PL_LOCK playlist_Lock( p_playlist ) +#define PL_UNLOCK playlist_Unlock( p_playlist ) +#define PL_ASSERT_LOCKED playlist_AssertLocked( p_playlist ) + +/** Playlist commands */ +enum { + PLAYLIST_PLAY, /**< No arg. res=can fail*/ + PLAYLIST_VIEWPLAY, /**< arg1= playlist_item_t*,*/ + /** arg2 = playlist_item_t* , res=can fail */ + PLAYLIST_TOGGLE_PAUSE, /**< No arg res=can fail */ + PLAYLIST_STOP, /**< No arg res=can fail*/ + PLAYLIST_SKIP, /**< arg1=int, res=can fail*/ + PLAYLIST_PAUSE, /**< No arg */ + PLAYLIST_RESUME, /**< No arg */ +}; + +#define playlist_Play(p) playlist_Control(p,PLAYLIST_PLAY, pl_Unlocked ) +#define playlist_TogglePause(p) \ + playlist_Control(p, PLAYLIST_TOGGLE_PAUSE, pl_Unlocked) +#define playlist_Stop(p) playlist_Control(p,PLAYLIST_STOP, pl_Unlocked ) +#define playlist_Next(p) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, 1) +#define playlist_Prev(p) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, -1) +#define playlist_Skip(p,i) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, (i) ) +#define playlist_Pause(p) \ + playlist_Control(p, PLAYLIST_PAUSE, pl_Unlocked) +#define playlist_Resume(p) \ + playlist_Control(p, PLAYLIST_RESUME, pl_Unlocked) + +/** + * Locks the playlist. + * + * This function locks the playlist. While the playlist is locked, no other + * thread can modify the playlist tree layout or current playing item and node. + * + * Locking the playlist is necessary before accessing, either for reading or + * writing, any playlist item. + * + * \note Because of the potential for lock inversion / deadlocks, locking the + * playlist shall not be attemped while holding an input item lock. An input + * item lock can be acquired while holding the playlist lock. + * + * While holding the playlist lock, a thread shall not attempt to: + * - probe, initialize or deinitialize a module or a plugin, + * - install or deinstall a variable or event callback, + * - set a variable or trigger a variable callback, with the sole exception + * of the playlist core triggering add/remove/leaf item callbacks, + * - invoke a module/plugin callback other than: + * - playlist export, + * - logger message callback. + */ +VLC_API void playlist_Lock( playlist_t * ); + +/** + * Unlocks the playlist. + * + * This function unlocks the playlist, allowing other threads to lock it. The + * calling thread must have called playlist_Lock() before. + * + * This function invalidates all or any playlist item pointers. + * There are no ways to ensure that playlist items are not modified or deleted + * by another thread past this function call. + * + * To retain a reference to a playlist item while not holding the playlist + * lock, a thread should take a reference to the input item within the + * playlist item before unlocking. If this is not practical, then the thread + * can store the playlist item ID (i_id) before unlocking. + * Either way, this will not ensure that the playlist item is not deleted, so + * the thread must be ready to handle that case later when calling + * playlist_ItemGetByInput() or playlist_ItemGetById(). + * + * Furthermore, if ID is used, then the playlist item might be deleted, and + * another item could be assigned the same ID. To avoid that problem, use + * the input item instead of the ID. + */ +VLC_API void playlist_Unlock( playlist_t * ); + +VLC_API void playlist_AssertLocked( playlist_t * ); +VLC_API void playlist_Deactivate( playlist_t * ); + +/** + * Do a playlist action. + * If there is something in the playlist then you can do playlist actions. + * Possible queries are listed in vlc_common.h + * \param p_playlist the playlist to do the command on + * \param i_query the command to do + * \param b_locked TRUE if playlist is locked when entering this function + * \param variable number of arguments + */ +VLC_API void playlist_Control( playlist_t *p_playlist, int i_query, int b_locked, ... ); + +static inline void playlist_ViewPlay(playlist_t *pl, playlist_item_t *node, + playlist_item_t *item) +{ + playlist_Control(pl, PLAYLIST_VIEWPLAY, pl_Locked, node, item); +} + +/** Get current playing input. The object is retained. + */ +VLC_API input_thread_t * playlist_CurrentInput( playlist_t *p_playlist ) VLC_USED; +VLC_API input_thread_t *playlist_CurrentInputLocked( playlist_t *p_playlist ) VLC_USED; + +/** Get the duration of all items in a node. + */ +VLC_API vlc_tick_t playlist_GetNodeDuration( playlist_item_t * ); + +/** Clear the playlist + * \param b_locked TRUE if playlist is locked when entering this function + */ +VLC_API void playlist_Clear( playlist_t *, bool ); + +/* Playlist sorting */ +VLC_API int playlist_TreeMove( playlist_t *, playlist_item_t *, playlist_item_t *, int ); +VLC_API int playlist_TreeMoveMany( playlist_t *, int, playlist_item_t **, playlist_item_t *, int ); +VLC_API int playlist_RecursiveNodeSort( playlist_t *, playlist_item_t *,int, int ); + +VLC_API playlist_item_t * playlist_CurrentPlayingItem( playlist_t * ) VLC_USED; +VLC_API int playlist_Status( playlist_t * ); + +/** + * Export a node of the playlist to a certain type of playlistfile + * \param b_playlist true for the playlist, false for the media library + * \param psz_filename the location where the exported file will be saved + * \param psz_type the type of playlist file to create (m3u, pls, ..) + * \return VLC_SUCCESS on success + */ +VLC_API int playlist_Export( playlist_t *p_playlist, const char *psz_name, + bool b_playlist, const char *psz_type ); + +/** + * Open a playlist file, add its content to the current playlist + */ +VLC_API int playlist_Import( playlist_t *p_playlist, const char *psz_file ); + +/********************** Services discovery ***********************/ + +/** Add a service discovery module */ +VLC_API int playlist_ServicesDiscoveryAdd(playlist_t *, const char *); +/** Remove a services discovery module by name */ +VLC_API int playlist_ServicesDiscoveryRemove(playlist_t *, const char *); +/** Check whether a given SD is loaded */ +VLC_API bool playlist_IsServicesDiscoveryLoaded( playlist_t *,const char *) VLC_DEPRECATED; +/** Query a services discovery */ +VLC_API int playlist_ServicesDiscoveryControl( playlist_t *, const char *, int, ... ); + +/********************** Renderer ***********************/ +/** + * Sets a renderer or remove the current one + * @param p_item The renderer item to be used, or NULL to disable the current + * one. If a renderer is provided, its reference count will be + * incremented. + */ +VLC_API int playlist_SetRenderer( playlist_t* p_pl, vlc_renderer_item_t* p_item ); + + +/******************************************************** + * Item management + ********************************************************/ + +/******************** Item addition ********************/ +VLC_API int playlist_Add( playlist_t *, const char *, bool ); +VLC_API int playlist_AddExt( playlist_t *, const char *, const char *, bool, int, const char *const *, unsigned, bool ); +VLC_API int playlist_AddInput( playlist_t *, input_item_t *, bool, bool ); +VLC_API playlist_item_t * playlist_NodeAddInput( playlist_t *, input_item_t *, playlist_item_t *, int ); +VLC_API int playlist_NodeAddCopy( playlist_t *, playlist_item_t *, playlist_item_t *, int ); + +/********************************** Item search *************************/ +VLC_API playlist_item_t * playlist_ItemGetById(playlist_t *, int ) VLC_USED; +VLC_API playlist_item_t *playlist_ItemGetByInput(playlist_t *, + const input_item_t * ) +VLC_USED; + +VLC_API int playlist_LiveSearchUpdate(playlist_t *, playlist_item_t *, const char *, bool ); + +/******************************************************** + * Tree management + ********************************************************/ +/* Node management */ +VLC_API playlist_item_t * playlist_NodeCreate( playlist_t *, const char *, playlist_item_t * p_parent, int i_pos, int i_flags ); +VLC_API playlist_item_t * playlist_ChildSearchName(playlist_item_t*, const char* ) VLC_USED; +VLC_API void playlist_NodeDelete( playlist_t *, playlist_item_t * ); + +/************************** + * Audio output management + **************************/ + +VLC_API audio_output_t *playlist_GetAout( playlist_t * ); + +VLC_API float playlist_VolumeGet( playlist_t * ); +VLC_API int playlist_VolumeSet( playlist_t *, float ); +VLC_API int playlist_VolumeUp( playlist_t *, int, float * ); +#define playlist_VolumeDown(a, b, c) playlist_VolumeUp(a, -(b), c) +VLC_API int playlist_MuteSet( playlist_t *, bool ); +VLC_API int playlist_MuteGet( playlist_t * ); + +static inline int playlist_MuteToggle( playlist_t *pl ) +{ + int val = playlist_MuteGet( pl ); + if (val >= 0) + val = playlist_MuteSet( pl, !val ); + return val; +} + +VLC_API void playlist_EnableAudioFilter( playlist_t *, const char *, bool ); + +/*********************************************************************** + * Inline functions + ***********************************************************************/ +/** Tell if the playlist is empty */ +static inline bool playlist_IsEmpty( playlist_t *p_playlist ) +{ + PL_ASSERT_LOCKED; + return p_playlist->items.i_size == 0; +} + +/** Tell the number of items in the current playing context */ +static inline int playlist_CurrentSize( playlist_t *p_playlist ) +{ + PL_ASSERT_LOCKED; + return p_playlist->current.i_size; +} + +/** @} */ +# ifdef __cplusplus +} +# endif + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_plugin.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_plugin.h new file mode 100644 index 0000000..ce28562 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_plugin.h @@ -0,0 +1,557 @@ +/***************************************************************************** + * vlc_plugin.h : Macros used from within a module. + ***************************************************************************** + * Copyright (C) 2001-2006 VLC authors and VideoLAN + * Copyright © 2007-2009 Rémi Denis-Courmont + * + * Authors: Samuel Hocevar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef LIBVLC_MODULES_MACROS_H +# define LIBVLC_MODULES_MACROS_H 1 + +/** + * \file + * This file implements plugin (module) macros used to define a vlc module. + */ + +enum vlc_module_properties +{ + VLC_MODULE_CREATE, + VLC_CONFIG_CREATE, + + /* DO NOT EVER REMOVE, INSERT OR REPLACE ANY ITEM! It would break the ABI! + * Append new items at the end ONLY. */ + VLC_MODULE_CPU_REQUIREMENT=0x100, + VLC_MODULE_SHORTCUT, + VLC_MODULE_CAPABILITY, + VLC_MODULE_SCORE, + VLC_MODULE_CB_OPEN, + VLC_MODULE_CB_CLOSE, + VLC_MODULE_NO_UNLOAD, + VLC_MODULE_NAME, + VLC_MODULE_SHORTNAME, + VLC_MODULE_DESCRIPTION, + VLC_MODULE_HELP, + VLC_MODULE_TEXTDOMAIN, + /* Insert new VLC_MODULE_* here */ + + /* DO NOT EVER REMOVE, INSERT OR REPLACE ANY ITEM! It would break the ABI! + * Append new items at the end ONLY. */ + VLC_CONFIG_NAME=0x1000, + /* command line name (args=const char *) */ + + VLC_CONFIG_VALUE, + /* actual value (args=int64_t/double/const char *) */ + + VLC_CONFIG_RANGE, + /* minimum value (args=int64_t/double/const char * twice) */ + + VLC_CONFIG_ADVANCED, + /* enable advanced flag (args=none) */ + + VLC_CONFIG_VOLATILE, + /* don't write variable to storage (args=none) */ + + VLC_CONFIG_PERSISTENT_OBSOLETE, + /* unused (ignored) */ + + VLC_CONFIG_PRIVATE, + /* hide from user (args=none) */ + + VLC_CONFIG_REMOVED, + /* tag as no longer supported (args=none) */ + + VLC_CONFIG_CAPABILITY, + /* capability for a module or list thereof (args=const char*) */ + + VLC_CONFIG_SHORTCUT, + /* one-character (short) command line option name (args=char) */ + + VLC_CONFIG_OLDNAME_OBSOLETE, + /* unused (ignored) */ + + VLC_CONFIG_SAFE, + /* tag as modifiable by untrusted input item "sources" (args=none) */ + + VLC_CONFIG_DESC, + /* description (args=const char *, const char *, const char *) */ + + VLC_CONFIG_LIST_OBSOLETE, + /* unused (ignored) */ + + VLC_CONFIG_ADD_ACTION_OBSOLETE, + /* unused (ignored) */ + + VLC_CONFIG_LIST, + /* list of suggested values + * (args=size_t, const *, const char *const *) */ + + VLC_CONFIG_LIST_CB, + /* callback for suggested values + * (args=const char *, size_t (*)(vlc_object_t *, **, char ***)) */ + + /* Insert new VLC_CONFIG_* here */ +}; + +/* Configuration hint types */ +#define CONFIG_HINT_CATEGORY 0x02 /* Start of new category */ +#define CONFIG_HINT_USAGE 0x05 /* Usage information */ + +#define CONFIG_CATEGORY 0x06 /* Set category */ +#define CONFIG_SUBCATEGORY 0x07 /* Set subcategory */ +#define CONFIG_SECTION 0x08 /* Start of new section */ + +/* Configuration item types */ +#define CONFIG_ITEM_FLOAT 0x20 /* Float option */ +#define CONFIG_ITEM_INTEGER 0x40 /* Integer option */ +#define CONFIG_ITEM_RGB 0x41 /* RGB color option */ +#define CONFIG_ITEM_BOOL 0x60 /* Bool option */ +#define CONFIG_ITEM_STRING 0x80 /* String option */ +#define CONFIG_ITEM_PASSWORD 0x81 /* Password option (*) */ +#define CONFIG_ITEM_KEY 0x82 /* Hot key option */ +#define CONFIG_ITEM_MODULE 0x84 /* Module option */ +#define CONFIG_ITEM_MODULE_CAT 0x85 /* Module option */ +#define CONFIG_ITEM_MODULE_LIST 0x86 /* Module option */ +#define CONFIG_ITEM_MODULE_LIST_CAT 0x87 /* Module option */ +#define CONFIG_ITEM_LOADFILE 0x8C /* Read file option */ +#define CONFIG_ITEM_SAVEFILE 0x8D /* Written file option */ +#define CONFIG_ITEM_DIRECTORY 0x8E /* Directory option */ +#define CONFIG_ITEM_FONT 0x8F /* Font option */ + +#define CONFIG_ITEM(x) (((x) & ~0xF) != 0) + +/* Categories and subcategories */ +#define CAT_INTERFACE 1 +#define SUBCAT_INTERFACE_GENERAL 101 +#define SUBCAT_INTERFACE_MAIN 102 +#define SUBCAT_INTERFACE_CONTROL 103 +#define SUBCAT_INTERFACE_HOTKEYS 104 + +#define CAT_AUDIO 2 +#define SUBCAT_AUDIO_GENERAL 201 +#define SUBCAT_AUDIO_AOUT 202 +#define SUBCAT_AUDIO_AFILTER 203 +#define SUBCAT_AUDIO_VISUAL 204 +#define SUBCAT_AUDIO_MISC 205 +#define SUBCAT_AUDIO_RESAMPLER 206 + +#define CAT_VIDEO 3 +#define SUBCAT_VIDEO_GENERAL 301 +#define SUBCAT_VIDEO_VOUT 302 +#define SUBCAT_VIDEO_VFILTER 303 +#define SUBCAT_VIDEO_SUBPIC 305 +#define SUBCAT_VIDEO_SPLITTER 306 + +#define CAT_INPUT 4 +#define SUBCAT_INPUT_GENERAL 401 +#define SUBCAT_INPUT_ACCESS 402 +#define SUBCAT_INPUT_DEMUX 403 +#define SUBCAT_INPUT_VCODEC 404 +#define SUBCAT_INPUT_ACODEC 405 +#define SUBCAT_INPUT_SCODEC 406 +#define SUBCAT_INPUT_STREAM_FILTER 407 + +#define CAT_SOUT 5 +#define SUBCAT_SOUT_GENERAL 501 +#define SUBCAT_SOUT_STREAM 502 +#define SUBCAT_SOUT_MUX 503 +#define SUBCAT_SOUT_ACO 504 +#define SUBCAT_SOUT_PACKETIZER 505 +#define SUBCAT_SOUT_VOD 507 +#define SUBCAT_SOUT_RENDERER 508 + +#define CAT_ADVANCED 6 +#define SUBCAT_ADVANCED_MISC 602 +#define SUBCAT_ADVANCED_NETWORK 603 + +#define CAT_PLAYLIST 7 +#define SUBCAT_PLAYLIST_GENERAL 701 +#define SUBCAT_PLAYLIST_SD 702 +#define SUBCAT_PLAYLIST_EXPORT 703 + + +/** + * Current plugin ABI version + */ +# define MODULE_SYMBOL 3_0_0f +# define MODULE_SUFFIX "__3_0_0f" + +/***************************************************************************** + * Add a few defines. You do not want to read this section. Really. + *****************************************************************************/ + +/* Explanation: + * + * if linking a module statically, we will need: + * #define MODULE_FUNC( zog ) module_foo_zog + * + * this can't easily be done with the C preprocessor, thus a few ugly hacks. + */ + +/* I need to do _this_ to change « foo bar » to « module_foo_bar » ! */ +#define CONCATENATE( y, z ) CRUDE_HACK( y, z ) +#define CRUDE_HACK( y, z ) y##__##z + +/* If the module is built-in, then we need to define foo_InitModule instead + * of InitModule. Same for Activate- and DeactivateModule. */ +#ifdef __PLUGIN__ +# define __VLC_SYMBOL( symbol ) CONCATENATE( symbol, MODULE_SYMBOL ) +# define VLC_MODULE_NAME_HIDDEN_SYMBOL \ + const char vlc_module_name[] = MODULE_STRING; +#else +# define __VLC_SYMBOL( symbol ) CONCATENATE( symbol, MODULE_NAME ) +# define VLC_MODULE_NAME_HIDDEN_SYMBOL +#endif + +#define CDECL_SYMBOL +#if defined (__PLUGIN__) +# if defined (_WIN32) +# define DLL_SYMBOL __declspec(dllexport) +# undef CDECL_SYMBOL +# define CDECL_SYMBOL __cdecl +# elif defined (__GNUC__) +# define DLL_SYMBOL __attribute__((visibility("default"))) +# else +# define DLL_SYMBOL +# endif +#else +# define DLL_SYMBOL +#endif + +#if defined( __cplusplus ) +# define EXTERN_SYMBOL extern "C" +#else +# define EXTERN_SYMBOL +#endif + +EXTERN_SYMBOL typedef int (*vlc_set_cb) (void *, void *, int, ...); + +#define vlc_plugin_set(...) vlc_set (opaque, NULL, __VA_ARGS__) +#define vlc_module_set(...) vlc_set (opaque, module, __VA_ARGS__) +#define vlc_config_set(...) vlc_set (opaque, config, __VA_ARGS__) + +/* + * InitModule: this function is called once and only once, when the module + * is looked at for the first time. We get the useful data from it, for + * instance the module name, its shortcuts, its capabilities... we also create + * a copy of its config because the module can be unloaded at any time. + */ +#define vlc_module_begin() \ +EXTERN_SYMBOL DLL_SYMBOL \ +int CDECL_SYMBOL __VLC_SYMBOL(vlc_entry) (vlc_set_cb, void *); \ +EXTERN_SYMBOL DLL_SYMBOL \ +int CDECL_SYMBOL __VLC_SYMBOL(vlc_entry) (vlc_set_cb vlc_set, void *opaque) \ +{ \ + module_t *module; \ + module_config_t *config = NULL; \ + if (vlc_plugin_set (VLC_MODULE_CREATE, &module)) \ + goto error; \ + if (vlc_module_set (VLC_MODULE_NAME, (MODULE_STRING))) \ + goto error; + +#define vlc_module_end() \ + (void) config; \ + return 0; \ +error: \ + return -1; \ +} \ +VLC_MODULE_NAME_HIDDEN_SYMBOL \ +VLC_METADATA_EXPORTS + +#define add_submodule( ) \ + if (vlc_plugin_set (VLC_MODULE_CREATE, &module)) \ + goto error; + +#define add_shortcut( ... ) \ +{ \ + const char *shortcuts[] = { __VA_ARGS__ }; \ + if (vlc_module_set (VLC_MODULE_SHORTCUT, \ + sizeof(shortcuts)/sizeof(shortcuts[0]), shortcuts)) \ + goto error; \ +} + +#define set_shortname( shortname ) \ + if (vlc_module_set (VLC_MODULE_SHORTNAME, (const char *)(shortname))) \ + goto error; + +#define set_description( desc ) \ + if (vlc_module_set (VLC_MODULE_DESCRIPTION, (const char *)(desc))) \ + goto error; + +#define set_help( help ) \ + if (vlc_module_set (VLC_MODULE_HELP, (const char *)(help))) \ + goto error; + +#define set_capability( cap, score ) \ + if (vlc_module_set (VLC_MODULE_CAPABILITY, (const char *)(cap)) \ + || vlc_module_set (VLC_MODULE_SCORE, (int)(score))) \ + goto error; + +#define set_callbacks( activate, deactivate ) \ + if (vlc_module_set(VLC_MODULE_CB_OPEN, #activate, (void *)(activate)) \ + || vlc_module_set(VLC_MODULE_CB_CLOSE, #deactivate, \ + (void *)(deactivate))) \ + goto error; + +#define cannot_unload_broken_library( ) \ + if (vlc_module_set (VLC_MODULE_NO_UNLOAD)) \ + goto error; + +#define set_text_domain( dom ) \ + if (vlc_plugin_set (VLC_MODULE_TEXTDOMAIN, (dom))) \ + goto error; + +/***************************************************************************** + * Macros used to build the configuration structure. + * + * Note that internally we support only 3 types of config data: int, float + * and string. + * The other types declared here just map to one of these 3 basic types but + * have the advantage of also providing very good hints to a configuration + * interface so as to make it more user friendly. + * The configuration structure also includes category hints. These hints can + * provide a configuration interface with some very useful data and again + * allow for a more user friendly interface. + *****************************************************************************/ + +#define add_type_inner( type ) \ + vlc_plugin_set (VLC_CONFIG_CREATE, (type), &config); + +#define add_typedesc_inner( type, text, longtext ) \ + add_type_inner( type ) \ + vlc_config_set (VLC_CONFIG_DESC, \ + (const char *)(text), (const char *)(longtext)); + +#define add_typeadv_inner( type, text, longtext, advc ) \ + add_typedesc_inner( type, text, longtext ) \ + if (advc) vlc_config_set (VLC_CONFIG_ADVANCED); + +#define add_typename_inner( type, name, text, longtext, advc ) \ + add_typeadv_inner( type, text, longtext, advc ) \ + vlc_config_set (VLC_CONFIG_NAME, (const char *)(name)); + +#define add_string_inner( type, name, text, longtext, advc, v ) \ + add_typename_inner( type, name, text, longtext, advc ) \ + vlc_config_set (VLC_CONFIG_VALUE, (const char *)(v)); + +#define add_int_inner( type, name, text, longtext, advc, v ) \ + add_typename_inner( type, name, text, longtext, advc ) \ + vlc_config_set (VLC_CONFIG_VALUE, (int64_t)(v)); + + +#define set_category( i_id ) \ + add_type_inner( CONFIG_CATEGORY ) \ + vlc_config_set (VLC_CONFIG_VALUE, (int64_t)(i_id)); + +#define set_subcategory( i_id ) \ + add_type_inner( CONFIG_SUBCATEGORY ) \ + vlc_config_set (VLC_CONFIG_VALUE, (int64_t)(i_id)); + +#define set_section( text, longtext ) \ + add_typedesc_inner( CONFIG_SECTION, text, longtext ) + +#define add_category_hint( text, longtext, advc ) \ + add_typeadv_inner( CONFIG_HINT_CATEGORY, text, longtext, advc ) + +#define add_usage_hint( text ) \ + add_typedesc_inner( CONFIG_HINT_USAGE, text, NULL ) + +#define add_string( name, value, text, longtext, advc ) \ + add_string_inner( CONFIG_ITEM_STRING, name, text, longtext, advc, \ + value ) + +#define add_password( name, value, text, longtext, advc ) \ + add_string_inner( CONFIG_ITEM_PASSWORD, name, text, longtext, advc, \ + value ) + +#define add_loadfile( name, value, text, longtext, advc ) \ + add_string_inner( CONFIG_ITEM_LOADFILE, name, text, longtext, advc, \ + value ) + +#define add_savefile( name, value, text, longtext, advc ) \ + add_string_inner( CONFIG_ITEM_SAVEFILE, name, text, longtext, advc, \ + value ) + +#define add_directory( name, value, text, longtext, advc ) \ + add_string_inner( CONFIG_ITEM_DIRECTORY, name, text, longtext, advc, \ + value ) + +#define add_font( name, value, text, longtext, advc )\ + add_string_inner( CONFIG_ITEM_FONT, name, text, longtext, advc, \ + value ) + +#define add_module( name, psz_caps, value, text, longtext, advc ) \ + add_string_inner( CONFIG_ITEM_MODULE, name, text, longtext, advc, \ + value ) \ + vlc_config_set (VLC_CONFIG_CAPABILITY, (const char *)(psz_caps)); + +#define add_module_list( name, psz_caps, value, text, longtext, advc ) \ + add_string_inner( CONFIG_ITEM_MODULE_LIST, name, text, longtext, advc, \ + value ) \ + vlc_config_set (VLC_CONFIG_CAPABILITY, (const char *)(psz_caps)); + +#ifndef __PLUGIN__ +#define add_module_cat( name, i_subcategory, value, text, longtext, advc ) \ + add_string_inner( CONFIG_ITEM_MODULE_CAT, name, text, longtext, advc, \ + value ) \ + change_integer_range (i_subcategory /* gruik */, 0); + +#define add_module_list_cat( name, i_subcategory, value, text, longtext, advc ) \ + add_string_inner( CONFIG_ITEM_MODULE_LIST_CAT, name, text, longtext, \ + advc, value ) \ + change_integer_range (i_subcategory /* gruik */, 0); +#endif + +#define add_integer( name, value, text, longtext, advc ) \ + add_int_inner( CONFIG_ITEM_INTEGER, name, text, longtext, advc, value ) + +#define add_rgb( name, value, text, longtext, advc ) \ + add_int_inner( CONFIG_ITEM_RGB, name, text, longtext, advc, value ) \ + change_integer_range( 0, 0xFFFFFF ) + +#define add_key( name, value, text, longtext, advc ) \ + add_string_inner( CONFIG_ITEM_KEY, "global-" name, text, longtext, advc, \ + KEY_UNSET ) \ + add_string_inner( CONFIG_ITEM_KEY, name, text, longtext, advc, value ) + +#define add_integer_with_range( name, value, i_min, i_max, text, longtext, advc ) \ + add_integer( name, value, text, longtext, advc ) \ + change_integer_range( i_min, i_max ) + +#define add_float( name, v, text, longtext, advc ) \ + add_typename_inner( CONFIG_ITEM_FLOAT, name, text, longtext, advc ) \ + vlc_config_set (VLC_CONFIG_VALUE, (double)(v)); + +#define add_float_with_range( name, value, f_min, f_max, text, longtext, advc ) \ + add_float( name, value, text, longtext, advc ) \ + change_float_range( f_min, f_max ) + +#define add_bool( name, v, text, longtext, advc ) \ + add_typename_inner( CONFIG_ITEM_BOOL, name, text, longtext, advc ) \ + if (v) vlc_config_set (VLC_CONFIG_VALUE, (int64_t)true); + +/* For removed option */ +#define add_obsolete_inner( name, type ) \ + add_type_inner( type ) \ + vlc_config_set (VLC_CONFIG_NAME, (const char *)(name)); \ + vlc_config_set (VLC_CONFIG_REMOVED); + +#define add_obsolete_bool( name ) \ + add_obsolete_inner( name, CONFIG_ITEM_BOOL ) + +#define add_obsolete_integer( name ) \ + add_obsolete_inner( name, CONFIG_ITEM_INTEGER ) + +#define add_obsolete_float( name ) \ + add_obsolete_inner( name, CONFIG_ITEM_FLOAT ) + +#define add_obsolete_string( name ) \ + add_obsolete_inner( name, CONFIG_ITEM_STRING ) + +/* Modifier macros for the config options (used for fine tuning) */ + +#define change_short( ch ) \ + vlc_config_set (VLC_CONFIG_SHORTCUT, (int)(ch)); + +#define change_string_list( list, list_text ) \ + vlc_config_set (VLC_CONFIG_LIST, \ + (size_t)(sizeof (list) / sizeof (char *)), \ + (const char *const *)(list), \ + (const char *const *)(list_text)); + +#define change_string_cb( cb ) \ + vlc_config_set (VLC_CONFIG_LIST_CB, #cb, (void *)(cb)); + +#define change_integer_list( list, list_text ) \ + vlc_config_set (VLC_CONFIG_LIST, \ + (size_t)(sizeof (list) / sizeof (int)), \ + (const int *)(list), \ + (const char *const *)(list_text)); + +#define change_integer_cb( cb ) \ + vlc_config_set (VLC_CONFIG_LIST_CB, #cb, (cb)); + +#define change_integer_range( minv, maxv ) \ + vlc_config_set (VLC_CONFIG_RANGE, (int64_t)(minv), (int64_t)(maxv)); + +#define change_float_range( minv, maxv ) \ + vlc_config_set (VLC_CONFIG_RANGE, (double)(minv), (double)(maxv)); + +/* For options that are saved but hidden from the preferences panel */ +#define change_private() \ + vlc_config_set (VLC_CONFIG_PRIVATE); + +/* For options that cannot be saved in the configuration */ +#define change_volatile() \ + change_private() \ + vlc_config_set (VLC_CONFIG_VOLATILE); + +#define change_safe() \ + vlc_config_set (VLC_CONFIG_SAFE); + +/* Meta data plugin exports */ +#define VLC_META_EXPORT( name, value ) \ + EXTERN_SYMBOL DLL_SYMBOL const char * CDECL_SYMBOL \ + __VLC_SYMBOL(vlc_entry_ ## name) (void); \ + EXTERN_SYMBOL DLL_SYMBOL const char * CDECL_SYMBOL \ + __VLC_SYMBOL(vlc_entry_ ## name) (void) \ + { \ + return value; \ + } + +#define VLC_COPYRIGHT_VIDEOLAN \ + "\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\x20\x74\x68" \ + "\x65\x20\x56\x69\x64\x65\x6f\x4c\x41\x4e\x20\x56\x4c\x43\x20\x6d" \ + "\x65\x64\x69\x61\x20\x70\x6c\x61\x79\x65\x72\x20\x64\x65\x76\x65" \ + "\x6c\x6f\x70\x65\x72\x73" +#define VLC_LICENSE_LGPL_2_1_PLUS \ + "\x4c\x69\x63\x65\x6e\x73\x65\x64\x20\x75\x6e\x64\x65\x72\x20\x74" \ + "\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\x20" \ + "\x47\x4e\x55\x20\x4c\x65\x73\x73\x65\x72\x20\x47\x65\x6e\x65\x72" \ + "\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73" \ + "\x65\x2c\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x32\x2e\x31\x20\x6f" \ + "\x72\x20\x6c\x61\x74\x65\x72\x2e" +#define VLC_LICENSE_GPL_2_PLUS \ + "\x4c\x69\x63\x65\x6e\x73\x65\x64\x20\x75\x6e\x64\x65\x72\x20\x74" \ + "\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\x20" \ + "\x47\x4e\x55\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x50\x75\x62\x6c" \ + "\x69\x63\x20\x4c\x69\x63\x65\x6e\x73\x65\x2c\x20\x76\x65\x72\x73" \ + "\x69\x6f\x6e\x20\x32\x20\x6f\x72\x20\x6c\x61\x74\x65\x72\x2e" +#if defined (__LIBVLC__) +# define VLC_MODULE_COPYRIGHT VLC_COPYRIGHT_VIDEOLAN +# ifndef VLC_MODULE_LICENSE +# define VLC_MODULE_LICENSE VLC_LICENSE_LGPL_2_1_PLUS +# endif +#endif + +#ifdef VLC_MODULE_COPYRIGHT +# define VLC_COPYRIGHT_EXPORT VLC_META_EXPORT(copyright, VLC_MODULE_COPYRIGHT) +#else +# define VLC_COPYRIGHT_EXPORT +#endif +#ifdef VLC_MODULE_LICENSE +# define VLC_LICENSE_EXPORT VLC_META_EXPORT(license, VLC_MODULE_LICENSE) +#else +# define VLC_LICENSE_EXPORT +#endif + +#define VLC_METADATA_EXPORTS \ + VLC_COPYRIGHT_EXPORT \ + VLC_LICENSE_EXPORT + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_probe.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_probe.h new file mode 100644 index 0000000..efa4d97 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_probe.h @@ -0,0 +1,69 @@ +/***************************************************************************** + * vlc_probe.h: service probing interface + ***************************************************************************** + * Copyright (C) 2009 Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_PROBE_H +# define VLC_PROBE_H 1 + +# include + +/** + * \file + * This file defines functions and structures to run-time probe VLC extensions + */ + +# ifdef __cplusplus +extern "C" { +# endif + +void *vlc_probe (vlc_object_t *, const char *, size_t *); +#define vlc_probe(obj, cap, pcount) \ + vlc_probe(VLC_OBJECT(obj), cap, pcount) + +struct vlc_probe_t +{ + VLC_COMMON_MEMBERS + + void *list; + size_t count; +}; + +typedef struct vlc_probe_t vlc_probe_t; + +static inline int vlc_probe_add(vlc_probe_t *obj, const void *data, + size_t len) +{ + char *tab = (char *)realloc (obj->list, (obj->count + 1) * len); + + if (unlikely(tab == NULL)) + return VLC_ENOMEM; + memcpy(tab + (obj->count * len), data, len); + obj->list = tab; + obj->count++; + return VLC_SUCCESS; +} + +# define VLC_PROBE_CONTINUE VLC_EGENERIC +# define VLC_PROBE_STOP VLC_SUCCESS + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_rand.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_rand.h new file mode 100644 index 0000000..3ae95ac --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_rand.h @@ -0,0 +1,37 @@ +/***************************************************************************** + * vlc_rand.h: RNG + ***************************************************************************** + * Copyright © 2007 Rémi Denis-Courmont + * $Id$ + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_RAND_H +# define VLC_RAND_H + +/** + * \file + * This file defined random number generator function in vlc + */ + +VLC_API void vlc_rand_bytes(void *buf, size_t len); + +/* Interlocked (but not reproducible) functions for the POSIX PRNG */ +VLC_API double vlc_drand48(void) VLC_USED; +VLC_API long vlc_lrand48(void) VLC_USED; +VLC_API long vlc_mrand48(void) VLC_USED; + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_renderer_discovery.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_renderer_discovery.h new file mode 100644 index 0000000..6193e48 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_renderer_discovery.h @@ -0,0 +1,219 @@ +/***************************************************************************** + * vlc_renderer_discovery.h : Renderer Discovery functions + ***************************************************************************** + * Copyright (C) 2016 VLC authors and VideoLAN + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_RENDERER_DISCOVERY_H +#define VLC_RENDERER_DISCOVERY_H 1 + +#include +#include +#include + +/** + * @defgroup vlc_renderer VLC renderer discovery + * @{ + * + * @file + * This file declares VLC renderer discvoery structures and functions + * + * @defgroup vlc_renderer_item VLC renderer items returned by the discovery + * @{ + */ + +#define VLC_RENDERER_CAN_AUDIO 0x0001 +#define VLC_RENDERER_CAN_VIDEO 0x0002 + +/** + * Create a new renderer item + * + * @param psz_type type of the item + * @param psz_name name of the item + * @param psz_uri uri of the renderer item, must contains a valid protocol and + * a valid host + * @param psz_extra_sout extra sout options + * @param psz_demux_filter demux filter to use with the renderer + * @param psz_icon_uri icon uri of the renderer item + * @param i_flags flags for the item + * @return a renderer item or NULL in case of error + */ +VLC_API vlc_renderer_item_t * +vlc_renderer_item_new(const char *psz_type, const char *psz_name, + const char *psz_uri, const char *psz_extra_sout, + const char *psz_demux_filter, const char *psz_icon_uri, + int i_flags) VLC_USED; + +/** + * Hold a renderer item, i.e. creates a new reference + */ +VLC_API vlc_renderer_item_t * +vlc_renderer_item_hold(vlc_renderer_item_t *p_item); + +/** + * Releases a renderer item, i.e. decrements its reference counter + */ +VLC_API void +vlc_renderer_item_release(vlc_renderer_item_t *p_item); + +/** + * Get the human readable name of a renderer item + */ +VLC_API const char * +vlc_renderer_item_name(const vlc_renderer_item_t *p_item); + +/** + * Get the type (not translated) of a renderer item. For now, the type can only + * be "chromecast" ("upnp", "airplay" may come later). + */ +VLC_API const char * +vlc_renderer_item_type(const vlc_renderer_item_t *p_item); + +/** + * Get the demux filter to use with a renderer item + */ +VLC_API const char * +vlc_renderer_item_demux_filter(const vlc_renderer_item_t *p_item); + +/** + * Get the sout command of a renderer item + */ +VLC_API const char * +vlc_renderer_item_sout(const vlc_renderer_item_t *p_item); + +/** + * Get the icon uri of a renderer item + */ +VLC_API const char * +vlc_renderer_item_icon_uri(const vlc_renderer_item_t *p_item); + +/** + * Get the flags of a renderer item + */ +VLC_API int +vlc_renderer_item_flags(const vlc_renderer_item_t *p_item); + +/** + * @} + * @defgroup vlc_renderer_discovery VLC renderer discovery interface + * @{ + */ + +typedef struct vlc_renderer_discovery_sys vlc_renderer_discovery_sys; +struct vlc_renderer_discovery_owner; + +/** + * Return a list of renderer discovery modules + * + * @param pppsz_names a pointer to a list of module name, NULL terminated + * @param pppsz_longnames a pointer to a list of module longname, NULL + * terminated + * + * @return VLC_SUCCESS on success, or VLC_EGENERIC on error + */ +VLC_API int +vlc_rd_get_names(vlc_object_t *p_obj, char ***pppsz_names, + char ***pppsz_longnames) VLC_USED; +#define vlc_rd_get_names(a, b, c) \ + vlc_rd_get_names(VLC_OBJECT(a), b, c) + +/** + * Create a new renderer discovery module + * + * @param psz_name name of the module to load, see vlc_rd_get_names() to get + * the list of names + * + * @return a valid vlc_renderer_discovery, need to be released with + * vlc_rd_release() + */ +VLC_API vlc_renderer_discovery_t * +vlc_rd_new(vlc_object_t *p_obj, const char *psz_name, + const struct vlc_renderer_discovery_owner *owner) VLC_USED; + +VLC_API void vlc_rd_release(vlc_renderer_discovery_t *p_rd); + +/** + * @} + * @defgroup vlc_renderer_discovery_module VLC renderer module + * @{ + */ + +struct vlc_renderer_discovery_owner +{ + void *sys; + void (*item_added)(struct vlc_renderer_discovery_t *, + struct vlc_renderer_item_t *); + void (*item_removed)(struct vlc_renderer_discovery_t *, + struct vlc_renderer_item_t *); +}; + +struct vlc_renderer_discovery_t +{ + VLC_COMMON_MEMBERS + module_t * p_module; + + struct vlc_renderer_discovery_owner owner; + + char * psz_name; + config_chain_t * p_cfg; + + vlc_renderer_discovery_sys *p_sys; +}; + +/** + * Add a new renderer item + * + * This will send the vlc_RendererDiscoveryItemAdded event + */ +static inline void vlc_rd_add_item(vlc_renderer_discovery_t * p_rd, + vlc_renderer_item_t * p_item) +{ + p_rd->owner.item_added(p_rd, p_item); +} + +/** + * Add a new renderer item + * + * This will send the vlc_RendererDiscoveryItemRemoved event + */ +static inline void vlc_rd_remove_item(vlc_renderer_discovery_t * p_rd, + vlc_renderer_item_t * p_item) +{ + p_rd->owner.item_removed(p_rd, p_item); +} + +/** + * Renderer Discovery proble helpers + */ +VLC_API int +vlc_rd_probe_add(vlc_probe_t *p_probe, const char *psz_name, + const char *psz_longname); + +#define VLC_RD_PROBE_HELPER(name, longname) \ +static int vlc_rd_probe_open(vlc_object_t *obj) \ +{ \ + return vlc_rd_probe_add((struct vlc_probe_t *)obj, name, longname); \ +} + +#define VLC_RD_PROBE_SUBMODULE \ + add_submodule() \ + set_capability("renderer probe", 100) \ + set_callbacks(vlc_rd_probe_open, NULL) + +/** @} @} */ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_services_discovery.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_services_discovery.h new file mode 100644 index 0000000..e4dfcd3 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_services_discovery.h @@ -0,0 +1,234 @@ +/***************************************************************************** + * vlc_services_discovery.h : Services Discover functions + ***************************************************************************** + * Copyright (C) 1999-2004 VLC authors and VideoLAN + * $Id$ + * + * Authors: Pierre d'Herbemont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_SERVICES_DISCOVERY_H_ +#define VLC_SERVICES_DISCOVERY_H_ + +#include +#include + +/** + * \file + * This file lists functions and structures for service discovery (SD) in vlc + */ + +# ifdef __cplusplus +extern "C" { +# endif + +/** + * @{ + */ + +struct services_discovery_owner_t +{ + void *sys; /**< Private data for the owner callbacks */ + void (*item_added)(struct services_discovery_t *sd, input_item_t *parent, + input_item_t *item, const char *category); + void (*item_removed)(struct services_discovery_t *sd, input_item_t *item); +}; + +/** + * Main service discovery structure to build a SD module + */ +struct services_discovery_t +{ + VLC_COMMON_MEMBERS + module_t * p_module; /**< Loaded module */ + + char *psz_name; /**< Main name of the SD */ + config_chain_t *p_cfg; /**< Configuration for the SD */ + + const char *description; /**< Human-readable name */ + + /** Control function + * \see services_discovery_command_e + */ + int ( *pf_control ) ( services_discovery_t *, int, va_list ); + + services_discovery_sys_t *p_sys; /**< Custom private data */ + + struct services_discovery_owner_t owner; /**< Owner callbacks */ +}; + +/** + * Service discovery categories + * \see vlc_sd_probe_Add + */ +enum services_discovery_category_e +{ + SD_CAT_DEVICES = 1, /**< Devices, like portable music players */ + SD_CAT_LAN, /**< LAN/WAN services, like Upnp or SAP */ + SD_CAT_INTERNET, /**< Internet or Website channels services */ + SD_CAT_MYCOMPUTER /**< Computer services, like Discs or Apps */ +}; + +/** + * Service discovery control commands + */ +enum services_discovery_command_e +{ + SD_CMD_SEARCH = 1, /**< arg1 = query */ + SD_CMD_DESCRIPTOR /**< arg1 = services_discovery_descriptor_t* */ +}; + +/** + * Service discovery capabilities + */ +enum services_discovery_capability_e +{ + SD_CAP_SEARCH = 1 /**< One can search in the SD */ +}; + +/** + * Service discovery descriptor + * \see services_discovery_command_e + */ +typedef struct +{ + char *psz_short_desc; /**< The short description, human-readable */ + char *psz_icon_url; /**< URL to the icon that represents it */ + char *psz_url; /**< URL for the service */ + int i_capabilities; /**< \see services_discovery_capability_e */ +} services_discovery_descriptor_t; + + +/*********************************************************************** + * Service Discovery + ***********************************************************************/ + +/** + * Ask for a research in the SD + * @param p_sd: the Service Discovery + * @param i_control: the command to issue + * @param args: the argument list + * @return VLC_SUCCESS in case of success, the error code overwise + */ +static inline int vlc_sd_control( services_discovery_t *p_sd, int i_control, va_list args ) +{ + if( p_sd->pf_control ) + return p_sd->pf_control( p_sd, i_control, args ); + else + return VLC_EGENERIC; +} + +/* Get the services discovery modules names to use in Create(), in a null + * terminated string array. Array and string must be freed after use. */ +VLC_API char ** vlc_sd_GetNames( vlc_object_t *, char ***, int ** ) VLC_USED; +#define vlc_sd_GetNames(obj, pln, pcat ) \ + vlc_sd_GetNames(VLC_OBJECT(obj), pln, pcat) + +/** + * Creates a services discoverer. + */ +VLC_API services_discovery_t *vlc_sd_Create(vlc_object_t *parent, + const char *chain, const struct services_discovery_owner_t *owner) +VLC_USED; + +VLC_API void vlc_sd_Destroy( services_discovery_t * ); + +/** + * Added top-level service callback. + * + * This is a convenience wrapper for services_discovery_AddSubItem(). + * It covers the most comomn case wherby the added item is a top-level service, + * i.e. it has no parent node. + */ +static inline void services_discovery_AddItem(services_discovery_t *sd, + input_item_t *item) +{ + sd->owner.item_added(sd, NULL, item, NULL); +} + +/** + * Added service callback. + * + * A services discovery module invokes this function when it "discovers" a new + * service, i.e. a new input item. + * + * @note This callback does not take ownership of the input item; it might + * however (and most probably will) add one of more references to the item. + * + * The caller is responsible for releasing its own reference(s) eventually. + * Keeping a reference is necessary to call services_discovery_RemoveItem() or + * to alter the item later. However, if the caller will never remove nor alter + * the item, it can drop its reference(s) immediately. + * + * @param sd services discoverer / services discovery module instance + * @param item input item to add + */ +static inline void services_discovery_AddSubItem(services_discovery_t *sd, + input_item_t *parent, + input_item_t *item) +{ + sd->owner.item_added(sd, parent, item, NULL); +} + +/** + * Added service backward compatibility callback. + * + * @param category Optional name of a group that the item belongs in + * (for backward compatibility with legacy modules) + */ +VLC_DEPRECATED +static inline void services_discovery_AddItemCat(services_discovery_t *sd, + input_item_t *item, + const char *category) +{ + sd->owner.item_added(sd, NULL, item, category); +} + +/** + * Removed service callback. + * + * A services discovery module invokes this function when it senses that a + * service is no longer available. + */ +static inline void services_discovery_RemoveItem(services_discovery_t *sd, + input_item_t *item) +{ + sd->owner.item_removed(sd, item); +} + +/* SD probing */ + +VLC_API int vlc_sd_probe_Add(vlc_probe_t *, const char *, const char *, int category); + +#define VLC_SD_PROBE_SUBMODULE \ + add_submodule() \ + set_capability( "services probe", 100 ) \ + set_callbacks( vlc_sd_probe_Open, NULL ) + +#define VLC_SD_PROBE_HELPER(name, longname, cat) \ +static int vlc_sd_probe_Open (vlc_object_t *obj) \ +{ \ + return vlc_sd_probe_Add ((struct vlc_probe_t *)obj, name, \ + longname, cat); \ +} + +/** @} */ +# ifdef __cplusplus +} +# endif + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_sout.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_sout.h new file mode 100644 index 0000000..938315e --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_sout.h @@ -0,0 +1,311 @@ +/***************************************************************************** + * vlc_sout.h : stream output module + ***************************************************************************** + * Copyright (C) 2002-2008 VLC authors and VideoLAN + * $Id$ + * + * Authors: Christophe Massiot + * Laurent Aimar + * Eric Petit + * Jean-Paul Saman + * Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_SOUT_H_ +#define VLC_SOUT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/** + * \defgroup sout Stream output + * \ingroup output + * @{ + * \file + * Stream output modules interface + */ + +/** Stream output instance (FIXME: should be private to src/ to avoid + * invalid unsynchronized access) */ +struct sout_instance_t +{ + VLC_COMMON_MEMBERS + + char *psz_sout; + + /** count of output that can't control the space */ + int i_out_pace_nocontrol; + + vlc_mutex_t lock; + sout_stream_t *p_stream; +}; + +/**************************************************************************** + * sout_stream_id_sys_t: opaque (private for all sout_stream_t) + ****************************************************************************/ +typedef struct sout_stream_id_sys_t sout_stream_id_sys_t; + +/** + * \defgroup sout_access Access output + * Raw output byte streams + * @{ + */ + +/** Stream output access_output */ +struct sout_access_out_t +{ + VLC_COMMON_MEMBERS + + module_t *p_module; + char *psz_access; + + char *psz_path; + sout_access_out_sys_t *p_sys; + int (*pf_seek)( sout_access_out_t *, off_t ); + ssize_t (*pf_read)( sout_access_out_t *, block_t * ); + ssize_t (*pf_write)( sout_access_out_t *, block_t * ); + int (*pf_control)( sout_access_out_t *, int, va_list ); + + config_chain_t *p_cfg; +}; + +enum access_out_query_e +{ + ACCESS_OUT_CONTROLS_PACE, /* arg1=bool *, can fail (assume true) */ + ACCESS_OUT_CAN_SEEK, /* arg1=bool *, can fail (assume false) */ +}; + +VLC_API sout_access_out_t * sout_AccessOutNew( vlc_object_t *, const char *psz_access, const char *psz_name ) VLC_USED; +#define sout_AccessOutNew( obj, access, name ) \ + sout_AccessOutNew( VLC_OBJECT(obj), access, name ) +VLC_API void sout_AccessOutDelete( sout_access_out_t * ); +VLC_API int sout_AccessOutSeek( sout_access_out_t *, off_t ); +VLC_API ssize_t sout_AccessOutRead( sout_access_out_t *, block_t * ); +VLC_API ssize_t sout_AccessOutWrite( sout_access_out_t *, block_t * ); +VLC_API int sout_AccessOutControl( sout_access_out_t *, int, ... ); + +static inline bool sout_AccessOutCanControlPace( sout_access_out_t *p_ao ) +{ + bool b; + if( sout_AccessOutControl( p_ao, ACCESS_OUT_CONTROLS_PACE, &b ) ) + return true; + return b; +} + +/** + * @} + * \defgroup sout_mux Multiplexer + * Multiplexers (file formatters) + * @{ + */ + +/** Muxer structure */ +struct sout_mux_t +{ + VLC_COMMON_MEMBERS + module_t *p_module; + + sout_instance_t *p_sout; + + char *psz_mux; + config_chain_t *p_cfg; + + sout_access_out_t *p_access; + + int (*pf_addstream)( sout_mux_t *, sout_input_t * ); + void (*pf_delstream)( sout_mux_t *, sout_input_t * ); + int (*pf_mux) ( sout_mux_t * ); + int (*pf_control) ( sout_mux_t *, int, va_list ); + + /* here are all inputs accepted by muxer */ + int i_nb_inputs; + sout_input_t **pp_inputs; + + /* mux private */ + sout_mux_sys_t *p_sys; + + /* XXX private to stream_output.c */ + /* if muxer doesn't support adding stream at any time then we first wait + * for stream then we refuse all stream and start muxing */ + bool b_add_stream_any_time; + bool b_waiting_stream; + /* we wait 1.5 second after first stream added */ + vlc_tick_t i_add_stream_start; +}; + +enum sout_mux_query_e +{ + /* capabilities */ + MUX_CAN_ADD_STREAM_WHILE_MUXING, /* arg1= bool *, res=cannot fail */ + /* properties */ + MUX_GET_ADD_STREAM_WAIT, /* arg1= bool *, res=cannot fail */ + MUX_GET_MIME, /* arg1= char ** res=can fail */ +}; + +struct sout_input_t +{ + const es_format_t *p_fmt; + block_fifo_t *p_fifo; + void *p_sys; + es_format_t fmt; +}; + + +VLC_API sout_mux_t * sout_MuxNew( sout_instance_t*, const char *, sout_access_out_t * ) VLC_USED; +VLC_API sout_input_t *sout_MuxAddStream( sout_mux_t *, const es_format_t * ) VLC_USED; +VLC_API void sout_MuxDeleteStream( sout_mux_t *, sout_input_t * ); +VLC_API void sout_MuxDelete( sout_mux_t * ); +VLC_API int sout_MuxSendBuffer( sout_mux_t *, sout_input_t *, block_t * ); +VLC_API int sout_MuxGetStream(sout_mux_t *, unsigned, vlc_tick_t *); +VLC_API void sout_MuxFlush( sout_mux_t *, sout_input_t * ); + +static inline int sout_MuxControl( sout_mux_t *p_mux, int i_query, ... ) +{ + va_list args; + int i_result; + + va_start( args, i_query ); + i_result = p_mux->pf_control( p_mux, i_query, args ); + va_end( args ); + return i_result; +} + +/** @} */ + +enum sout_stream_query_e { + SOUT_STREAM_EMPTY, /* arg1=bool *, res=can fail (assume true) */ +}; + +struct sout_stream_t +{ + VLC_COMMON_MEMBERS + + module_t *p_module; + sout_instance_t *p_sout; + + char *psz_name; + config_chain_t *p_cfg; + sout_stream_t *p_next; + + /* add, remove a stream */ + sout_stream_id_sys_t *(*pf_add)( sout_stream_t *, const es_format_t * ); + void (*pf_del)( sout_stream_t *, sout_stream_id_sys_t * ); + /* manage a packet */ + int (*pf_send)( sout_stream_t *, sout_stream_id_sys_t *, block_t* ); + int (*pf_control)( sout_stream_t *, int, va_list ); + void (*pf_flush)( sout_stream_t *, sout_stream_id_sys_t * ); + + sout_stream_sys_t *p_sys; + bool pace_nocontrol; +}; + +VLC_API void sout_StreamChainDelete(sout_stream_t *p_first, sout_stream_t *p_last ); +VLC_API sout_stream_t *sout_StreamChainNew(sout_instance_t *p_sout, + const char *psz_chain, sout_stream_t *p_next, sout_stream_t **p_last) VLC_USED; + +static inline sout_stream_id_sys_t *sout_StreamIdAdd( sout_stream_t *s, + const es_format_t *fmt ) +{ + return s->pf_add( s, fmt ); +} + +static inline void sout_StreamIdDel( sout_stream_t *s, + sout_stream_id_sys_t *id ) +{ + s->pf_del( s, id ); +} + +static inline int sout_StreamIdSend( sout_stream_t *s, + sout_stream_id_sys_t *id, block_t *b ) +{ + return s->pf_send( s, id, b ); +} + +static inline void sout_StreamFlush( sout_stream_t *s, + sout_stream_id_sys_t *id ) +{ + if (s->pf_flush) + s->pf_flush( s, id ); +} + +static inline int sout_StreamControl( sout_stream_t *s, int i_query, ... ) +{ + va_list args; + int i_result; + + va_start( args, i_query ); + if ( !s->pf_control ) + i_result = VLC_EGENERIC; + else + i_result = s->pf_control( s, i_query, args ); + va_end( args ); + return i_result; +} + +/**************************************************************************** + * Encoder + ****************************************************************************/ + +VLC_API encoder_t * sout_EncoderCreate( vlc_object_t *obj ); +#define sout_EncoderCreate(o) sout_EncoderCreate(VLC_OBJECT(o)) + +/**************************************************************************** + * Announce handler + ****************************************************************************/ +VLC_API session_descriptor_t* sout_AnnounceRegisterSDP( vlc_object_t *, const char *, const char * ) VLC_USED; +VLC_API void sout_AnnounceUnRegister(vlc_object_t *,session_descriptor_t* ); +#define sout_AnnounceRegisterSDP(o, sdp, addr) \ + sout_AnnounceRegisterSDP(VLC_OBJECT (o), sdp, addr) +#define sout_AnnounceUnRegister(o, a) \ + sout_AnnounceUnRegister(VLC_OBJECT (o), a) + +/** SDP */ + +struct sockaddr; +struct vlc_memstream; + +VLC_API int vlc_sdp_Start(struct vlc_memstream *, vlc_object_t *obj, + const char *cfgpref, + const struct sockaddr *src, size_t slen, + const struct sockaddr *addr, size_t alen) VLC_USED; +VLC_API void sdp_AddMedia(struct vlc_memstream *, const char *type, + const char *protocol, int dport, unsigned pt, + bool bw_indep, unsigned bw, const char *ptname, + unsigned clockrate, unsigned channels, + const char *fmtp); +VLC_API void sdp_AddAttribute(struct vlc_memstream *, const char *name, + const char *fmt, ...) VLC_FORMAT(3, 4); + +/** Description module */ +typedef struct sout_description_data_t +{ + int i_es; + es_format_t **es; + vlc_sem_t *sem; +} sout_description_data_t; + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_spu.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_spu.h new file mode 100644 index 0000000..cbba59a --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_spu.h @@ -0,0 +1,105 @@ +/***************************************************************************** + * vlc_spu.h: spu_t definition and functions. + ***************************************************************************** + * Copyright (C) 1999-2010 VLC authors and VideoLAN + * Copyright (C) 2010 Laurent Aimar + * $Id$ + * + * Authors: Gildas Bazin + * Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_SPU_H +#define VLC_SPU_H 1 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup spu Sub-picture channels + * \ingroup video_output + * @{ + * \file + */ + +typedef struct spu_private_t spu_private_t; + +/** + * Subpicture unit descriptor + */ +struct spu_t +{ + VLC_COMMON_MEMBERS + + spu_private_t *p; +}; + + VLC_API spu_t * spu_Create( vlc_object_t *, vout_thread_t * ); +#define spu_Create(a,b) spu_Create(VLC_OBJECT(a),b) +VLC_API void spu_Destroy( spu_t * ); + +/** + * This function sends a subpicture to the spu_t core. + * + * You cannot use the provided subpicture anymore. The spu_t core + * will destroy it at its convenience. + */ +VLC_API void spu_PutSubpicture( spu_t *, subpicture_t * ); + +/** + * This function will return an unique subpicture containing the OSD and + * subtitles visibles at the requested date. + * + * \param p_chroma_list is a list of supported chroma for the output (can be NULL) + * \param p_fmt_dst is the format of the picture on which the return subpicture will be rendered. + * \param p_fmt_src is the format of the original(source) video. + * + * The returned value if non NULL must be released by subpicture_Delete(). + */ +VLC_API subpicture_t * spu_Render( spu_t *, const vlc_fourcc_t *p_chroma_list, const video_format_t *p_fmt_dst, const video_format_t *p_fmt_src, vlc_tick_t render_subtitle_date, vlc_tick_t render_osd_date, bool ignore_osd ); + +/** + * It registers a new SPU channel. + */ +VLC_API int spu_RegisterChannel( spu_t * ); + +/** + * It clears all subpictures associated to a SPU channel. + */ +VLC_API void spu_ClearChannel( spu_t *, int ); + +/** + * It changes the sub sources list + */ +VLC_API void spu_ChangeSources( spu_t *, const char * ); + +/** + * It changes the sub filters list + */ +VLC_API void spu_ChangeFilters( spu_t *, const char * ); + +/** @}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VLC_SPU_H */ + diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_stream.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_stream.h new file mode 100644 index 0000000..789545e --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_stream.h @@ -0,0 +1,498 @@ +/***************************************************************************** + * vlc_stream.h: Stream (between access and demux) descriptor and methods + ***************************************************************************** + * Copyright (C) 1999-2004 VLC authors and VideoLAN + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_STREAM_H +#define VLC_STREAM_H 1 + +#include + +# ifdef __cplusplus +extern "C" { +# endif + +/** + * \defgroup stream Stream + * \ingroup input + * Buffered input byte streams + * @{ + * \file + * Byte streams and byte stream filter modules interface + */ + +/** + * stream_t definition + */ + +struct stream_t +{ + VLC_COMMON_MEMBERS + + /* Module properties for stream filter */ + module_t *p_module; + + char *psz_name; + char *psz_url; /**< Full URL or MRL (can be NULL) */ + const char *psz_location; /**< Location (URL with the scheme stripped) */ + char *psz_filepath; /**< Local file path (if applicable) */ + bool b_preparsing; /**< True if this access is used to preparse */ + + /* Stream source for stream filter */ + stream_t *p_source; + + /** + * Read data. + * + * Callback to read data from the stream into a caller-supplied buffer. + * + * This may be NULL if the stream is actually a directory rather than a + * byte stream, or if \ref stream_t.pf_block is non-NULL. + * + * \param buf buffer to read data into + * \param len buffer length (in bytes) + * + * \retval -1 no data available yet + * \retval 0 end of stream (incl. fatal error) + * \retval positive number of bytes read (no more than len) + */ + ssize_t (*pf_read)(stream_t *, void *buf, size_t len); + + /** + * Read data block. + * + * Callback to read a block of data. The data is read into a block of + * memory allocated by the stream. For some streams, data can be read more + * efficiently in block of a certain size, and/or using a custom allocator + * for buffers. In such case, this callback should be provided instead of + * \ref stream_t.pf_read; otherwise, this should be NULL. + * + * \param eof storage space for end-of-stream flag [OUT] + * (*eof is always false when invoking pf_block(); pf_block() should set + * *eof to true if it detects the end of the stream) + * + * \return a data block, + * NULL if no data available yet, on error and at end-of-stream + */ + block_t *(*pf_block)(stream_t *, bool *eof); + + /** + * Read directory. + * + * Callback to fill an item node from a directory + * (see doc/browsing.txt for details). + * + * NULL if the stream is not a directory. + */ + int (*pf_readdir)(stream_t *, input_item_node_t *); + + /** + * Seek. + * + * Callback to set the stream pointer (in bytes from start). + * + * May be NULL if seeking is not supported. + */ + int (*pf_seek)(stream_t *, uint64_t); + + /** + * Stream control. + * + * Cannot be NULL. + * + * \see stream_query_e + */ + int (*pf_control)(stream_t *, int i_query, va_list); + + /** + * Private data pointer + */ + void *p_sys; + + /* Weak link to parent input */ + input_thread_t *p_input; +}; + +/** + * Possible commands to send to vlc_stream_Control() and vlc_stream_vaControl() + */ +enum stream_query_e +{ + /* capabilities */ + STREAM_CAN_SEEK, /**< arg1= bool * res=cannot fail*/ + STREAM_CAN_FASTSEEK, /**< arg1= bool * res=cannot fail*/ + STREAM_CAN_PAUSE, /**< arg1= bool * res=cannot fail*/ + STREAM_CAN_CONTROL_PACE, /**< arg1= bool * res=cannot fail*/ + /* */ + STREAM_GET_SIZE=6, /**< arg1= uint64_t * res=can fail */ + STREAM_IS_DIRECTORY, /**< res=can fail */ + + /* */ + STREAM_GET_PTS_DELAY = 0x101,/**< arg1= int64_t* res=cannot fail */ + STREAM_GET_TITLE_INFO, /**< arg1=input_title_t*** arg2=int* res=can fail */ + STREAM_GET_TITLE, /**< arg1=unsigned * res=can fail */ + STREAM_GET_SEEKPOINT, /**< arg1=unsigned * res=can fail */ + STREAM_GET_META, /**< arg1= vlc_meta_t * res=can fail */ + STREAM_GET_CONTENT_TYPE, /**< arg1= char ** res=can fail */ + STREAM_GET_SIGNAL, /**< arg1=double *pf_quality, arg2=double *pf_strength res=can fail */ + STREAM_GET_TAGS, /**< arg1=const block_t ** res=can fail */ + + STREAM_SET_PAUSE_STATE = 0x200, /**< arg1= bool res=can fail */ + STREAM_SET_TITLE, /**< arg1= int res=can fail */ + STREAM_SET_SEEKPOINT, /**< arg1= int res=can fail */ + + /* XXX only data read through vlc_stream_Read/Block will be recorded */ + STREAM_SET_RECORD_STATE, /**< arg1=bool, arg2=const char *psz_ext (if arg1 is true) res=can fail */ + + STREAM_SET_PRIVATE_ID_STATE = 0x1000, /* arg1= int i_private_data, bool b_selected res=can fail */ + STREAM_SET_PRIVATE_ID_CA, /* arg1= int i_program_number, uint16_t i_vpid, uint16_t i_apid1, uint16_t i_apid2, uint16_t i_apid3, uint8_t i_length, uint8_t *p_data */ + STREAM_GET_PRIVATE_ID_STATE, /* arg1=int i_private_data arg2=bool * res=can fail */ +}; + +/** + * Reads data from a byte stream. + * + * This function always waits for the requested number of bytes, unless a fatal + * error is encountered or the end-of-stream is reached first. + * + * If the buffer is NULL, data is skipped instead of read. This is effectively + * a relative forward seek, but it works even on non-seekable streams. + * + * \param buf start of buffer to read data into [OUT] + * \param len number of bytes to read + * \return the number of bytes read or a negative value on error. + */ +VLC_API ssize_t vlc_stream_Read(stream_t *, void *buf, size_t len) VLC_USED; + +/** + * Reads partial data from a byte stream. + * + * This function waits until some data is available for reading from the + * stream, a fatal error is encountered or the end-of-stream is reached. + * + * Unlike vlc_stream_Read(), this function does not wait for the full requested + * bytes count. It can return a short count even before the end of the stream + * and in the absence of any error. + * + * \param buf start of buffer to read data into [OUT] + * \param len buffer size (maximum number of bytes to read) + * \return the number of bytes read or a negative value on error. + */ +VLC_API ssize_t vlc_stream_ReadPartial(stream_t *, void *buf, size_t len) +VLC_USED; + +/** + * Peeks at data from a byte stream. + * + * This function buffers for the requested number of bytes, waiting if + * necessary. Then it stores a pointer to the buffer. Unlike vlc_stream_Read() + * or vlc_stream_Block(), this function does not modify the stream read offset. + * + * \note + * The buffer remains valid until the next read/peek or seek operation on the + * same stream. In case of error, the buffer address is undefined. + * + * \param bufp storage space for the buffer address [OUT] + * \param len number of bytes to peek + * \return the number of bytes actually available (shorter than requested if + * the end-of-stream is reached), or a negative value on error. + */ +VLC_API ssize_t vlc_stream_Peek(stream_t *, const uint8_t **, size_t) VLC_USED; + +/** + * Reads a data block from a byte stream. + * + * This function dequeues the next block of data from the byte stream. The + * byte stream back-end decides on the size of the block; the caller cannot + * make any assumption about it. + * + * The function might also return NULL spuriously - this does not necessarily + * imply that the stream is ended nor that it has encountered a nonrecoverable + * error. + * + * This function should be used instead of vlc_stream_Read() or + * vlc_stream_Peek() when the caller can handle reads of any size. + * + * \return either a data block or NULL + */ +VLC_API block_t *vlc_stream_ReadBlock(stream_t *) VLC_USED; + +/** + * Tells the current stream position. + * + * This function tells the current read offset (in bytes) from the start of + * the start of the stream. + * @note The read offset may be larger than the stream size, either because of + * a seek past the end, or because the stream shrank asynchronously. + * + * @return the byte offset from the beginning of the stream (cannot fail) + */ +VLC_API uint64_t vlc_stream_Tell(const stream_t *) VLC_USED; + +/** + * Checks for end of stream. + * + * Checks if the last attempt to reads data from the stream encountered the + * end of stream before the attempt could be fully satisfied. + * The value is initially false, and is reset to false by vlc_stream_Seek(). + * + * \note The function can return false even though the current stream position + * is equal to the stream size. It will return true after the following attempt + * to read more than zero bytes. + * + * \note It might be possible to read after the end of the stream. + * It implies the size of the stream increased asynchronously in the mean time. + * Streams of most types cannot trigger such a case, + * but regular local files notably can. + * + * \note In principles, the stream size should match the stream offset when + * the end-of-stream is reached. But that rule is not enforced; it is entirely + * dependent on the underlying implementation of the stream. + */ +VLC_API bool vlc_stream_Eof(const stream_t *) VLC_USED; + +/** + * Sets the current stream position. + * + * This function changes the read offset within a stream, if the stream + * supports seeking. In case of error, the read offset is not changed. + * + * @note It is possible (but not useful) to seek past the end of a stream. + * + * @param offset byte offset from the beginning of the stream + * @return zero on success, a negative value on error + */ +VLC_API int vlc_stream_Seek(stream_t *, uint64_t offset) VLC_USED; + +VLC_API int vlc_stream_vaControl(stream_t *s, int query, va_list args); + +static inline int vlc_stream_Control(stream_t *s, int query, ...) +{ + va_list ap; + int ret; + + va_start(ap, query); + ret = vlc_stream_vaControl(s, query, ap); + va_end(ap); + return ret; +} + +VLC_API block_t *vlc_stream_Block(stream_t *s, size_t); +VLC_API char *vlc_stream_ReadLine(stream_t *); +VLC_API int vlc_stream_ReadDir(stream_t *, input_item_node_t *); + +/** + * Closes a byte stream. + * \param s byte stream to close + */ +VLC_API void vlc_stream_Delete(stream_t *s); + +VLC_API stream_t *vlc_stream_CommonNew(vlc_object_t *, void (*)(stream_t *)); + +/** + * Get the size of the stream. + */ +VLC_USED static inline int vlc_stream_GetSize( stream_t *s, uint64_t *size ) +{ + return vlc_stream_Control( s, STREAM_GET_SIZE, size ); +} + +static inline int64_t stream_Size( stream_t *s ) +{ + uint64_t i_pos; + + if( vlc_stream_GetSize( s, &i_pos ) ) + return 0; + if( i_pos >> 62 ) + return (int64_t)1 << 62; + return i_pos; +} + +VLC_USED +static inline bool stream_HasExtension( stream_t *s, const char *extension ) +{ + const char *name = (s->psz_filepath != NULL) ? s->psz_filepath + : s->psz_url; + const char *ext = strrchr( name, '.' ); + return ext != NULL && !strcasecmp( ext, extension ); +} + +/** + * Get the Content-Type of a stream, or NULL if unknown. + * Result must be free()'d. + */ +static inline char *stream_ContentType( stream_t *s ) +{ + char *res; + if( vlc_stream_Control( s, STREAM_GET_CONTENT_TYPE, &res ) ) + return NULL; + return res; +} + +/** + * Get the mime-type of a stream + * + * \warning the returned resource is to be freed by the caller + * \return the mime-type, or `NULL` if unknown + **/ +VLC_USED +static inline char *stream_MimeType( stream_t *s ) +{ + char* mime_type = stream_ContentType( s ); + + if( mime_type ) /* strip parameters */ + mime_type[strcspn( mime_type, " ;" )] = '\0'; + + return mime_type; +} + +/** + * Checks for a MIME type. + * + * Checks if the stream has a specific MIME type. + */ +VLC_USED +static inline bool stream_IsMimeType(stream_t *s, const char *type) +{ + char *mime = stream_MimeType(s); + if (mime == NULL) + return false; + + bool ok = !strcasecmp(mime, type); + free(mime); + return ok; +} + +/** + * Create a stream from a memory buffer. + * + * \param obj parent VLC object + * \param base start address of the memory buffer to read from + * \param size size in bytes of the memory buffer + * \param preserve if false, free(base) will be called when the stream is + * destroyed; if true, the memory buffer is preserved + */ +VLC_API stream_t *vlc_stream_MemoryNew(vlc_object_t *obj, uint8_t *base, + size_t size, bool preserve) VLC_USED; +#define vlc_stream_MemoryNew(a, b, c, d) \ + vlc_stream_MemoryNew(VLC_OBJECT(a), b, c, d) + +/** + * Create a stream_t reading from a URL. + * You must delete it using vlc_stream_Delete. + */ +VLC_API stream_t * vlc_stream_NewURL(vlc_object_t *obj, const char *url) +VLC_USED; +#define vlc_stream_NewURL(a, b) vlc_stream_NewURL(VLC_OBJECT(a), b) + +/** + * \defgroup stream_fifo FIFO stream + * In-memory anonymous pipe + @{ + */ + +/** + * Creates a FIFO stream. + * + * Creates a non-seekable byte stream object whose byte stream is generated + * by another thread in the process. This is the LibVLC equivalent of an + * anonymous pipe/FIFO. + * + * On the reader side, the normal stream functions are used, + * e.g. vlc_stream_Read() and vlc_stream_Delete(). + * + * The created stream object is automatically destroyed when both the reader + * and the writer sides have been closed, with vlc_stream_Delete() and + * vlc_stream_fifo_Close() respectively. + * + * \param parent parent VLC object for the stream + * \return a stream object or NULL on memory error. + */ +VLC_API stream_t *vlc_stream_fifo_New(vlc_object_t *parent); + +/** + * Writes a block to a FIFO stream. + * + * \param s FIFO stream created by vlc_stream_fifo_New() + * \param block data block to write to the stream + * \return 0 on success. -1 if the reader end has already been closed + * (errno is then set to EPIPE, and the block is deleted). + * + * \bug No congestion control is performed. If the reader end is not keeping + * up with the writer end, buffers will accumulate in memory. + */ +VLC_API int vlc_stream_fifo_Queue(stream_t *s, block_t *block); + +/** + * Writes data to a FIFO stream. + * + * This is a convenience helper for vlc_stream_fifo_Queue(). + * \param s FIFO stream created by vlc_stream_fifo_New() + * \param buf start address of data to write + * \param len length of data to write in bytes + * \return len on success, or -1 on error (errno is set accordingly) + */ +VLC_API ssize_t vlc_stream_fifo_Write(stream_t *s, const void *buf, + size_t len); + +/** + * Terminates a FIFO stream. + * + * Marks the end of the FIFO stream and releases any underlying resources. + * \param s FIFO stream created by vlc_stream_fifo_New() + */ +VLC_API void vlc_stream_fifo_Close(stream_t *s); + +/** + * @} + */ + +/** + * Try to add a stream filter to an open stream. + * @return New stream to use, or NULL if the filter could not be added. + **/ +VLC_API stream_t* vlc_stream_FilterNew( stream_t *p_source, const char *psz_stream_filter ); + +/** + * Default ReadDir implementation for stream Filter. This implementation just + * forward the pf_readdir call to the p_source stream. + */ +VLC_API int vlc_stream_FilterDefaultReadDir(stream_t *s, + input_item_node_t *p_node); + +/** + * Sets vlc_stream_FilterDefaultReadDir as the pf_readdir callback for this + * stream filter. + */ +#define stream_FilterSetDefaultReadDir(stream) \ +do { \ + (stream)->pf_readdir = vlc_stream_FilterDefaultReadDir; \ +} while (0) + +/** + * @} + */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_stream_extractor.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_stream_extractor.h new file mode 100644 index 0000000..78c51c0 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_stream_extractor.h @@ -0,0 +1,170 @@ +/***************************************************************************** + * vlc_stream_extractor.h + ***************************************************************************** + * Copyright (C) 2016 VLC authors and VideoLAN + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_STREAM_EXTRACTOR_H +#define VLC_STREAM_EXTRACTOR_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup stream_extractor Stream Extractor + * \ingroup input + * + * If a stream can be viewed as a directory, such as when opening a + * compressed archive, a \em stream-extractor is used to get access to + * the entities inside said stream. + * + * A \em stream-extractor can do one of two things; + * + * - lists the logical entries within a stream: + * - type = \ref stream_directory_t + * - capability = "stream_directory" + * + * - extract data associated with one specific entry within a stream: + * - type = \ref stream_extractor_t + * - capability = "stream_extractor" + * + * @{ + * + **/ + +typedef struct stream_extractor_t { + VLC_COMMON_MEMBERS + + /** + * \name Callbacks for entity extraction + * + * The following members shall be populated as specified by the + * documentation associated with \ref stream_t for the equivalent name. + * + * @{ + **/ + ssize_t (*pf_read)(struct stream_extractor_t*, void* buf, size_t len); + block_t* (*pf_block)(struct stream_extractor_t*, bool* eof); + int (*pf_seek)(struct stream_extractor_t*, uint64_t); + int (*pf_control)(struct stream_extractor_t*, int request, va_list args); + /** @} */ + + char const* identifier; /**< the name of the entity to be extracted */ + stream_t* source; /**< the source stream to be consumed */ + void* p_sys; /**< private opaque handle to be used by the module */ + +} stream_extractor_t; + +typedef struct stream_directory_t { + VLC_COMMON_MEMBERS + + /** + * \name Callbacks for stream directories + * + * The following members shall be populated as specified by the + * documentation associated with \ref stream_t for the equivalent name. + * + * @{ + **/ + int (*pf_readdir)(struct stream_directory_t*, input_item_node_t* ); + /** @} */ + + stream_t* source; /**< the source stream to be consumed */ + void* p_sys; /**< private opaque handle to be used by the module */ + +} stream_directory_t; + +/** + * Create a stream for the data referred to by a \ref mrl + * + * This function will create a \ref stream that reads from the specified \ref + * mrl, potentially making use of \ref stream_extractor%s to access named + * entities within the data read from the original source. + * + * - See the \ref mrl specification for further information. + * - The returned resource shall be deleted through \ref vlc_stream_Delete. + * + * \warning This function is only to be used when \ref mrl functionality is + * explicitly needed. \ref vlc_stream_NewURL shall be used where + * applicable. + * + * \param obj the owner of the requested stream + * \param mrl the mrl for which the stream_t should be created + * \return `NULL` on error, a pointer to \ref stream_t on success. + **/ +VLC_API stream_t * vlc_stream_NewMRL(vlc_object_t *obj, const char *mrl) +VLC_USED; +#define vlc_stream_NewMRL(a, b) vlc_stream_NewMRL(VLC_OBJECT(a), b) + +/** + * Create a relative MRL for the associated entity + * + * This function shall be used by stream_directory_t's in order to + * generate an MRL that refers to an entity within the stream. Normally + * this function will only be invoked within `pf_readdir` in order to + * get the virtual path of the listed items. + * + * \warning the returned value is to be freed by the caller + * + * \param extractor the stream_directory_t for which the entity belongs + * \param subentry the name of the entity in question + * + * \return a pointer to the resulting MRL on success, NULL on failure + **/ +VLC_API char* vlc_stream_extractor_CreateMRL( stream_directory_t*, + char const* subentry ); + +/** + * \name Attach a stream-extractor to the passed stream + * + * These functions are used to attach a stream extractor to an already existing + * stream. As hinted by their names, \ref vlc_stream_extractor_Attach will + * attach an \em entity-extractor, whereas \ref vlc_stream_directory_Attach + * will attach a \em stream-directory. + * + * \param[out] stream a pointer-to-pointer to stream, `*stream` will + * refer to the attached stream on success, and left + * untouched on failure. + * \param identifier (if present) NULL or a c-style string referring to the + * desired entity + * \param module_name NULL or an explicit stream-extractor module name + * + * \return VLC_SUCCESS if a stream-extractor was successfully + * attached, an error-code on failure. + * + * @{ + **/ + +VLC_API int vlc_stream_extractor_Attach( stream_t** source, + char const* identifier, + char const* module_name ); + +VLC_API int vlc_stream_directory_Attach( stream_t** source, + char const* module_name ); +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif +#endif /* include-guard */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_strings.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_strings.h new file mode 100644 index 0000000..9828fbd --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_strings.h @@ -0,0 +1,159 @@ +/***************************************************************************** + * vlc_strings.h: String functions + ***************************************************************************** + * Copyright (C) 2006 VLC authors and VideoLAN + * $Id$ + * + * Authors: Antoine Cellerier + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_STRINGS_H +#define VLC_STRINGS_H 1 + +/** + * \defgroup strings String helpers + * @{ + * \file + * Helper functions for nul-terminated strings + */ + +static inline int vlc_ascii_toupper( int c ) +{ + if ( c >= 'a' && c <= 'z' ) + return c + ( 'A' - 'a' ); + else + return c; +} + +static inline int vlc_ascii_tolower( int c ) +{ + if ( c >= 'A' && c <= 'Z' ) + return c + ( 'a' - 'A' ); + else + return c; +} + +/** + * Compare two ASCII strings ignoring case. + * + * The result is independent of the locale. If there are non-ASCII + * characters in the strings, their cases are NOT ignored in the + * comparison. + */ +static inline int vlc_ascii_strcasecmp( const char *psz1, const char *psz2 ) +{ + const char *s1 = psz1; + const char *s2 = psz2; + int d = vlc_ascii_tolower( *s1 ) - vlc_ascii_tolower( *s2 ); + while ( *s1 && d == 0) + { + s1++; + s2++; + d = vlc_ascii_tolower( *s1 ) - vlc_ascii_tolower( *s2 ); + } + + return d; +} + +static inline int vlc_ascii_strncasecmp( const char *psz1, const char *psz2, size_t n ) +{ + const char *s1 = psz1; + const char *s2 = psz2; + const char *s1end = psz1 + n; + int d = vlc_ascii_tolower( *s1 ) - vlc_ascii_tolower( *s2 ); + while ( *s1 && s1 < s1end && d == 0) + { + s1++; + s2++; + d = vlc_ascii_tolower( *s1 ) - vlc_ascii_tolower( *s2 ); + } + + if (s1 == s1end) + return 0; + else + return d; +} + +/** + * Decodes XML entities. + * + * Decodes a null-terminated UTF-8 string of XML character data into a regular + * nul-terminated UTF-8 string. In other words, replaces XML entities and + * numerical character references with the corresponding characters. + * + * This function operates in place (the output is always of smaller or equal + * length than the input) and always succeeds. + * + * \param str null-terminated string [IN/OUT] + */ +VLC_API void vlc_xml_decode(char *st); + +/** + * Encodes XML entites. + * + * Substitutes unsafe characters in a null-terminated UTF-8 strings with an + * XML entity or numerical character reference. + * + * \param str null terminated UTF-8 string + * \return On success, a heap-allocated null-terminated string is returned. + * If the input string was not a valid UTF-8 sequence, NULL is returned and + * errno is set to EILSEQ. + * If there was not enough memory, NULL is returned and errno is to ENOMEM. + */ +VLC_API char *vlc_xml_encode(const char *str) VLC_MALLOC; + +VLC_API char * vlc_b64_encode_binary( const uint8_t *, size_t ); +VLC_API char * vlc_b64_encode( const char * ); + +VLC_API size_t vlc_b64_decode_binary_to_buffer( uint8_t *p_dst, size_t i_dst_max, const char *psz_src ); +VLC_API size_t vlc_b64_decode_binary( uint8_t **pp_dst, const char *psz_src ); +VLC_API char * vlc_b64_decode( const char *psz_src ); + +/** + * Convenience wrapper for strftime(). + * + * Formats the current time into a heap-allocated string. + * + * @param tformat time format (as with C strftime()) + * @return an allocated string (must be free()'d), or NULL on memory error. + */ +VLC_API char *vlc_strftime( const char * ); + +/** + * Formats input meta-data. + * + * Formats input and input item meta-informations into a heap-allocated string. + */ +VLC_API char *vlc_strfinput( input_thread_t *, const char * ); + +static inline char *str_format( input_thread_t *input, const char *fmt ) +{ + char *s1 = vlc_strftime( fmt ); + char *s2 = vlc_strfinput( input, s1 ); + free( s1 ); + return s2; +} + +VLC_API int vlc_filenamecmp(const char *, const char *); + +void filename_sanitize(char *); + +/** + * @} + */ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_subpicture.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_subpicture.h new file mode 100644 index 0000000..6fd872d --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_subpicture.h @@ -0,0 +1,237 @@ +/***************************************************************************** + * vlc_subpicture.h: subpicture definitions + ***************************************************************************** + * Copyright (C) 1999 - 2009 VLC authors and VideoLAN + * $Id$ + * + * Authors: Vincent Seguin + * Samuel Hocevar + * Olivier Aubert + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_SUBPICTURE_H +#define VLC_SUBPICTURE_H 1 + +/** + */ + +#include +#include + +/** + * \defgroup subpicture Video sub-pictures + * \ingroup video_output + * Subpictures are pictures that should be displayed on top of the video, like + * subtitles and OSD + * @{ + * \file + * Subpictures functions + */ + +/** + * Video subtitle region spu core private + */ +typedef struct subpicture_region_private_t subpicture_region_private_t; + +/** + * Video subtitle region + * + * A subtitle region is defined by a picture (graphic) and its rendering + * coordinates. + * Subtitles contain a list of regions. + */ +struct subpicture_region_t +{ + video_format_t fmt; /**< format of the picture */ + picture_t *p_picture; /**< picture comprising this region */ + + int i_x; /**< position of region, relative to alignment */ + int i_y; /**< position of region, relative to alignment */ + int i_align; /**< alignment flags of region */ + int i_alpha; /**< transparency */ + + /* Parameters for text regions (p_picture to be rendered) */ + text_segment_t *p_text; /**< subtitle text, made of a list of segments */ + int i_text_align; /**< alignment flags of region content */ + bool b_noregionbg; /**< render background under text only */ + bool b_gridmode; /** if the decoder sends row/cols based output */ + bool b_balanced_text; /** try to balance wrapped text lines */ + int i_max_width; /** horizontal rendering/cropping target/limit */ + int i_max_height; /** vertical rendering/cropping target/limit */ + + subpicture_region_t *p_next; /**< next region in the list */ + subpicture_region_private_t *p_private; /**< Private data for spu_t *only* */ +}; + +/* Subpicture region position flags */ +#define SUBPICTURE_ALIGN_LEFT 0x1 +#define SUBPICTURE_ALIGN_RIGHT 0x2 +#define SUBPICTURE_ALIGN_TOP 0x4 +#define SUBPICTURE_ALIGN_BOTTOM 0x8 +#define SUBPICTURE_ALIGN_MASK ( SUBPICTURE_ALIGN_LEFT|SUBPICTURE_ALIGN_RIGHT| \ + SUBPICTURE_ALIGN_TOP |SUBPICTURE_ALIGN_BOTTOM ) +/** + * This function will create a new subpicture region. + * + * You must use subpicture_region_Delete to destroy it. + */ +VLC_API subpicture_region_t * subpicture_region_New( const video_format_t *p_fmt ); + +/** + * This function will destroy a subpicture region allocated by + * subpicture_region_New. + * + * You may give it NULL. + */ +VLC_API void subpicture_region_Delete( subpicture_region_t *p_region ); + +/** + * This function will destroy a list of subpicture regions allocated by + * subpicture_region_New. + * + * Provided for convenience. + */ +VLC_API void subpicture_region_ChainDelete( subpicture_region_t *p_head ); + +/** + * This function will copy a subpicture region to a new allocated one + * and transfer all the properties + * + * Provided for convenience. + */ +VLC_API subpicture_region_t *subpicture_region_Copy( subpicture_region_t *p_region ); + +/** + * + */ +typedef struct subpicture_updater_sys_t subpicture_updater_sys_t; +typedef struct +{ + /** Optional pre update callback, usually useful on video format change. + * Will skip pf_update on VLC_SUCCESS, or will delete every region before + * the call to pf_update */ + int (*pf_validate)( subpicture_t *, + bool has_src_changed, const video_format_t *p_fmt_src, + bool has_dst_changed, const video_format_t *p_fmt_dst, + vlc_tick_t); + /** Mandatory callback called after pf_validate and doing + * the main job of creating the subpicture regions for the + * current video_format */ + void (*pf_update) ( subpicture_t *, + const video_format_t *p_fmt_src, + const video_format_t *p_fmt_dst, + vlc_tick_t ); + /** Optional callback for subpicture private data cleanup */ + void (*pf_destroy) ( subpicture_t * ); + subpicture_updater_sys_t *p_sys; +} subpicture_updater_t; + +typedef struct subpicture_private_t subpicture_private_t; + +/** + * Video subtitle + * + * Any subtitle destined to be displayed by a video output thread should + * be stored in this structure from it's creation to it's effective display. + * Subtitle type and flags should only be modified by the output thread. Note + * that an empty subtitle MUST have its flags set to 0. + */ +struct subpicture_t +{ + /** \name Channel ID */ + /**@{*/ + int i_channel; /**< subpicture channel ID */ + /**@}*/ + + /** \name Type and flags + Should NOT be modified except by the vout thread */ + /**@{*/ + int64_t i_order; /** an increasing unique number */ + subpicture_t * p_next; /**< next subtitle to be displayed */ + /**@}*/ + + subpicture_region_t *p_region; /**< region list composing this subtitle */ + + /** \name Date properties */ + /**@{*/ + vlc_tick_t i_start; /**< beginning of display date */ + vlc_tick_t i_stop; /**< end of display date */ + bool b_ephemer; /**< If this flag is set to true the subtitle + will be displayed until the next one appear */ + bool b_fade; /**< enable fading */ + /**@}*/ + + /** \name Display properties + * These properties are only indicative and may be + * changed by the video output thread, or simply ignored depending of the + * subtitle type. */ + /**@{*/ + bool b_subtitle; /**< the picture is a movie subtitle */ + bool b_absolute; /**< position is absolute */ + int i_original_picture_width; /**< original width of the movie */ + int i_original_picture_height;/**< original height of the movie */ + int i_alpha; /**< transparency */ + /**@}*/ + + subpicture_updater_t updater; + + subpicture_private_t *p_private; /* Reserved to the core */ +}; + +/** + * This function create a new empty subpicture. + * + * You must use subpicture_Delete to destroy it. + */ +VLC_API subpicture_t * subpicture_New( const subpicture_updater_t * ); + +/** + * This function delete a subpicture created by subpicture_New. + * You may give it NULL. + */ +VLC_API void subpicture_Delete( subpicture_t *p_subpic ); + +/** + * This function will create a subpicture having one region in the requested + * chroma showing the given picture. + * + * The picture_t given is not released nor used inside the + * returned subpicture_t. + */ +VLC_API subpicture_t * subpicture_NewFromPicture( vlc_object_t *, picture_t *, vlc_fourcc_t i_chroma ); + +/** + * This function will update the content of a subpicture created with + * a non NULL subpicture_updater_t. + */ +VLC_API void subpicture_Update( subpicture_t *, const video_format_t *src, const video_format_t *, vlc_tick_t ); + +/** + * This function will blend a given subpicture onto a picture. + * + * The subpicture and all its region must: + * - be absolute. + * - not be ephemere. + * - not have the fade flag. + * - contains only picture (no text rendering). + * \return the number of region(s) successfully blent + */ +VLC_API unsigned picture_BlendSubpicture( picture_t *, filter_t *p_blend, subpicture_t * ); + +/**@}*/ + +#endif /* _VLC_VIDEO_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_text_style.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_text_style.h new file mode 100644 index 0000000..c24d76a --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_text_style.h @@ -0,0 +1,404 @@ +/***************************************************************************** + * vlc_text_style.h: text_style_t definition and helpers. + ***************************************************************************** + * Copyright (C) 1999-2010 VLC authors and VideoLAN + * $Id$ + * + * Authors: Derk-Jan Hartman + * basOS G + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_TEXT_STYLE_H +#define VLC_TEXT_STYLE_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Text style + * + * A text style is used to specify the formatting of text. + * A font renderer can use the supplied information to render the + * text specified. + */ +typedef struct +{ + /* Family font names */ + char * psz_fontname; /**< The name of the font */ + char * psz_monofontname; /**< The name of the mono font */ + + uint16_t i_features; /**< Feature flags (means non default) */ + uint16_t i_style_flags; /**< Formatting style flags */ + + /* Font style */ + float f_font_relsize; /**< The font size in video height % */ + int i_font_size; /**< The font size in pixels */ + int i_font_color; /**< The color of the text 0xRRGGBB + (native endianness) */ + uint8_t i_font_alpha; /**< The transparency of the text.*/ + int i_spacing; /**< The spaceing between glyphs in pixels */ + + /* Outline */ + int i_outline_color; /**< The color of the outline 0xRRGGBB */ + uint8_t i_outline_alpha; /**< The transparency of the outline */ + int i_outline_width; /**< The width of the outline in pixels */ + + /* Shadow */ + int i_shadow_color; /**< The color of the shadow 0xRRGGBB */ + uint8_t i_shadow_alpha; /**< The transparency of the shadow. */ + int i_shadow_width; /**< The width of the shadow in pixels */ + + /* Background (and karaoke) */ + int i_background_color;/**< The color of the background 0xRRGGBB */ + uint8_t i_background_alpha;/**< The transparency of the background */ + int i_karaoke_background_color;/**< Background color for karaoke 0xRRGGBB */ + uint8_t i_karaoke_background_alpha;/**< The transparency of the karaoke bg */ + + /* Line breaking */ + enum + { + STYLE_WRAP_DEFAULT = 0, /**< Breaks on whitespace or fallback on char */ + STYLE_WRAP_CHAR, /**< Breaks at character level only */ + STYLE_WRAP_NONE, /**< No line breaks (except explicit ones) */ + } e_wrapinfo; +} text_style_t; + +#define STYLE_ALPHA_OPAQUE 0xFF +#define STYLE_ALPHA_TRANSPARENT 0x00 + +/* Features flags for \ref i_features */ +#define STYLE_NO_DEFAULTS 0x0 +#define STYLE_FULLY_SET 0xFFFF +#define STYLE_HAS_FONT_COLOR (1 << 0) +#define STYLE_HAS_FONT_ALPHA (1 << 1) +#define STYLE_HAS_FLAGS (1 << 2) +#define STYLE_HAS_OUTLINE_COLOR (1 << 3) +#define STYLE_HAS_OUTLINE_ALPHA (1 << 4) +#define STYLE_HAS_SHADOW_COLOR (1 << 5) +#define STYLE_HAS_SHADOW_ALPHA (1 << 6) +#define STYLE_HAS_BACKGROUND_COLOR (1 << 7) +#define STYLE_HAS_BACKGROUND_ALPHA (1 << 8) +#define STYLE_HAS_K_BACKGROUND_COLOR (1 << 9) +#define STYLE_HAS_K_BACKGROUND_ALPHA (1 << 10) +#define STYLE_HAS_WRAP_INFO (1 << 11) + +/* Style flags for \ref text_style_t */ +#define STYLE_BOLD (1 << 0) +#define STYLE_ITALIC (1 << 1) +#define STYLE_OUTLINE (1 << 2) +#define STYLE_SHADOW (1 << 3) +#define STYLE_BACKGROUND (1 << 4) +#define STYLE_UNDERLINE (1 << 5) +#define STYLE_STRIKEOUT (1 << 6) +#define STYLE_HALFWIDTH (1 << 7) +#define STYLE_MONOSPACED (1 << 8) +#define STYLE_DOUBLEWIDTH (1 << 9) +#define STYLE_BLINK_FOREGROUND (1 << 10) +#define STYLE_BLINK_BACKGROUND (1 << 11) + +#define STYLE_DEFAULT_FONT_SIZE 20 +#define STYLE_DEFAULT_REL_FONT_SIZE 6.25 + + +typedef struct text_segment_t text_segment_t; +/** + * Text segment for subtitles + * + * This structure is used to store a formatted text, with mixed styles + * Every segment is comprised of one text and a unique style + * + * On style change, a new segment is created with the next part of text + * and the new style, and chained to the list + * + * Create with text_segment_New and clean the chain with + * text_segment_ChainDelete + */ +struct text_segment_t { + char *psz_text; /**< text string of the segment */ + text_style_t *style; /**< style applied to this segment */ + text_segment_t *p_next; /**< next segment */ +}; + +/** + * Create a default text style + */ +VLC_API text_style_t * text_style_New( void ); + +/** + * Create a text style + * + * Set feature flags as argument if you want to set style defaults + */ +VLC_API text_style_t * text_style_Create( int ); + +/** + * Copy a text style into another + */ +VLC_API text_style_t * text_style_Copy( text_style_t *, const text_style_t * ); + +/** + * Duplicate a text style + */ +VLC_API text_style_t * text_style_Duplicate( const text_style_t * ); + +/** + * Merge two styles using non default values + * + * Set b_override to true if you also want to overwrite non-defaults + */ +VLC_API void text_style_Merge( text_style_t *, const text_style_t *, bool b_override ); + +/** + * Delete a text style created by text_style_New or text_style_Duplicate + */ +VLC_API void text_style_Delete( text_style_t * ); + +/** + * This function will create a new text segment. + * + * You should use text_segment_ChainDelete to destroy it, to clean all + * the linked segments, or text_segment_Delete to free a specic one + * + * This duplicates the string passed as argument + */ +VLC_API text_segment_t *text_segment_New( const char * ); + +/** + * This function will create a new text segment and duplicates the style passed as argument + * + * You should use text_segment_ChainDelete to destroy it, to clean all + * the linked segments, or text_segment_Delete to free a specic one + * + * This doesn't initialize the text. + */ +VLC_API text_segment_t *text_segment_NewInheritStyle( const text_style_t* p_style ); + +/** + * Delete a text segment and its content. + * + * This assumes the segment is not part of a chain + */ +VLC_API void text_segment_Delete( text_segment_t * ); + +/** + * This function will destroy a list of text segments allocated + * by text_segment_New. + * + * You may pass it NULL. + */ +VLC_API void text_segment_ChainDelete( text_segment_t * ); + +/** + * This function will copy a text_segment and its chain into a new one + * + * You may give it NULL, but it will return NULL. + */ +VLC_API text_segment_t * text_segment_Copy( text_segment_t * ); + +static const struct { + const char *psz_name; + uint32_t i_value; +} p_html_colors[] = { + /* Official html colors */ + { "Aqua", 0x00FFFF }, + { "Black", 0x000000 }, + { "Blue", 0x0000FF }, + { "Fuchsia", 0xFF00FF }, + { "Gray", 0x808080 }, + { "Green", 0x008000 }, + { "Lime", 0x00FF00 }, + { "Maroon", 0x800000 }, + { "Navy", 0x000080 }, + { "Olive", 0x808000 }, + { "Purple", 0x800080 }, + { "Red", 0xFF0000 }, + { "Silver", 0xC0C0C0 }, + { "Teal", 0x008080 }, + { "White", 0xFFFFFF }, + { "Yellow", 0xFFFF00 }, + + /* Common ones */ + { "AliceBlue", 0xF0F8FF }, + { "AntiqueWhite", 0xFAEBD7 }, + { "Aqua", 0x00FFFF }, + { "Aquamarine", 0x7FFFD4 }, + { "Azure", 0xF0FFFF }, + { "Beige", 0xF5F5DC }, + { "Bisque", 0xFFE4C4 }, + { "Black", 0x000000 }, + { "BlanchedAlmond", 0xFFEBCD }, + { "Blue", 0x0000FF }, + { "BlueViolet", 0x8A2BE2 }, + { "Brown", 0xA52A2A }, + { "BurlyWood", 0xDEB887 }, + { "CadetBlue", 0x5F9EA0 }, + { "Chartreuse", 0x7FFF00 }, + { "Chocolate", 0xD2691E }, + { "Coral", 0xFF7F50 }, + { "CornflowerBlue", 0x6495ED }, + { "Cornsilk", 0xFFF8DC }, + { "Crimson", 0xDC143C }, + { "Cyan", 0x00FFFF }, + { "DarkBlue", 0x00008B }, + { "DarkCyan", 0x008B8B }, + { "DarkGoldenRod", 0xB8860B }, + { "DarkGray", 0xA9A9A9 }, + { "DarkGrey", 0xA9A9A9 }, + { "DarkGreen", 0x006400 }, + { "DarkKhaki", 0xBDB76B }, + { "DarkMagenta", 0x8B008B }, + { "DarkOliveGreen", 0x556B2F }, + { "Darkorange", 0xFF8C00 }, + { "DarkOrchid", 0x9932CC }, + { "DarkRed", 0x8B0000 }, + { "DarkSalmon", 0xE9967A }, + { "DarkSeaGreen", 0x8FBC8F }, + { "DarkSlateBlue", 0x483D8B }, + { "DarkSlateGray", 0x2F4F4F }, + { "DarkSlateGrey", 0x2F4F4F }, + { "DarkTurquoise", 0x00CED1 }, + { "DarkViolet", 0x9400D3 }, + { "DeepPink", 0xFF1493 }, + { "DeepSkyBlue", 0x00BFFF }, + { "DimGray", 0x696969 }, + { "DimGrey", 0x696969 }, + { "DodgerBlue", 0x1E90FF }, + { "FireBrick", 0xB22222 }, + { "FloralWhite", 0xFFFAF0 }, + { "ForestGreen", 0x228B22 }, + { "Fuchsia", 0xFF00FF }, + { "Gainsboro", 0xDCDCDC }, + { "GhostWhite", 0xF8F8FF }, + { "Gold", 0xFFD700 }, + { "GoldenRod", 0xDAA520 }, + { "Gray", 0x808080 }, + { "Grey", 0x808080 }, + { "Green", 0x008000 }, + { "GreenYellow", 0xADFF2F }, + { "HoneyDew", 0xF0FFF0 }, + { "HotPink", 0xFF69B4 }, + { "IndianRed", 0xCD5C5C }, + { "Indigo", 0x4B0082 }, + { "Ivory", 0xFFFFF0 }, + { "Khaki", 0xF0E68C }, + { "Lavender", 0xE6E6FA }, + { "LavenderBlush", 0xFFF0F5 }, + { "LawnGreen", 0x7CFC00 }, + { "LemonChiffon", 0xFFFACD }, + { "LightBlue", 0xADD8E6 }, + { "LightCoral", 0xF08080 }, + { "LightCyan", 0xE0FFFF }, + { "LightGoldenRodYellow", 0xFAFAD2 }, + { "LightGray", 0xD3D3D3 }, + { "LightGrey", 0xD3D3D3 }, + { "LightGreen", 0x90EE90 }, + { "LightPink", 0xFFB6C1 }, + { "LightSalmon", 0xFFA07A }, + { "LightSeaGreen", 0x20B2AA }, + { "LightSkyBlue", 0x87CEFA }, + { "LightSlateGray", 0x778899 }, + { "LightSlateGrey", 0x778899 }, + { "LightSteelBlue", 0xB0C4DE }, + { "LightYellow", 0xFFFFE0 }, + { "Lime", 0x00FF00 }, + { "LimeGreen", 0x32CD32 }, + { "Linen", 0xFAF0E6 }, + { "Magenta", 0xFF00FF }, + { "Maroon", 0x800000 }, + { "MediumAquaMarine", 0x66CDAA }, + { "MediumBlue", 0x0000CD }, + { "MediumOrchid", 0xBA55D3 }, + { "MediumPurple", 0x9370D8 }, + { "MediumSeaGreen", 0x3CB371 }, + { "MediumSlateBlue", 0x7B68EE }, + { "MediumSpringGreen", 0x00FA9A }, + { "MediumTurquoise", 0x48D1CC }, + { "MediumVioletRed", 0xC71585 }, + { "MidnightBlue", 0x191970 }, + { "MintCream", 0xF5FFFA }, + { "MistyRose", 0xFFE4E1 }, + { "Moccasin", 0xFFE4B5 }, + { "NavajoWhite", 0xFFDEAD }, + { "Navy", 0x000080 }, + { "OldLace", 0xFDF5E6 }, + { "Olive", 0x808000 }, + { "OliveDrab", 0x6B8E23 }, + { "Orange", 0xFFA500 }, + { "OrangeRed", 0xFF4500 }, + { "Orchid", 0xDA70D6 }, + { "PaleGoldenRod", 0xEEE8AA }, + { "PaleGreen", 0x98FB98 }, + { "PaleTurquoise", 0xAFEEEE }, + { "PaleVioletRed", 0xD87093 }, + { "PapayaWhip", 0xFFEFD5 }, + { "PeachPuff", 0xFFDAB9 }, + { "Peru", 0xCD853F }, + { "Pink", 0xFFC0CB }, + { "Plum", 0xDDA0DD }, + { "PowderBlue", 0xB0E0E6 }, + { "Purple", 0x800080 }, + { "RebeccaPurple", 0x663399 }, + { "Red", 0xFF0000 }, + { "RosyBrown", 0xBC8F8F }, + { "RoyalBlue", 0x4169E1 }, + { "SaddleBrown", 0x8B4513 }, + { "Salmon", 0xFA8072 }, + { "SandyBrown", 0xF4A460 }, + { "SeaGreen", 0x2E8B57 }, + { "SeaShell", 0xFFF5EE }, + { "Sienna", 0xA0522D }, + { "Silver", 0xC0C0C0 }, + { "SkyBlue", 0x87CEEB }, + { "SlateBlue", 0x6A5ACD }, + { "SlateGray", 0x708090 }, + { "SlateGrey", 0x708090 }, + { "Snow", 0xFFFAFA }, + { "SpringGreen", 0x00FF7F }, + { "SteelBlue", 0x4682B4 }, + { "Tan", 0xD2B48C }, + { "Teal", 0x008080 }, + { "Thistle", 0xD8BFD8 }, + { "Tomato", 0xFF6347 }, + { "Turquoise", 0x40E0D0 }, + { "Violet", 0xEE82EE }, + { "Wheat", 0xF5DEB3 }, + { "White", 0xFFFFFF }, + { "WhiteSmoke", 0xF5F5F5 }, + { "Yellow", 0xFFFF00 }, + { "YellowGreen", 0x9ACD32 }, + + { NULL, 0 } +}; + +/** + * Returns an integer representation of an HTML color. + * + * @param psz_value An HTML color, which can be either: + * - A standard HTML color (red, cyan, ...) as defined in p_html_colors + * - An hexadecimal color, of the form [#][AA]RRGGBB + * @param ok If non-null, true will be stored in this pointer to signal + * a successful conversion + */ +VLC_API unsigned int vlc_html_color( const char *psz_value, bool* ok ); + +#ifdef __cplusplus +} +#endif + +#endif /* VLC_TEXT_STYLE_H */ + diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_threads.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_threads.h new file mode 100644 index 0000000..0ad4629 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_threads.h @@ -0,0 +1,1083 @@ +/***************************************************************************** + * vlc_threads.h : threads implementation for the VideoLAN client + * This header provides portable declarations for mutexes & conditions + ***************************************************************************** + * Copyright (C) 1999, 2002 VLC authors and VideoLAN + * Copyright © 2007-2016 Rémi Denis-Courmont + * + * Authors: Jean-Marc Dressler + * Samuel Hocevar + * Gildas Bazin + * Christophe Massiot + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_THREADS_H_ +#define VLC_THREADS_H_ + +/** + * \ingroup os + * \defgroup thread Threads and synchronization primitives + * @{ + * \file + * Thread primitive declarations + */ + +/** + * Issues an explicit deferred cancellation point. + * + * This has no effects if thread cancellation is disabled. + * This can be called when there is a rather slow non-sleeping operation. + * This is also used to force a cancellation point in a function that would + * otherwise not always be one (block_FifoGet() is an example). + */ +VLC_API void vlc_testcancel(void); + +#if defined (_WIN32) +# include +# ifndef ETIMEDOUT +# define ETIMEDOUT 10060 /* This is the value in winsock.h. */ +# endif + +typedef struct vlc_thread *vlc_thread_t; +# define VLC_THREAD_CANCELED NULL +# define LIBVLC_NEED_SLEEP +typedef struct +{ + bool dynamic; + union + { + struct + { + bool locked; + unsigned long contention; + }; + CRITICAL_SECTION mutex; + }; +} vlc_mutex_t; +#define VLC_STATIC_MUTEX { false, { { false, 0 } } } +#define LIBVLC_NEED_CONDVAR +#define LIBVLC_NEED_SEMAPHORE +#define LIBVLC_NEED_RWLOCK +typedef struct vlc_threadvar *vlc_threadvar_t; +typedef struct vlc_timer *vlc_timer_t; + +# define VLC_THREAD_PRIORITY_LOW 0 +# define VLC_THREAD_PRIORITY_INPUT THREAD_PRIORITY_ABOVE_NORMAL +# define VLC_THREAD_PRIORITY_AUDIO THREAD_PRIORITY_HIGHEST +# define VLC_THREAD_PRIORITY_VIDEO 0 +# define VLC_THREAD_PRIORITY_OUTPUT THREAD_PRIORITY_ABOVE_NORMAL +# define VLC_THREAD_PRIORITY_HIGHEST THREAD_PRIORITY_TIME_CRITICAL + +static inline int vlc_poll(struct pollfd *fds, unsigned nfds, int timeout) +{ + int val; + + vlc_testcancel(); + val = poll(fds, nfds, timeout); + if (val < 0) + vlc_testcancel(); + return val; +} +# define poll(u,n,t) vlc_poll(u, n, t) + +#elif defined (__OS2__) +# include + +typedef struct vlc_thread *vlc_thread_t; +#define VLC_THREAD_CANCELED NULL +typedef struct +{ + bool dynamic; + union + { + struct + { + bool locked; + unsigned long contention; + }; + HMTX hmtx; + }; +} vlc_mutex_t; +#define VLC_STATIC_MUTEX { false, { { false, 0 } } } +typedef struct +{ + HEV hev; + unsigned waiters; + HEV hevAck; + unsigned signaled; +} vlc_cond_t; +#define VLC_STATIC_COND { NULLHANDLE, 0, NULLHANDLE, 0 } +#define LIBVLC_NEED_SEMAPHORE +#define LIBVLC_NEED_RWLOCK +typedef struct vlc_threadvar *vlc_threadvar_t; +typedef struct vlc_timer *vlc_timer_t; + +# define VLC_THREAD_PRIORITY_LOW 0 +# define VLC_THREAD_PRIORITY_INPUT \ + MAKESHORT(PRTYD_MAXIMUM / 2, PRTYC_REGULAR) +# define VLC_THREAD_PRIORITY_AUDIO MAKESHORT(PRTYD_MAXIMUM, PRTYC_REGULAR) +# define VLC_THREAD_PRIORITY_VIDEO 0 +# define VLC_THREAD_PRIORITY_OUTPUT \ + MAKESHORT(PRTYD_MAXIMUM / 2, PRTYC_REGULAR) +# define VLC_THREAD_PRIORITY_HIGHEST MAKESHORT(0, PRTYC_TIMECRITICAL) + +# define pthread_sigmask sigprocmask + +static inline int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) +{ + static int (*vlc_poll_os2)(struct pollfd *, unsigned, int) = NULL; + + if (!vlc_poll_os2) + { + HMODULE hmod; + CHAR szFailed[CCHMAXPATH]; + + if (DosLoadModule(szFailed, sizeof(szFailed), "vlccore", &hmod)) + return -1; + + if (DosQueryProcAddr(hmod, 0, "_vlc_poll_os2", (PFN *)&vlc_poll_os2)) + return -1; + } + + return (*vlc_poll_os2)(fds, nfds, timeout); +} +# define poll(u,n,t) vlc_poll(u, n, t) + +#elif defined (__ANDROID__) /* pthreads subset without pthread_cancel() */ +# include +# include +# include +# define LIBVLC_USE_PTHREAD_CLEANUP 1 +# define LIBVLC_NEED_SLEEP +# define LIBVLC_NEED_CONDVAR +# define LIBVLC_NEED_SEMAPHORE +# define LIBVLC_NEED_RWLOCK + +typedef struct vlc_thread *vlc_thread_t; +#define VLC_THREAD_CANCELED NULL +typedef pthread_mutex_t vlc_mutex_t; +#define VLC_STATIC_MUTEX PTHREAD_MUTEX_INITIALIZER + +typedef pthread_key_t vlc_threadvar_t; +typedef struct vlc_timer *vlc_timer_t; + +# define VLC_THREAD_PRIORITY_LOW 0 +# define VLC_THREAD_PRIORITY_INPUT 0 +# define VLC_THREAD_PRIORITY_AUDIO 0 +# define VLC_THREAD_PRIORITY_VIDEO 0 +# define VLC_THREAD_PRIORITY_OUTPUT 0 +# define VLC_THREAD_PRIORITY_HIGHEST 0 + +static inline int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) +{ + int val; + + do + { + int ugly_timeout = ((unsigned)timeout >= 50) ? 50 : timeout; + if (timeout >= 0) + timeout -= ugly_timeout; + + vlc_testcancel (); + val = poll (fds, nfds, ugly_timeout); + } + while (val == 0 && timeout != 0); + + return val; +} + +# define poll(u,n,t) vlc_poll(u, n, t) + +#elif defined (__APPLE__) +# define _APPLE_C_SOURCE 1 /* Proper pthread semantics on OSX */ +# include +# include +/* Unnamed POSIX semaphores not supported on Mac OS X */ +# include +# include +# define LIBVLC_USE_PTHREAD 1 +# define LIBVLC_USE_PTHREAD_CLEANUP 1 + +typedef pthread_t vlc_thread_t; +#define VLC_THREAD_CANCELED PTHREAD_CANCELED +typedef pthread_mutex_t vlc_mutex_t; +#define VLC_STATIC_MUTEX PTHREAD_MUTEX_INITIALIZER +typedef pthread_cond_t vlc_cond_t; +#define VLC_STATIC_COND PTHREAD_COND_INITIALIZER +typedef semaphore_t vlc_sem_t; +typedef pthread_rwlock_t vlc_rwlock_t; +#define VLC_STATIC_RWLOCK PTHREAD_RWLOCK_INITIALIZER +typedef pthread_key_t vlc_threadvar_t; +typedef struct vlc_timer *vlc_timer_t; + +# define VLC_THREAD_PRIORITY_LOW 0 +# define VLC_THREAD_PRIORITY_INPUT 22 +# define VLC_THREAD_PRIORITY_AUDIO 22 +# define VLC_THREAD_PRIORITY_VIDEO 0 +# define VLC_THREAD_PRIORITY_OUTPUT 22 +# define VLC_THREAD_PRIORITY_HIGHEST 22 + +#else /* POSIX threads */ +# include /* _POSIX_SPIN_LOCKS */ +# include +# include + +/** + * Whether LibVLC threads are based on POSIX threads. + */ +# define LIBVLC_USE_PTHREAD 1 + +/** + * Whether LibVLC thread cancellation is based on POSIX threads. + */ +# define LIBVLC_USE_PTHREAD_CLEANUP 1 + +/** + * Thread handle. + */ +typedef struct +{ + pthread_t handle; +} vlc_thread_t; + +/** + * Return value of a canceled thread. + */ +#define VLC_THREAD_CANCELED PTHREAD_CANCELED + +/** + * Mutex. + * + * Storage space for a mutual exclusion lock. + */ +typedef pthread_mutex_t vlc_mutex_t; + +/** + * Static initializer for (static) mutex. + */ +#define VLC_STATIC_MUTEX PTHREAD_MUTEX_INITIALIZER + +/** + * Condition variable. + * + * Storage space for a thread condition variable. + */ +typedef pthread_cond_t vlc_cond_t; + +/** + * Static initializer for (static) condition variable. + * + * \note + * The condition variable will use the default clock, which is OS-dependent. + * Therefore, where timed waits are necessary the condition variable should + * always be initialized dynamically explicit instead of using this + * initializer. + */ +#define VLC_STATIC_COND PTHREAD_COND_INITIALIZER + +/** + * Semaphore. + * + * Storage space for a thread-safe semaphore. + */ +typedef sem_t vlc_sem_t; + +/** + * Read/write lock. + * + * Storage space for a slim reader/writer lock. + */ +typedef pthread_rwlock_t vlc_rwlock_t; + +/** + * Static initializer for (static) read/write lock. + */ +#define VLC_STATIC_RWLOCK PTHREAD_RWLOCK_INITIALIZER + +/** + * Thread-local key handle. + */ +typedef pthread_key_t vlc_threadvar_t; + +/** + * Threaded timer handle. + */ +typedef struct vlc_timer *vlc_timer_t; + +# define VLC_THREAD_PRIORITY_LOW 0 +# define VLC_THREAD_PRIORITY_INPUT 10 +# define VLC_THREAD_PRIORITY_AUDIO 5 +# define VLC_THREAD_PRIORITY_VIDEO 0 +# define VLC_THREAD_PRIORITY_OUTPUT 15 +# define VLC_THREAD_PRIORITY_HIGHEST 20 + +#endif + +#ifdef LIBVLC_NEED_CONDVAR +typedef struct +{ + unsigned value; +} vlc_cond_t; +# define VLC_STATIC_COND { 0 } +#endif + +#ifdef LIBVLC_NEED_SEMAPHORE +typedef struct vlc_sem +{ + vlc_mutex_t lock; + vlc_cond_t wait; + unsigned value; +} vlc_sem_t; +#endif + +#ifdef LIBVLC_NEED_RWLOCK +typedef struct vlc_rwlock +{ + vlc_mutex_t mutex; + vlc_cond_t wait; + long state; +} vlc_rwlock_t; +# define VLC_STATIC_RWLOCK { VLC_STATIC_MUTEX, VLC_STATIC_COND, 0 } +#endif + +/** + * Initializes a fast mutex. + * + * Recursive locking of a fast mutex is undefined behaviour. (In debug builds, + * recursive locking will cause an assertion failure.) + */ +VLC_API void vlc_mutex_init(vlc_mutex_t *); + +/** + * Initializes a recursive mutex. + * \warning This is strongly discouraged. Please use normal mutexes. + */ +VLC_API void vlc_mutex_init_recursive(vlc_mutex_t *); + +/** + * Deinitializes a mutex. + * + * The mutex must not be locked, otherwise behaviour is undefined. + */ +VLC_API void vlc_mutex_destroy(vlc_mutex_t *); + +/** + * Acquires a mutex. + * + * If needed, this waits for any other thread to release it. + * + * \warning Beware of deadlocks when locking multiple mutexes at the same time, + * or when using mutexes from callbacks. + * + * \note This function is not a cancellation point. + */ +VLC_API void vlc_mutex_lock(vlc_mutex_t *); + +/** + * Tries to acquire a mutex. + * + * This function acquires the mutex if and only if it is not currently held by + * another thread. This function never sleeps and can be used in delay-critical + * code paths. + * + * \note This function is not a cancellation point. + * + * \warning If this function fails, then the mutex is held... by another + * thread. The calling thread must deal with the error appropriately. That + * typically implies postponing the operations that would have required the + * mutex. If the thread cannot defer those operations, then it must use + * vlc_mutex_lock(). If in doubt, use vlc_mutex_lock() instead. + * + * @return 0 if the mutex could be acquired, an error code otherwise. + */ +VLC_API int vlc_mutex_trylock( vlc_mutex_t * ) VLC_USED; + +/** + * Releases a mutex. + * + * If the mutex is not held by the calling thread, the behaviour is undefined. + * + * \note This function is not a cancellation point. + */ +VLC_API void vlc_mutex_unlock(vlc_mutex_t *); + +/** + * Initializes a condition variable. + */ +VLC_API void vlc_cond_init(vlc_cond_t *); + +/** + * Initializes a condition variable (wall clock). + * + * This function initializes a condition variable for timed waiting using the + * UTC wall clock time. The time reference is the same as with time() and with + * timespec_get() and TIME_UTC. + * vlc_cond_timedwait_daytime() must be instead of + * vlc_cond_timedwait() for actual waiting. + */ +void vlc_cond_init_daytime(vlc_cond_t *); + +/** + * Deinitializes a condition variable. + * + * No threads shall be waiting or signaling the condition, otherwise the + * behavior is undefined. + */ +VLC_API void vlc_cond_destroy(vlc_cond_t *); + +/** + * Wakes up one thread waiting on a condition variable. + * + * If any thread is currently waiting on the condition variable, at least one + * of those threads will be woken up. Otherwise, this function has no effects. + * + * \note This function is not a cancellation point. + */ +VLC_API void vlc_cond_signal(vlc_cond_t *); + +/** + * Wakes up all threads waiting on a condition variable. + * + * \note This function is not a cancellation point. + */ +VLC_API void vlc_cond_broadcast(vlc_cond_t *); + +/** + * Waits on a condition variable. + * + * The calling thread will be suspended until another thread calls + * vlc_cond_signal() or vlc_cond_broadcast() on the same condition variable, + * the thread is cancelled with vlc_cancel(), or the system causes a + * spurious unsolicited wake-up. + * + * A mutex is needed to wait on a condition variable. It must not be + * a recursive mutex. Although it is possible to use the same mutex for + * multiple condition, it is not valid to use different mutexes for the same + * condition variable at the same time from different threads. + * + * The canonical way to use a condition variable to wait for event foobar is: + @code + vlc_mutex_lock(&lock); + mutex_cleanup_push(&lock); // release the mutex in case of cancellation + + while (!foobar) + vlc_cond_wait(&wait, &lock); + + // -- foobar is now true, do something about it here -- + + vlc_cleanup_pop(); + vlc_mutex_unlock(&lock); + @endcode + * + * \note This function is a cancellation point. In case of thread cancellation, + * the mutex is always locked before cancellation proceeds. + * + * \param cond condition variable to wait on + * \param mutex mutex which is unlocked while waiting, + * then locked again when waking up. + */ +VLC_API void vlc_cond_wait(vlc_cond_t *cond, vlc_mutex_t *mutex); + +/** + * Waits on a condition variable up to a certain date. + * + * This works like vlc_cond_wait() but with an additional time-out. + * The time-out is expressed as an absolute timestamp using the same arbitrary + * time reference as the mdate() and mwait() functions. + * + * \note This function is a cancellation point. In case of thread cancellation, + * the mutex is always locked before cancellation proceeds. + * + * \param cond condition variable to wait on + * \param mutex mutex which is unlocked while waiting, + * then locked again when waking up + * \param deadline absolute timeout + * + * \warning If the variable was initialized with vlc_cond_init_daytime(), or + * was statically initialized with \ref VLC_STATIC_COND, the time reference + * used by this function is unspecified (depending on the implementation, it + * might be the Unix epoch or the mdate() clock). + * + * \return 0 if the condition was signaled, an error code in case of timeout. + */ +VLC_API int vlc_cond_timedwait(vlc_cond_t *cond, vlc_mutex_t *mutex, + vlc_tick_t deadline); + +int vlc_cond_timedwait_daytime(vlc_cond_t *, vlc_mutex_t *, time_t); + +/** + * Initializes a semaphore. + * + * @param count initial semaphore value (typically 0) + */ +VLC_API void vlc_sem_init(vlc_sem_t *, unsigned count); + +/** + * Deinitializes a semaphore. + */ +VLC_API void vlc_sem_destroy(vlc_sem_t *); + +/** + * Increments the value of a semaphore. + * + * \note This function is not a cancellation point. + * + * \return 0 on success, EOVERFLOW in case of integer overflow. + */ +VLC_API int vlc_sem_post(vlc_sem_t *); + +/** + * Waits on a semaphore. + * + * This function atomically waits for the semaphore to become non-zero then + * decrements it, and returns. If the semaphore is non-zero on entry, it is + * immediately decremented. + * + * \note This function may be a point of cancellation. + */ +VLC_API void vlc_sem_wait(vlc_sem_t *); + +/** + * Initializes a read/write lock. + */ +VLC_API void vlc_rwlock_init(vlc_rwlock_t *); + +/** + * Destroys an initialized unused read/write lock. + */ +VLC_API void vlc_rwlock_destroy(vlc_rwlock_t *); + +/** + * Acquires a read/write lock for reading. + * + * \note Recursion is allowed. + * \note This function may be a point of cancellation. + */ +VLC_API void vlc_rwlock_rdlock(vlc_rwlock_t *); + +/** + * Acquires a read/write lock for writing. Recursion is not allowed. + * \note This function may be a point of cancellation. + */ +VLC_API void vlc_rwlock_wrlock(vlc_rwlock_t *); + +/** + * Releases a read/write lock. + * + * The calling thread must hold the lock. Otherwise behaviour is undefined. + * + * \note This function is not a cancellation point. + */ +VLC_API void vlc_rwlock_unlock(vlc_rwlock_t *); + +/** + * Allocates a thread-specific variable. + * + * @param key where to store the thread-specific variable handle + * @param destr a destruction callback. It is called whenever a thread exits + * and the thread-specific variable has a non-NULL value. + * + * @return 0 on success, a system error code otherwise. + * This function can actually fail: on most systems, there is a fixed limit to + * the number of thread-specific variables in a given process. + */ +VLC_API int vlc_threadvar_create(vlc_threadvar_t *key, void (*destr) (void *)); + +/** + * Deallocates a thread-specific variable. + */ +VLC_API void vlc_threadvar_delete(vlc_threadvar_t *); + +/** + * Sets a thread-specific variable. + + * \param key thread-local variable key (created with vlc_threadvar_create()) + * \param value new value for the variable for the calling thread + * \return 0 on success, a system error code otherwise. + */ +VLC_API int vlc_threadvar_set(vlc_threadvar_t key, void *value); + +/** + * Gets the value of a thread-local variable for the calling thread. + * This function cannot fail. + * + * \return the value associated with the given variable for the calling + * or NULL if no value was set. + */ +VLC_API void *vlc_threadvar_get(vlc_threadvar_t); + +/** + * Waits on an address. + * + * Puts the calling thread to sleep if a specific value is stored at a + * specified address. The thread will sleep until it is woken up by a call to + * vlc_addr_signal() or vlc_addr_broadcast() in another thread, or spuriously. + * + * If the value does not match, do nothing and return immediately. + * + * \param addr address to check for + * \param val value to match at the address + */ +void vlc_addr_wait(void *addr, unsigned val); + +/** + * Waits on an address with a time-out. + * + * This function operates as vlc_addr_wait() but provides an additional + * time-out. If the time-out elapses, the thread resumes and the function + * returns. + * + * \param addr address to check for + * \param val value to match at the address + * \param delay time-out duration + * + * \return true if the function was woken up before the time-out, + * false if the time-out elapsed. + */ +bool vlc_addr_timedwait(void *addr, unsigned val, vlc_tick_t delay); + +/** + * Wakes up one thread on an address. + * + * Wakes up (at least) one of the thread sleeping on the specified address. + * The address must be equal to the first parameter given by at least one + * thread sleeping within the vlc_addr_wait() or vlc_addr_timedwait() + * functions. If no threads are found, this function does nothing. + * + * \param addr address identifying which threads may be woken up + */ +void vlc_addr_signal(void *addr); + +/** + * Wakes up all thread on an address. + * + * Wakes up all threads sleeping on the specified address (if any). + * Any thread sleeping within a call to vlc_addr_wait() or vlc_addr_timedwait() + * with the specified address as first call parameter will be woken up. + * + * \param addr address identifying which threads to wake up + */ +void vlc_addr_broadcast(void *addr); + +/** + * Creates and starts a new thread. + * + * The thread must be joined with vlc_join() to reclaim resources + * when it is not needed anymore. + * + * @param th storage space for the handle of the new thread (cannot be NULL) + * [OUT] + * @param entry entry point for the thread + * @param data data parameter given to the entry point + * @param priority thread priority value + * @return 0 on success, a standard error code on error. + * @note In case of error, the value of *th is undefined. + */ +VLC_API int vlc_clone(vlc_thread_t *th, void *(*entry)(void *), void *data, + int priority) VLC_USED; + +/** + * Marks a thread as cancelled. + * + * Next time the target thread reaches a cancellation point (while not having + * disabled cancellation), it will run its cancellation cleanup handler, the + * thread variable destructors, and terminate. + * + * vlc_join() must be used regardless of a thread being cancelled or not, to + * avoid leaking resources. + */ +VLC_API void vlc_cancel(vlc_thread_t); + +/** + * Waits for a thread to complete (if needed), then destroys it. + * + * \note This is a cancellation point. In case of cancellation, the thread is + * not joined. + + * \warning A thread cannot join itself (normally VLC will abort if this is + * attempted). Also a detached thread cannot be joined. + * + * @param th thread handle + * @param result [OUT] pointer to write the thread return value or NULL + */ +VLC_API void vlc_join(vlc_thread_t th, void **result); + +/** + * Disables thread cancellation. + * + * This functions saves the current cancellation state (enabled or disabled), + * then disables cancellation for the calling thread. It must be called before + * entering a piece of code that is not cancellation-safe, unless it can be + * proven that the calling thread will not be cancelled. + * + * \note This function is not a cancellation point. + * + * \return Previous cancellation state (opaque value for vlc_restorecancel()). + */ +VLC_API int vlc_savecancel(void); + +/** + * Restores the cancellation state. + * + * This function restores the cancellation state of the calling thread to + * a state previously saved by vlc_savecancel(). + * + * \note This function is not a cancellation point. + * + * \param state previous state as returned by vlc_savecancel(). + */ +VLC_API void vlc_restorecancel(int state); + +/** + * Internal handler for thread cancellation. + * + * Do not call this function directly. Use wrapper macros instead: + * vlc_cleanup_push(), vlc_cleanup_pop(). + */ +VLC_API void vlc_control_cancel(int cmd, ...); + +/** + * Thread handle. + * + * This function returns the thread handle of the calling thread. + * + * \note The exact type of the thread handle depends on the platform, + * including an integer type, a pointer type or a compound type of any size. + * If you need an integer identifier, use vlc_thread_id() instead. + * + * \note vlc_join(vlc_thread_self(), NULL) is undefined, + * as it obviously does not make any sense (it might result in a deadlock, but + * there are no warranties that it will). + * + * \return the thread handle + */ +VLC_API vlc_thread_t vlc_thread_self(void) VLC_USED; + +/** + * Thread identifier. + * + * This function returns the identifier of the calling thread. The identifier + * cannot change for the entire duration of the thread, and no other thread can + * have the same identifier at the same time in the same process. Typically, + * the identifier is also unique across all running threads of all existing + * processes, but that depends on the operating system. + * + * There are no particular semantics to the thread ID with LibVLC. + * It is provided mainly for tracing and debugging. + * + * \warning This function is not currently implemented on all supported + * platforms. Where not implemented, it returns (unsigned long)-1. + * + * \return the thread identifier (or -1 if unimplemented) + */ +VLC_API unsigned long vlc_thread_id(void) VLC_USED; + +/** + * Precision monotonic clock. + * + * In principles, the clock has a precision of 1 MHz. But the actual resolution + * may be much lower, especially when it comes to sleeping with mwait() or + * msleep(). Most general-purpose operating systems provide a resolution of + * only 100 to 1000 Hz. + * + * \warning The origin date (time value "zero") is not specified. It is + * typically the time the kernel started, but this is platform-dependent. + * If you need wall clock time, use gettimeofday() instead. + * + * \return a timestamp in microseconds. + */ +VLC_API vlc_tick_t mdate(void); + +/** + * Waits until a deadline. + * + * \param deadline timestamp to wait for (\ref mdate()) + * + * \note The deadline may be exceeded due to OS scheduling. + * \note This function is a cancellation point. + */ +VLC_API void mwait(vlc_tick_t deadline); + +/** + * Waits for an interval of time. + * + * \param delay how long to wait (in microseconds) + * + * \note The delay may be exceeded due to OS scheduling. + * \note This function is a cancellation point. + */ +VLC_API void msleep(vlc_tick_t delay); + +#define VLC_HARD_MIN_SLEEP 10000 /* 10 milliseconds = 1 tick at 100Hz */ +#define VLC_SOFT_MIN_SLEEP 9000000 /* 9 seconds */ + +#if defined (__GNUC__) && !defined (__clang__) +/* Linux has 100, 250, 300 or 1000Hz + * + * HZ=100 by default on FreeBSD, but some architectures use a 1000Hz timer + */ + +static +__attribute__((unused)) +__attribute__((noinline)) +__attribute__((error("sorry, cannot sleep for such short a time"))) +vlc_tick_t impossible_delay( vlc_tick_t delay ) +{ + (void) delay; + return VLC_HARD_MIN_SLEEP; +} + +static +__attribute__((unused)) +__attribute__((noinline)) +__attribute__((warning("use proper event handling instead of short delay"))) +vlc_tick_t harmful_delay( vlc_tick_t delay ) +{ + return delay; +} + +# define check_delay( d ) \ + ((__builtin_constant_p(d < VLC_HARD_MIN_SLEEP) \ + && (d < VLC_HARD_MIN_SLEEP)) \ + ? impossible_delay(d) \ + : ((__builtin_constant_p(d < VLC_SOFT_MIN_SLEEP) \ + && (d < VLC_SOFT_MIN_SLEEP)) \ + ? harmful_delay(d) \ + : d)) + +static +__attribute__((unused)) +__attribute__((noinline)) +__attribute__((error("deadlines can not be constant"))) +vlc_tick_t impossible_deadline( vlc_tick_t deadline ) +{ + return deadline; +} + +# define check_deadline( d ) \ + (__builtin_constant_p(d) ? impossible_deadline(d) : d) +#else +# define check_delay(d) (d) +# define check_deadline(d) (d) +#endif + +#define msleep(d) msleep(check_delay(d)) +#define mwait(d) mwait(check_deadline(d)) + +/** + * Initializes an asynchronous timer. + * + * \param id pointer to timer to be initialized + * \param func function that the timer will call + * \param data parameter for the timer function + * \return 0 on success, a system error code otherwise. + * + * \warning Asynchronous timers are processed from an unspecified thread. + * \note Multiple occurrences of a single interval timer are serialized: + * they cannot run concurrently. + */ +VLC_API int vlc_timer_create(vlc_timer_t *id, void (*func)(void *), void *data) +VLC_USED; + +/** + * Destroys an initialized timer. + * + * If needed, the timer is first disarmed. Behaviour is undefined if the + * specified timer is not initialized. + * + * \warning This function must be called before the timer data can be + * freed and before the timer callback function can be unmapped/unloaded. + * + * \param timer timer to destroy + */ +VLC_API void vlc_timer_destroy(vlc_timer_t timer); + +/** + * Arms or disarms an initialized timer. + * + * This functions overrides any previous call to itself. + * + * \note A timer can fire later than requested due to system scheduling + * limitations. An interval timer can fail to trigger sometimes, either because + * the system is busy or suspended, or because a previous iteration of the + * timer is still running. See also vlc_timer_getoverrun(). + * + * \param timer initialized timer + * \param absolute the timer value origin is the same as mdate() if true, + * the timer value is relative to now if false. + * \param value zero to disarm the timer, otherwise the initial time to wait + * before firing the timer. + * \param interval zero to fire the timer just once, otherwise the timer + * repetition interval. + */ +VLC_API void vlc_timer_schedule(vlc_timer_t timer, bool absolute, + vlc_tick_t value, vlc_tick_t interval); + +/** + * Fetches and resets the overrun counter for a timer. + * + * This functions returns the number of times that the interval timer should + * have fired, but the callback was not invoked due to scheduling problems. + * The call resets the counter to zero. + * + * \param timer initialized timer + * \return the timer overrun counter (typically zero) + */ +VLC_API unsigned vlc_timer_getoverrun(vlc_timer_t) VLC_USED; + +/** + * Count CPUs. + * + * \return number of available (logical) CPUs. + */ +VLC_API unsigned vlc_GetCPUCount(void); + +enum +{ + VLC_CLEANUP_PUSH, + VLC_CLEANUP_POP, + VLC_CANCEL_ADDR_SET, + VLC_CANCEL_ADDR_CLEAR, +}; + +#if defined (LIBVLC_USE_PTHREAD_CLEANUP) +/** + * Registers a thread cancellation handler. + * + * This pushes a function to run if the thread is cancelled (or otherwise + * exits prematurely). + * + * If multiple procedures are registered, + * they are handled in last-in first-out order. + * + * \note Any call to vlc_cleanup_push() must paired with a call to + * vlc_cleanup_pop(). + * \warning Branching into or out of the block between these two function calls + * is not allowed (read: it will likely crash the whole process). + * + * \param routine procedure to call if the thread ends + * \param arg argument for the procedure + */ +# define vlc_cleanup_push( routine, arg ) pthread_cleanup_push (routine, arg) + +/** + * Unregisters the last cancellation handler. + * + * This pops the cancellation handler that was last pushed with + * vlc_cleanup_push() in the calling thread. + */ +# define vlc_cleanup_pop( ) pthread_cleanup_pop (0) + +#else +typedef struct vlc_cleanup_t vlc_cleanup_t; + +struct vlc_cleanup_t +{ + vlc_cleanup_t *next; + void (*proc) (void *); + void *data; +}; + +/* This macros opens a code block on purpose. This is needed for multiple + * calls within a single function. This also prevent Win32 developers from + * writing code that would break on POSIX (POSIX opens a block as well). */ +# define vlc_cleanup_push( routine, arg ) \ + do { \ + vlc_cleanup_t vlc_cleanup_data = { NULL, routine, arg, }; \ + vlc_control_cancel (VLC_CLEANUP_PUSH, &vlc_cleanup_data) + +# define vlc_cleanup_pop( ) \ + vlc_control_cancel (VLC_CLEANUP_POP); \ + } while (0) + +#endif /* !LIBVLC_USE_PTHREAD_CLEANUP */ + +static inline void vlc_cleanup_lock (void *lock) +{ + vlc_mutex_unlock ((vlc_mutex_t *)lock); +} +#define mutex_cleanup_push( lock ) vlc_cleanup_push (vlc_cleanup_lock, lock) + +static inline void vlc_cancel_addr_set(void *addr) +{ + vlc_control_cancel(VLC_CANCEL_ADDR_SET, addr); +} + +static inline void vlc_cancel_addr_clear(void *addr) +{ + vlc_control_cancel(VLC_CANCEL_ADDR_CLEAR, addr); +} + +#ifdef __cplusplus +/** + * Helper C++ class to lock a mutex. + * + * The mutex is locked when the object is created, and unlocked when the object + * is destroyed. + */ +class vlc_mutex_locker +{ + private: + vlc_mutex_t *lock; + public: + vlc_mutex_locker (vlc_mutex_t *m) : lock (m) + { + vlc_mutex_lock (lock); + } + + ~vlc_mutex_locker (void) + { + vlc_mutex_unlock (lock); + } +}; +#endif + +enum +{ + VLC_AVCODEC_MUTEX = 0, + VLC_GCRYPT_MUTEX, + VLC_XLIB_MUTEX, + VLC_MOSAIC_MUTEX, + VLC_HIGHLIGHT_MUTEX, +#ifdef _WIN32 + VLC_MTA_MUTEX, +#endif + /* Insert new entry HERE */ + VLC_MAX_MUTEX +}; + +/** + * Internal handler for global mutexes. + * + * Do not use this function directly. Use helper macros instead: + * vlc_global_lock(), vlc_global_unlock(). + */ +VLC_API void vlc_global_mutex(unsigned, bool); + +/** + * Acquires a global mutex. + */ +#define vlc_global_lock( n ) vlc_global_mutex(n, true) + +/** + * Releases a global mutex. + */ +#define vlc_global_unlock( n ) vlc_global_mutex(n, false) + +/** @} */ + +#endif /* !_VLC_THREADS_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_timestamp_helper.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_timestamp_helper.h new file mode 100644 index 0000000..a13bee1 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_timestamp_helper.h @@ -0,0 +1,101 @@ +/***************************************************************************** + * vlc_timestamp_helper.h : timestamp handling helpers + ***************************************************************************** + * Copyright (C) 2014 VLC authors and VideoLAN + * $Id$ + * + * Authors: Felix Abecassis + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_TIMESTAMP_H +#define VLC_TIMESTAMP_H 1 + +/* Implementation of a circular buffer of timestamps with overwriting + * of older values. MediaCodec has only one type of timestamp, if a + * block has no PTS, we send the DTS instead. Some hardware decoders + * cannot cope with this situation and output the frames in the wrong + * order. As a workaround in this case, we use a FIFO of timestamps in + * order to remember which input packets had no PTS. Since an + * hardware decoder can silently drop frames, this might cause a + * growing desynchronization with the actual timestamp. Thus the + * circular buffer has a limited size and will overwrite older values. + */ +typedef struct +{ + uint32_t begin; + uint32_t size; + uint32_t capacity; + int64_t *buffer; +} timestamp_fifo_t; + +static inline timestamp_fifo_t *timestamp_FifoNew(uint32_t capacity) +{ + timestamp_fifo_t *fifo = calloc(1, sizeof(*fifo)); + if (!fifo) + return NULL; + fifo->buffer = vlc_alloc(capacity, sizeof(*fifo->buffer)); + if (!fifo->buffer) { + free(fifo); + return NULL; + } + fifo->capacity = capacity; + return fifo; +} + +static inline void timestamp_FifoRelease(timestamp_fifo_t *fifo) +{ + free(fifo->buffer); + free(fifo); +} + +static inline bool timestamp_FifoIsEmpty(timestamp_fifo_t *fifo) +{ + return fifo->size == 0; +} + +static inline bool timestamp_FifoIsFull(timestamp_fifo_t *fifo) +{ + return fifo->size == fifo->capacity; +} + +static inline void timestamp_FifoEmpty(timestamp_fifo_t *fifo) +{ + fifo->size = 0; +} + +static inline void timestamp_FifoPut(timestamp_fifo_t *fifo, int64_t ts) +{ + uint32_t end = (fifo->begin + fifo->size) % fifo->capacity; + fifo->buffer[end] = ts; + if (!timestamp_FifoIsFull(fifo)) + fifo->size += 1; + else + fifo->begin = (fifo->begin + 1) % fifo->capacity; +} + +static inline int64_t timestamp_FifoGet(timestamp_fifo_t *fifo) +{ + if (timestamp_FifoIsEmpty(fifo)) + return VLC_TICK_INVALID; + + int64_t result = fifo->buffer[fifo->begin]; + fifo->begin = (fifo->begin + 1) % fifo->capacity; + fifo->size -= 1; + return result; +} + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_tls.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_tls.h new file mode 100644 index 0000000..84e44a5 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_tls.h @@ -0,0 +1,352 @@ +/***************************************************************************** + * vlc_tls.h: + ***************************************************************************** + * Copyright (C) 2004-2016 Rémi Denis-Courmont + * Copyright (C) 2005-2006 VLC authors and VideoLAN + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_TLS_H +# define VLC_TLS_H + +/** + * \ingroup net + * \defgroup transport Transport layer sockets + * Network stream abstraction + * + * Originally intended for the TLS protocol (Transport Layer Security), + * the Transport Layer Sockets now provides a generic abstraction + * for connection-oriented full-duplex I/O byte streams, such as TCP/IP sockets + * and TLS protocol sessions. + * + * @{ + * \file + * Transport layer functions + */ + +# include + +/** Transport layer socket */ +typedef struct vlc_tls +{ + int (*get_fd)(struct vlc_tls *); + ssize_t (*readv)(struct vlc_tls *, struct iovec *, unsigned); + ssize_t (*writev)(struct vlc_tls *, const struct iovec *, unsigned); + int (*shutdown)(struct vlc_tls *, bool duplex); + void (*close)(struct vlc_tls *); + + struct vlc_tls *p; +} vlc_tls_t; + +/** + * \defgroup tls Transport Layer Security + * @{ + */ + +/** + * TLS credentials + * + * This structure contains the credentials for establishing TLS sessions. + * This includes root Certificate Authorities (on client side), + * trust and cryptographic parameters, + * public certificates and private keys. + */ +typedef struct vlc_tls_creds +{ + VLC_COMMON_MEMBERS + + module_t *module; + void *sys; + + vlc_tls_t *(*open)(struct vlc_tls_creds *, vlc_tls_t *sock, + const char *host, const char *const *alpn); + int (*handshake)(struct vlc_tls_creds *, vlc_tls_t *session, + const char *hostname, const char *service, + char ** /*restrict*/ alp); +} vlc_tls_creds_t; + +/** + * Allocates TLS credentials for a client. + * Credentials can be cached and reused across multiple TLS sessions. + * + * @return TLS credentials object, or NULL on error. + **/ +VLC_API vlc_tls_creds_t *vlc_tls_ClientCreate(vlc_object_t *); + +/** + * Allocates server TLS credentials. + * + * @param cert path to an x509 certificate (required) + * @param key path to the PKCS private key for the certificate, + * or NULL to use cert path + * + * @return TLS credentials object, or NULL on error. + */ +VLC_API vlc_tls_creds_t *vlc_tls_ServerCreate(vlc_object_t *, const char *cert, + const char *key); + +static inline int vlc_tls_SessionHandshake (vlc_tls_creds_t *crd, + vlc_tls_t *tls) +{ + return crd->handshake(crd, tls, NULL, NULL, NULL); +} + +/** + * Releases TLS credentials. + * + * Releases data allocated with vlc_tls_ClientCreate() or + * vlc_tls_ServerCreate(). + * + * @param srv object to be destroyed (or NULL) + */ +VLC_API void vlc_tls_Delete(vlc_tls_creds_t *); + +/** + * Initiates a client TLS session. + * + * Initiates a Transport Layer Security (TLS) session as the client side, using + * trusted root CAs previously loaded with vlc_tls_ClientCreate(). + * + * This is a blocking network operation and may be a thread cancellation point. + * + * @param creds X.509 credentials, i.e. set of root certificates of trusted + * certificate authorities + * @param sock socket through which to establish the secure channel + * @param hostname expected server name, used both as Server Name Indication + * and as expected Common Name of the peer certificate [IN] + * @param service unique identifier for the service to connect to + * (only used locally for certificates database) [IN] + * @param alpn NULL-terminated list of Application Layer Protocols + * to negotiate, or NULL to not negotiate protocols [IN] + * @param alp storage space for the negotiated Application Layer + * Protocol or NULL if negotiation was not performed [OUT] + * + * @note The credentials must remain valid until the session is finished. + * + * @return TLS session, or NULL on error. + **/ +VLC_API vlc_tls_t *vlc_tls_ClientSessionCreate(vlc_tls_creds_t *creds, + vlc_tls_t *sock, + const char *host, + const char *service, + const char *const *alpn, + char **alp); + +/** + * Creates a TLS server session. + * + * Allocates a Transport Layer Security (TLS) session as the server side, using + * cryptographic keys pair and X.509 certificates chain already loaded with + * vlc_tls_ServerCreate(). + * + * Unlike vlc_tls_ClientSessionCreate(), this function does not perform any + * actual network I/O. vlc_tls_SessionHandshake() must be used to perform the + * TLS handshake before sending and receiving data through the TLS session. + * + * This function is non-blocking and is not a cancellation point. + * + * @param creds server credentials, i.e. keys pair and X.509 certificates chain + * @param alpn NULL-terminated list of Application Layer Protocols + * to negotiate, or NULL to not negotiate protocols + * + * @return TLS session, or NULL on error. + */ +VLC_API vlc_tls_t *vlc_tls_ServerSessionCreate(vlc_tls_creds_t *creds, + vlc_tls_t *sock, + const char *const *alpn); + +/** @} */ + +/** + * Destroys a TLS session down. + * + * All resources associated with the TLS session are released. + * + * If the session was established successfully, then shutdown cleanly, the + * underlying socket can be reused. Otherwise, it must be closed. Either way, + * this function does not close the underlying socket: Use vlc_tls_Close() + * instead to close it at the same. + * + * This function is non-blocking and is not a cancellation point. + */ +VLC_API void vlc_tls_SessionDelete (vlc_tls_t *); + +static inline int vlc_tls_GetFD(vlc_tls_t *tls) +{ + return tls->get_fd(tls); +} + +/** + * Receives data through a socket. + * + * This dequeues incoming data from a transport layer socket. + * + * @param buf received buffer start address [OUT] + * @param len buffer length (in bytes) + * @param waitall whether to wait for the exact buffer length (true), + * or for any amount of data (false) + * + * @note At end of stream, the number of bytes returned may be shorter than + * requested regardless of the "waitall" flag. + * + * @return the number of bytes actually dequeued, or -1 on error. + */ +VLC_API ssize_t vlc_tls_Read(vlc_tls_t *, void *buf, size_t len, bool waitall); + +/** + * Receives a text line through a socket. + * + * This dequeues one line of text from a transport layer socket. + * @return a heap-allocated nul-terminated string, or NULL on error + */ +VLC_API char *vlc_tls_GetLine(vlc_tls_t *); + +/** + * Sends data through a socket. + */ +VLC_API ssize_t vlc_tls_Write(vlc_tls_t *, const void *buf, size_t len); + +/** + * Shuts a connection down. + * + * This sends the connection close notification. + * + * If the TLS protocol is used, this provides a secure indication to the other + * end that no further data will be sent. If using plain TCP/IP, this sets the + * FIN flag. + * + * Data can still be received until a close notification is received from the + * other end. + * + * @param duplex whether to stop receiving data as well + * @retval 0 the session was terminated securely and cleanly + * (the underlying socket can be reused for other purposes) + * @return -1 the session was terminated locally, but either a notification + * could not be sent or received (the underlying socket cannot be + * reused and must be closed) + */ +static inline int vlc_tls_Shutdown(vlc_tls_t *tls, bool duplex) +{ + return tls->shutdown(tls, duplex); +} + +/** + * Closes a connection and its underlying resources. + * + * This function closes the transport layer socket, and terminates any + * underlying connection. For instance, if the TLS protocol is used over a TCP + * stream, this function terminates both the TLS session, and then underlying + * TCP/IP connection. + * + * To close a connection but retain any underlying resources, use + * vlc_tls_SessionDelete() instead. + */ +static inline void vlc_tls_Close(vlc_tls_t *session) +{ + do + { + vlc_tls_t *p = session->p; + + vlc_tls_SessionDelete(session); + session = p; + } + while (session != NULL); +} + +/** + * Creates a transport-layer stream from a socket. + * + * Creates a transport-layer I/O stream from a socket file descriptor. + * Data will be sent and received directly through the socket. This can be used + * either to share common code between non-TLS and TLS cases, or for testing + * purposes. + * + * This function is not a cancellation point. + * + * @deprecated This function is transitional. Do not use it directly. + */ +VLC_API vlc_tls_t *vlc_tls_SocketOpen(int fd); + +/** + * Creates a connected pair of transport-layer sockets. + */ +VLC_API int vlc_tls_SocketPair(int family, int protocol, vlc_tls_t *[2]); + +struct addrinfo; + +/** + * Creates a transport-layer stream from a struct addrinfo. + * + * This function tries to allocate a socket using the specified addrinfo + * structure. Normally, the vlc_tls_SocketOpenTCP() function takes care of + * this. But in some cases, it cannot be used, notably: + * - if the remote destination is not resolved (directly) from getaddrinfo(), + * - if the socket type is not SOCK_STREAM, + * - if the transport protocol is not TCP (IPPROTO_TCP), or + * - if TCP Fast Open should be attempted. + * + * @param ai a filled addrinfo structure (the ai_next member is ignored) + * @param defer_connect whether to attempt a TCP Fast Open connection or not + */ +VLC_API vlc_tls_t *vlc_tls_SocketOpenAddrInfo(const struct addrinfo *ai, + bool defer_connect); + +/** + * Creates a transport-layer TCP stream from a name and port. + * + * This function resolves a hostname, and attempts to establish a TCP/IP + * connection to the specified host and port number. + * + * @note The function currently iterates through the addrinfo linked list. + * Future versions may implement different behaviour (e.g. RFC6555). + * + * @return a transport layer socket on success or NULL on error + */ +VLC_API vlc_tls_t *vlc_tls_SocketOpenTCP(vlc_object_t *obj, + const char *hostname, unsigned port); + +/** + * Initiates a TLS session over TCP. + * + * This function resolves a hostname, attempts to establish a TCP/IP + * connection to the specified host and port number, and finally attempts to + * establish a TLS session over the TCP/IP stream. + * + * See also vlc_tls_SocketOpenTCP() and vlc_tls_SessionCreate(). + */ +VLC_API vlc_tls_t *vlc_tls_SocketOpenTLS(vlc_tls_creds_t *crd, + const char *hostname, unsigned port, + const char *service, + const char *const *alpn, char **alp); + +VLC_DEPRECATED +static inline vlc_tls_t * +vlc_tls_ClientSessionCreateFD(vlc_tls_creds_t *crd, int fd, const char *host, + const char *srv, const char *const *lp, char **p) +{ + vlc_tls_t *sock = vlc_tls_SocketOpen(fd); + if (unlikely(sock == NULL)) + return NULL; + + vlc_tls_t *tls = vlc_tls_ClientSessionCreate(crd, sock, host, srv, lp, p); + if (unlikely(tls == NULL)) + free(sock); + return tls; +} + +/** @} */ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_url.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_url.h new file mode 100644 index 0000000..b76cea9 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_url.h @@ -0,0 +1,210 @@ +/***************************************************************************** + * vlc_url.h: URL related macros + ***************************************************************************** + * Copyright (C) 2002-2006 VLC authors and VideoLAN + * $Id$ + * + * Authors: Christophe Massiot + * Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_URL_H +# define VLC_URL_H + +/** + * \file + * This file defines functions for manipulating URL in vlc + * + * \ingroup strings + * @{ + */ + +/** + * Converts local path to URL. + * + * Builds a URL representation from a local UTF-8 null-terminated file path. + * + * @param path file path + * @param scheme URI scheme to use (default is auto: "file", "fd" or "smb") + * @return a heap-allocated URI string on success + * or NULL in case of error (errno will be set accordingly) + */ +VLC_API char *vlc_path2uri(const char *path, const char *scheme) VLC_MALLOC; + +/** + * Converts a URI to a local path. + * + * Builds a local path (UTF-8-encoded null-terminated string) from a URI if + * the URI scheme allows. + * + * @param url URI + * @return a heap-allocated string or success + * or NULL on error + */ +VLC_API char *vlc_uri2path(const char *url) VLC_MALLOC; + +/** + * Decodes an URI component in place. + * + * Decodes one null-terminated UTF-8 URI component to aa null-terminated UTF-8 + * string in place. + * + * See also vlc_uri_decode_duplicate() for the not-in-place variant. + * + * \warning This function does NOT decode entire URIs. + * URI can only be decoded (and encoded) one component at a time + * (e.g. the host name, one directory, the file name). + * Complete URIs are always "encoded" (or they are syntaxically invalid). + * See IETF RFC3986, especially §2.4 for details. + * + * \note URI encoding is different from Javascript escaping. Especially, + * white spaces and Unicode non-ASCII code points are encoded differently. + * + * \param str null-terminated component + * \return str is returned on success. NULL if str was not properly encoded. + */ +VLC_API char *vlc_uri_decode(char *str); + +/** + * Decodes an URI component. + * + * See also vlc_uri_decode() for the in-place variant. + * + * \return a heap-allocated string on success or NULL on error. + */ +VLC_API char *vlc_uri_decode_duplicate(const char *str) VLC_MALLOC; + +/** + * Encodes a URI component. + * + * Substitutes URI-unsafe, URI delimiters and non-ASCII characters into their + * URI-encoded URI-safe representation. See also IETF RFC3986 §2. + * + * @param str nul-terminated UTF-8 representation of the component. + * @note Obviously, a URI containing nul bytes cannot be passed. + * @return heap-allocated string, or NULL if out of memory. + */ +VLC_API char *vlc_uri_encode(const char *str) VLC_MALLOC; + +/** + * Composes an URI. + * + * Converts a decomposed/parsed URI structure (\ref vlc_url_t) into a + * nul-terminated URI literal string. + * + * See also IETF RFC3986 section 5.3 for details. + * + * \bug URI fragments (i.e. HTML anchors) are not handled + * + * \return a heap-allocated nul-terminated string or NULL if out of memory + */ +VLC_API char *vlc_uri_compose(const vlc_url_t *) VLC_MALLOC; + +/** + * Resolves an URI reference. + * + * Resolves an URI reference relative to a base URI. + * If the reference is an absolute URI, then this function simply returns a + * copy of the URI reference. + * + * \param base base URI (as a nul-terminated string) + * \param ref URI reference (also as a nul-terminated string) + * + * \return a heap-allocated nul-terminated string representing the resolved + * absolute URI, or NULL if out of memory. + */ +VLC_API char *vlc_uri_resolve(const char *base, const char *ref) VLC_MALLOC; + +/** + * Fixes up a URI string. + * + * Attempts to convert a nul-terminated string into a syntactically valid URI. + * If the string is, or may be, a syntactically valid URI, an exact copy is + * returned. In any case, the result will only contain URI-safe and URI + * delimiter characters (generic delimiters or sub-delimiters) and all percent + * signs will be followed by two hexadecimal characters. + * + * @return a heap-allocated string, or NULL if on out of memory. + */ +VLC_API char *vlc_uri_fixup(const char *) VLC_MALLOC; + +struct vlc_url_t +{ + char *psz_protocol; + char *psz_username; + char *psz_password; + char *psz_host; + unsigned i_port; + char *psz_path; + char *psz_option; + + char *psz_buffer; /* to be freed */ + char *psz_pathbuffer; /* to be freed */ +}; + +/** + * Parses an URI or IRI. + * + * Extracts the following parts from an URI string: + * - scheme (i.e. protocol), + * - user (deprecated), + * - password (also deprecated), + * - host name or IP address literal, + * - port number, + * - path (including the filename preceded by any and all directories) + * - request parameters (excluding the leading question mark '?'). + * + * The function accepts URIs, as well as UTF-8-encoded IRIs. For IRIs, the hier + * part (specifically, the host name) is assumed to be an IDN and is decoded to + * ASCII according, so it can be used for DNS resolution. If the host is an + * IPv6 address literal, brackets are stripped. + * + * Any missing part is set to nul. For historical reasons, the target structure + * is always initialized, even if parsing the URI string fails. + * + * On error, errno is set to one of the following value: + * - ENOMEM in case of memory allocation failure, + * - EINVAL in case of syntax error in the input string. + * + * \bug The URI fragment is discarded if present. + * + * \note This function allocates memory. vlc_UrlClean() must be used free + * associated the allocations, even if the function fails. + * + * \param url structure of URL parts [OUT] + * \param str nul-terminated URL string to split + * \retval 0 success + * \retval -1 failure + */ +VLC_API int vlc_UrlParse(vlc_url_t *url, const char *str); + +/** + * Parses an URI or IRI and fix up the path part. + * + * \see vlc_UrlParse + * \see vlc_uri_fixup + */ +VLC_API int vlc_UrlParseFixup(vlc_url_t *url, const char *str); + +/** + * Releases resources allocated by vlc_UrlParse(). + */ +VLC_API void vlc_UrlClean(vlc_url_t *); + +/** @} */ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_variables.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_variables.h new file mode 100644 index 0000000..83752b1 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_variables.h @@ -0,0 +1,671 @@ +/***************************************************************************** + * vlc_variables.h: variables handling + ***************************************************************************** + * Copyright (C) 2002-2004 VLC authors and VideoLAN + * $Id$ + * + * Authors: Samuel Hocevar + * Gildas Bazin + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_VARIABLES_H +#define VLC_VARIABLES_H 1 + +/** + * \defgroup variables Variables + * \ingroup vlc_object + * + * VLC object variables and callbacks + * + * @{ + * \file + * VLC object variables and callbacks interface + */ + +#define VLC_VAR_TYPE 0x00ff +#define VLC_VAR_CLASS 0x00f0 +#define VLC_VAR_FLAGS 0xff00 + +/** + * \defgroup var_type Variable types + * These are the different types a vlc variable can have. + * @{ + */ +#define VLC_VAR_VOID 0x0010 +#define VLC_VAR_BOOL 0x0020 +#define VLC_VAR_INTEGER 0x0030 +#define VLC_VAR_STRING 0x0040 +#define VLC_VAR_FLOAT 0x0050 +#define VLC_VAR_ADDRESS 0x0070 +#define VLC_VAR_COORDS 0x00A0 +/**@}*/ + +/** \defgroup var_flags Additive flags + * These flags are added to the type field of the variable. Most as a result of + * a var_Change() call, but some may be added at creation time + * @{ + */ +#define VLC_VAR_HASCHOICE 0x0100 + +#define VLC_VAR_ISCOMMAND 0x2000 + +/** Creation flag */ +/* If the variable is not found on the current module + search all parents and finally module config until found */ +#define VLC_VAR_DOINHERIT 0x8000 +/**@}*/ + +/** + * \defgroup var_action Variable actions + * These are the different actions that can be used with var_Change(). + * The parameters given are the meaning of the two last parameters of + * var_Change() when this action is being used. + * @{ + */ + +#define VLC_VAR_SETSTEP 0x0012 + +/** + * Set the value of this variable without triggering any callbacks + * \param p_val The new value + * \param p_val2 Unused + */ +#define VLC_VAR_SETVALUE 0x0013 + +#define VLC_VAR_SETTEXT 0x0014 +#define VLC_VAR_GETTEXT 0x0015 + +#define VLC_VAR_GETMIN 0x0016 +#define VLC_VAR_GETMAX 0x0017 +#define VLC_VAR_GETSTEP 0x0018 + +#define VLC_VAR_ADDCHOICE 0x0020 +#define VLC_VAR_DELCHOICE 0x0021 +#define VLC_VAR_CLEARCHOICES 0x0022 +#define VLC_VAR_GETCHOICES 0x0024 + +#define VLC_VAR_CHOICESCOUNT 0x0026 +#define VLC_VAR_SETMINMAX 0x0027 + +/**@}*/ + +/** \defgroup var_GetAndSet Variable actions + * These are the different actions that can be used with var_GetAndSet() + * @{ + */ +enum { + VLC_VAR_BOOL_TOGGLE, /**< Invert a boolean value (param ignored) */ + VLC_VAR_INTEGER_ADD, /**< Add parameter to an integer value */ + VLC_VAR_INTEGER_OR, /**< Binary OR over an integer bits field */ + VLC_VAR_INTEGER_NAND,/**< Binary NAND over an integer bits field */ +}; +/**@}*/ + +/***************************************************************************** + * Prototypes + *****************************************************************************/ +VLC_API int var_Create( vlc_object_t *, const char *, int ); +#define var_Create(a,b,c) var_Create( VLC_OBJECT(a), b, c ) + +VLC_API void var_Destroy( vlc_object_t *, const char * ); +#define var_Destroy(a,b) var_Destroy( VLC_OBJECT(a), b ) + +VLC_API int var_Change( vlc_object_t *, const char *, int, vlc_value_t *, vlc_value_t * ); +#define var_Change(a,b,c,d,e) var_Change( VLC_OBJECT(a), b, c, d, e ) + +VLC_API int var_Type( vlc_object_t *, const char * ) VLC_USED; +#define var_Type(a,b) var_Type( VLC_OBJECT(a), b ) + +VLC_API int var_Set( vlc_object_t *, const char *, vlc_value_t ); +#define var_Set(a,b,c) var_Set( VLC_OBJECT(a), b, c ) + +VLC_API int var_Get( vlc_object_t *, const char *, vlc_value_t * ); +#define var_Get(a,b,c) var_Get( VLC_OBJECT(a), b, c ) + +VLC_API int var_SetChecked( vlc_object_t *, const char *, int, vlc_value_t ); +#define var_SetChecked(o,n,t,v) var_SetChecked(VLC_OBJECT(o),n,t,v) +VLC_API int var_GetChecked( vlc_object_t *, const char *, int, vlc_value_t * ); +#define var_GetChecked(o,n,t,v) var_GetChecked(VLC_OBJECT(o),n,t,v) +VLC_API int var_GetAndSet( vlc_object_t *, const char *, int, vlc_value_t * ); + +VLC_API int var_Inherit( vlc_object_t *, const char *, int, vlc_value_t * ); + +VLC_API void var_FreeList( vlc_value_t *, vlc_value_t * ); + + +/***************************************************************************** + * Variable callbacks + ***************************************************************************** + * int MyCallback( vlc_object_t *p_this, + * char const *psz_variable, + * vlc_value_t oldvalue, + * vlc_value_t newvalue, + * void *p_data); + *****************************************************************************/ +VLC_API void var_AddCallback( vlc_object_t *, const char *, vlc_callback_t, void * ); +VLC_API void var_DelCallback( vlc_object_t *, const char *, vlc_callback_t, void * ); +VLC_API void var_TriggerCallback( vlc_object_t *, const char * ); + +VLC_API void var_AddListCallback( vlc_object_t *, const char *, vlc_list_callback_t, void * ); +VLC_API void var_DelListCallback( vlc_object_t *, const char *, vlc_list_callback_t, void * ); + +#define var_AddCallback(a,b,c,d) var_AddCallback( VLC_OBJECT(a), b, c, d ) +#define var_DelCallback(a,b,c,d) var_DelCallback( VLC_OBJECT(a), b, c, d ) +#define var_TriggerCallback(a,b) var_TriggerCallback( VLC_OBJECT(a), b ) + +#define var_AddListCallback(a,b,c,d) var_AddListCallback( VLC_OBJECT(a), b, c, d ) +#define var_DelListCallback(a,b,c,d) var_DelListCallback( VLC_OBJECT(a), b, c, d ) + +/***************************************************************************** + * helpers functions + *****************************************************************************/ + +/** + * Set the value of an integer variable + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + * \param i The new integer value of this variable + */ +static inline int var_SetInteger( vlc_object_t *p_obj, const char *psz_name, + int64_t i ) +{ + vlc_value_t val; + val.i_int = i; + return var_SetChecked( p_obj, psz_name, VLC_VAR_INTEGER, val ); +} + +/** + * Set the value of an boolean variable + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + * \param b The new boolean value of this variable + */ +static inline int var_SetBool( vlc_object_t *p_obj, const char *psz_name, bool b ) +{ + vlc_value_t val; + val.b_bool = b; + return var_SetChecked( p_obj, psz_name, VLC_VAR_BOOL, val ); +} + +static inline int var_SetCoords( vlc_object_t *obj, const char *name, + int32_t x, int32_t y ) +{ + vlc_value_t val; + val.coords.x = x; + val.coords.y = y; + return var_SetChecked (obj, name, VLC_VAR_COORDS, val); +} +#define var_SetCoords(o,n,x,y) var_SetCoords(VLC_OBJECT(o),n,x,y) + +/** + * Set the value of a float variable + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + * \param f The new float value of this variable + */ +static inline int var_SetFloat( vlc_object_t *p_obj, const char *psz_name, float f ) +{ + vlc_value_t val; + val.f_float = f; + return var_SetChecked( p_obj, psz_name, VLC_VAR_FLOAT, val ); +} + +/** + * Set the value of a string variable + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + * \param psz_string The new string value of this variable + */ +static inline int var_SetString( vlc_object_t *p_obj, const char *psz_name, const char *psz_string ) +{ + vlc_value_t val; + val.psz_string = (char *)psz_string; + return var_SetChecked( p_obj, psz_name, VLC_VAR_STRING, val ); +} + +/** + * Set the value of a pointer variable + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + * \param ptr The new pointer value of this variable + */ +static inline +int var_SetAddress( vlc_object_t *p_obj, const char *psz_name, void *ptr ) +{ + vlc_value_t val; + val.p_address = ptr; + return var_SetChecked( p_obj, psz_name, VLC_VAR_ADDRESS, val ); +} + +#define var_SetInteger(a,b,c) var_SetInteger( VLC_OBJECT(a),b,c) +#define var_SetBool(a,b,c) var_SetBool( VLC_OBJECT(a),b,c) +#define var_SetFloat(a,b,c) var_SetFloat( VLC_OBJECT(a),b,c) +#define var_SetString(a,b,c) var_SetString( VLC_OBJECT(a),b,c) +#define var_SetAddress(o, n, p) var_SetAddress(VLC_OBJECT(o), n, p) + + +/** + * Get an integer value +* + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED +static inline int64_t var_GetInteger( vlc_object_t *p_obj, const char *psz_name ) +{ + vlc_value_t val; + if( !var_GetChecked( p_obj, psz_name, VLC_VAR_INTEGER, &val ) ) + return val.i_int; + else + return 0; +} + +/** + * Get a boolean value + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED +static inline bool var_GetBool( vlc_object_t *p_obj, const char *psz_name ) +{ + vlc_value_t val; val.b_bool = false; + + if( !var_GetChecked( p_obj, psz_name, VLC_VAR_BOOL, &val ) ) + return val.b_bool; + else + return false; +} + +static inline void var_GetCoords( vlc_object_t *obj, const char *name, + int32_t *px, int32_t *py ) +{ + vlc_value_t val; + + if (likely(!var_GetChecked (obj, name, VLC_VAR_COORDS, &val))) + { + *px = val.coords.x; + *py = val.coords.y; + } + else + *px = *py = 0; +} +#define var_GetCoords(o,n,x,y) var_GetCoords(VLC_OBJECT(o),n,x,y) + +/** + * Get a float value + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED +static inline float var_GetFloat( vlc_object_t *p_obj, const char *psz_name ) +{ + vlc_value_t val; val.f_float = 0.0; + if( !var_GetChecked( p_obj, psz_name, VLC_VAR_FLOAT, &val ) ) + return val.f_float; + else + return 0.0; +} + +/** + * Get a string value + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED VLC_MALLOC +static inline char *var_GetString( vlc_object_t *p_obj, const char *psz_name ) +{ + vlc_value_t val; val.psz_string = NULL; + if( var_GetChecked( p_obj, psz_name, VLC_VAR_STRING, &val ) ) + return NULL; + else + return val.psz_string; +} + +VLC_USED VLC_MALLOC +static inline char *var_GetNonEmptyString( vlc_object_t *p_obj, const char *psz_name ) +{ + vlc_value_t val; + if( var_GetChecked( p_obj, psz_name, VLC_VAR_STRING, &val ) ) + return NULL; + if( val.psz_string && *val.psz_string ) + return val.psz_string; + free( val.psz_string ); + return NULL; +} + +VLC_USED +static inline void *var_GetAddress( vlc_object_t *p_obj, const char *psz_name ) +{ + vlc_value_t val; + if( var_GetChecked( p_obj, psz_name, VLC_VAR_ADDRESS, &val ) ) + return NULL; + else + return val.p_address; +} + +/** + * Increment an integer variable + * \param p_obj the object that holds the variable + * \param psz_name the name of the variable + */ +static inline int64_t var_IncInteger( vlc_object_t *p_obj, const char *psz_name ) +{ + vlc_value_t val; + val.i_int = 1; + if( var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val ) ) + return 0; + return val.i_int; +} +#define var_IncInteger(a,b) var_IncInteger( VLC_OBJECT(a), b ) + +/** + * Decrement an integer variable + * \param p_obj the object that holds the variable + * \param psz_name the name of the variable + */ +static inline int64_t var_DecInteger( vlc_object_t *p_obj, const char *psz_name ) +{ + vlc_value_t val; + val.i_int = -1; + if( var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val ) ) + return 0; + return val.i_int; +} +#define var_DecInteger(a,b) var_DecInteger( VLC_OBJECT(a), b ) + +static inline uint64_t var_OrInteger( vlc_object_t *obj, const char *name, + unsigned v ) +{ + vlc_value_t val; + val.i_int = v; + if( var_GetAndSet( obj, name, VLC_VAR_INTEGER_OR, &val ) ) + return 0; + return val.i_int; +} +#define var_OrInteger(a,b,c) var_OrInteger(VLC_OBJECT(a),b,c) + +static inline uint64_t var_NAndInteger( vlc_object_t *obj, const char *name, + unsigned v ) +{ + vlc_value_t val; + val.i_int = v; + if( var_GetAndSet( obj, name, VLC_VAR_INTEGER_NAND, &val ) ) + return 0; + return val.i_int; +} +#define var_NAndInteger(a,b,c) var_NAndInteger(VLC_OBJECT(a),b,c) + +/** + * Create a integer variable with inherit and get its value. + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED +static inline int64_t var_CreateGetInteger( vlc_object_t *p_obj, const char *psz_name ) +{ + var_Create( p_obj, psz_name, VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); + return var_GetInteger( p_obj, psz_name ); +} + +/** + * Create a boolean variable with inherit and get its value. + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED +static inline bool var_CreateGetBool( vlc_object_t *p_obj, const char *psz_name ) +{ + var_Create( p_obj, psz_name, VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); + return var_GetBool( p_obj, psz_name ); +} + +/** + * Create a float variable with inherit and get its value. + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED +static inline float var_CreateGetFloat( vlc_object_t *p_obj, const char *psz_name ) +{ + var_Create( p_obj, psz_name, VLC_VAR_FLOAT | VLC_VAR_DOINHERIT ); + return var_GetFloat( p_obj, psz_name ); +} + +/** + * Create a string variable with inherit and get its value. + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED VLC_MALLOC +static inline char *var_CreateGetString( vlc_object_t *p_obj, + const char *psz_name ) +{ + var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT ); + return var_GetString( p_obj, psz_name ); +} + +VLC_USED VLC_MALLOC +static inline char *var_CreateGetNonEmptyString( vlc_object_t *p_obj, + const char *psz_name ) +{ + var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT ); + return var_GetNonEmptyString( p_obj, psz_name ); +} + +/** + * Create an address variable with inherit and get its value. + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED +static inline void *var_CreateGetAddress( vlc_object_t *p_obj, + const char *psz_name ) +{ + var_Create( p_obj, psz_name, VLC_VAR_ADDRESS | VLC_VAR_DOINHERIT ); + return var_GetAddress( p_obj, psz_name ); +} + +#define var_CreateGetInteger(a,b) var_CreateGetInteger( VLC_OBJECT(a),b) +#define var_CreateGetBool(a,b) var_CreateGetBool( VLC_OBJECT(a),b) +#define var_CreateGetFloat(a,b) var_CreateGetFloat( VLC_OBJECT(a),b) +#define var_CreateGetString(a,b) var_CreateGetString( VLC_OBJECT(a),b) +#define var_CreateGetNonEmptyString(a,b) var_CreateGetNonEmptyString( VLC_OBJECT(a),b) +#define var_CreateGetAddress(a,b) var_CreateGetAddress( VLC_OBJECT(a),b) + +/** + * Create a integer command variable with inherit and get its value. + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED +static inline int64_t var_CreateGetIntegerCommand( vlc_object_t *p_obj, const char *psz_name ) +{ + var_Create( p_obj, psz_name, VLC_VAR_INTEGER | VLC_VAR_DOINHERIT + | VLC_VAR_ISCOMMAND ); + return var_GetInteger( p_obj, psz_name ); +} + +/** + * Create a boolean command variable with inherit and get its value. + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED +static inline bool var_CreateGetBoolCommand( vlc_object_t *p_obj, const char *psz_name ) +{ + var_Create( p_obj, psz_name, VLC_VAR_BOOL | VLC_VAR_DOINHERIT + | VLC_VAR_ISCOMMAND ); + return var_GetBool( p_obj, psz_name ); +} + +/** + * Create a float command variable with inherit and get its value. + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED +static inline float var_CreateGetFloatCommand( vlc_object_t *p_obj, const char *psz_name ) +{ + var_Create( p_obj, psz_name, VLC_VAR_FLOAT | VLC_VAR_DOINHERIT + | VLC_VAR_ISCOMMAND ); + return var_GetFloat( p_obj, psz_name ); +} + +/** + * Create a string command variable with inherit and get its value. + * + * \param p_obj The object that holds the variable + * \param psz_name The name of the variable + */ +VLC_USED VLC_MALLOC +static inline char *var_CreateGetStringCommand( vlc_object_t *p_obj, + const char *psz_name ) +{ + var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT + | VLC_VAR_ISCOMMAND ); + return var_GetString( p_obj, psz_name ); +} + +VLC_USED VLC_MALLOC +static inline char *var_CreateGetNonEmptyStringCommand( vlc_object_t *p_obj, + const char *psz_name ) +{ + var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT + | VLC_VAR_ISCOMMAND ); + return var_GetNonEmptyString( p_obj, psz_name ); +} + +#define var_CreateGetIntegerCommand(a,b) var_CreateGetIntegerCommand( VLC_OBJECT(a),b) +#define var_CreateGetBoolCommand(a,b) var_CreateGetBoolCommand( VLC_OBJECT(a),b) +#define var_CreateGetFloatCommand(a,b) var_CreateGetFloatCommand( VLC_OBJECT(a),b) +#define var_CreateGetStringCommand(a,b) var_CreateGetStringCommand( VLC_OBJECT(a),b) +#define var_CreateGetNonEmptyStringCommand(a,b) var_CreateGetNonEmptyStringCommand( VLC_OBJECT(a),b) + +VLC_USED +static inline int var_CountChoices( vlc_object_t *p_obj, const char *psz_name ) +{ + vlc_value_t count; + if( var_Change( p_obj, psz_name, VLC_VAR_CHOICESCOUNT, &count, NULL ) ) + return 0; + return count.i_int; +} +#define var_CountChoices(a,b) var_CountChoices( VLC_OBJECT(a),b) + + +static inline bool var_ToggleBool( vlc_object_t *p_obj, const char *psz_name ) +{ + vlc_value_t val; + if( var_GetAndSet( p_obj, psz_name, VLC_VAR_BOOL_TOGGLE, &val ) ) + return false; + return val.b_bool; +} +#define var_ToggleBool(a,b) var_ToggleBool( VLC_OBJECT(a),b ) + + +VLC_USED +static inline bool var_InheritBool( vlc_object_t *obj, const char *name ) +{ + vlc_value_t val; + + if( var_Inherit( obj, name, VLC_VAR_BOOL, &val ) ) + val.b_bool = false; + return val.b_bool; +} +#define var_InheritBool(o, n) var_InheritBool(VLC_OBJECT(o), n) + +VLC_USED +static inline int64_t var_InheritInteger( vlc_object_t *obj, const char *name ) +{ + vlc_value_t val; + + if( var_Inherit( obj, name, VLC_VAR_INTEGER, &val ) ) + val.i_int = 0; + return val.i_int; +} +#define var_InheritInteger(o, n) var_InheritInteger(VLC_OBJECT(o), n) + +VLC_USED +static inline float var_InheritFloat( vlc_object_t *obj, const char *name ) +{ + vlc_value_t val; + + if( var_Inherit( obj, name, VLC_VAR_FLOAT, &val ) ) + val.f_float = 0.; + return val.f_float; +} +#define var_InheritFloat(o, n) var_InheritFloat(VLC_OBJECT(o), n) + +VLC_USED VLC_MALLOC +static inline char *var_InheritString( vlc_object_t *obj, const char *name ) +{ + vlc_value_t val; + + if( var_Inherit( obj, name, VLC_VAR_STRING, &val ) ) + val.psz_string = NULL; + else if( val.psz_string && !*val.psz_string ) + { + free( val.psz_string ); + val.psz_string = NULL; + } + return val.psz_string; +} +#define var_InheritString(o, n) var_InheritString(VLC_OBJECT(o), n) + +VLC_USED +static inline void *var_InheritAddress( vlc_object_t *obj, const char *name ) +{ + vlc_value_t val; + + if( var_Inherit( obj, name, VLC_VAR_ADDRESS, &val ) ) + val.p_address = NULL; + return val.p_address; +} +#define var_InheritAddress(o, n) var_InheritAddress(VLC_OBJECT(o), n) + +VLC_API int var_InheritURational( vlc_object_t *, unsigned *num, unsigned *den, const char *var ); +#define var_InheritURational(a,b,c,d) var_InheritURational(VLC_OBJECT(a), b, c, d) + +#define var_GetInteger(a,b) var_GetInteger( VLC_OBJECT(a),b) +#define var_GetBool(a,b) var_GetBool( VLC_OBJECT(a),b) +#define var_GetFloat(a,b) var_GetFloat( VLC_OBJECT(a),b) +#define var_GetString(a,b) var_GetString( VLC_OBJECT(a),b) +#define var_GetNonEmptyString(a,b) var_GetNonEmptyString( VLC_OBJECT(a),b) +#define var_GetAddress(a,b) var_GetAddress( VLC_OBJECT(a),b) + +VLC_API int var_LocationParse(vlc_object_t *, const char *mrl, const char *prefix); +#define var_LocationParse(o, m, p) var_LocationParse(VLC_OBJECT(o), m, p) + +/** + * @} + */ +#endif /* _VLC_VARIABLES_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_video_splitter.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_video_splitter.h new file mode 100644 index 0000000..a5afba5 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_video_splitter.h @@ -0,0 +1,158 @@ +/***************************************************************************** + * vlc_video_splitter.h: "video splitter" related structures and functions + ***************************************************************************** + * Copyright (C) 2009 Laurent Aimar + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_VIDEO_SPLITTER_H +#define VLC_VIDEO_SPLITTER_H 1 + +#include +#include +#include + +/** + * \file + * This file defines the structure and types used by video splitter filters. + */ + +typedef struct video_splitter_t video_splitter_t; +typedef struct video_splitter_sys_t video_splitter_sys_t; +typedef struct video_splitter_owner_t video_splitter_owner_t; + +/** Structure describing a video splitter output properties + */ +typedef struct +{ + /* Video format of the output */ + video_format_t fmt; + + /* Window hints */ + struct + { + /* Relative position. + * (0,0) is equal to the default position. + */ + int i_x; + int i_y; + + /* Alignment inside the window + */ + int i_align; + } window; + + /* Video output module + * Use NULL for default + */ + char *psz_module; + +} video_splitter_output_t; + +/** Structure describing a video splitter + */ +struct video_splitter_t +{ + VLC_COMMON_MEMBERS + + /* Module properties */ + module_t *p_module; + + /* configuration */ + config_chain_t *p_cfg; + + /* Input format + * It is filled by the creator and cannot be modified. + */ + video_format_t fmt; + + /* Output formats + * + * It can only be set in the open() function and must remain + * constant. + * The module is responsible for the allocation and deallocation. + */ + int i_output; + video_splitter_output_t *p_output; + + int (*pf_filter)( video_splitter_t *, picture_t *pp_dst[], + picture_t *p_src ); + int (*pf_mouse) ( video_splitter_t *, vlc_mouse_t *, + int i_index, + const vlc_mouse_t *p_old, const vlc_mouse_t *p_new ); + + video_splitter_sys_t *p_sys; + + /* Buffer allocation */ + int (*pf_picture_new) ( video_splitter_t *, picture_t *pp_picture[] ); + void (*pf_picture_del) ( video_splitter_t *, picture_t *pp_picture[] ); + video_splitter_owner_t *p_owner; +}; + +/** + * It will create an array of pictures suitable as output. + * + * You must either returned them through pf_filter or by calling + * video_splitter_DeletePicture. + * + * If VLC_SUCCESS is not returned, pp_picture values are undefined. + */ +static inline int video_splitter_NewPicture( video_splitter_t *p_splitter, + picture_t *pp_picture[] ) +{ + int i_ret = p_splitter->pf_picture_new( p_splitter, pp_picture ); + if( i_ret ) + msg_Warn( p_splitter, "can't get output pictures" ); + return i_ret; +} + +/** + * It will release an array of pictures created by video_splitter_NewPicture. + * Provided for convenience. + */ +static inline void video_splitter_DeletePicture( video_splitter_t *p_splitter, + picture_t *pp_picture[] ) +{ + p_splitter->pf_picture_del( p_splitter, pp_picture ); +} + +/* */ +video_splitter_t * video_splitter_New( vlc_object_t *, const char *psz_name, const video_format_t * ); +void video_splitter_Delete( video_splitter_t * ); + +static inline int video_splitter_Filter( video_splitter_t *p_splitter, + picture_t *pp_dst[], picture_t *p_src ) +{ + return p_splitter->pf_filter( p_splitter, pp_dst, p_src ); +} +static inline int video_splitter_Mouse( video_splitter_t *p_splitter, + vlc_mouse_t *p_mouse, + int i_index, + const vlc_mouse_t *p_old, const vlc_mouse_t *p_new ) +{ + if( !p_splitter->pf_mouse ) + { + *p_mouse = *p_new; + return VLC_SUCCESS; + } + return p_splitter->pf_mouse( p_splitter, p_mouse, i_index, p_old, p_new ); +} + +#endif /* VLC_VIDEO_SPLITTER_H */ + diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_viewpoint.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_viewpoint.h new file mode 100644 index 0000000..cf01913 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_viewpoint.h @@ -0,0 +1,68 @@ +/***************************************************************************** + * vlc_viewpoint.h: viewpoint struct and helpers + ***************************************************************************** + * Copyright (C) 2017 VLC authors and VideoLAN + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_VIEWPOINT_H_ +#define VLC_VIEWPOINT_H_ 1 + +#include + +#include + +/** + * \defgroup output Output + * \ingroup output + * + * @{ + * \file + * Video and audio viewpoint struct and helpers + */ + +#define FIELD_OF_VIEW_DEGREES_DEFAULT 80.f +#define FIELD_OF_VIEW_DEGREES_MAX 150.f +#define FIELD_OF_VIEW_DEGREES_MIN 20.f + +/** + * Viewpoints + */ +struct vlc_viewpoint_t { + float yaw; /* yaw in degrees */ + float pitch; /* pitch in degrees */ + float roll; /* roll in degrees */ + float fov; /* field of view in degrees */ +}; + +static inline void vlc_viewpoint_init( vlc_viewpoint_t *p_vp ) +{ + p_vp->yaw = p_vp->pitch = p_vp->roll = 0.0f; + p_vp->fov = FIELD_OF_VIEW_DEGREES_DEFAULT; +} + +static inline void vlc_viewpoint_clip( vlc_viewpoint_t *p_vp ) +{ + p_vp->yaw = fmodf( p_vp->yaw, 360.f ); + p_vp->pitch = fmodf( p_vp->pitch, 360.f ); + p_vp->roll = fmodf( p_vp->roll, 360.f ); + p_vp->fov = VLC_CLIP( p_vp->fov, FIELD_OF_VIEW_DEGREES_MIN, + FIELD_OF_VIEW_DEGREES_MAX ); +} + +/**@}*/ + +#endif /* VLC_VIEWPOINT_H_ */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vlm.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vlm.h new file mode 100644 index 0000000..88d4437 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vlm.h @@ -0,0 +1,368 @@ +/***************************************************************************** + * vlc_vlm.h: VLM core structures + ***************************************************************************** + * Copyright (C) 2000, 2001 VLC authors and VideoLAN + * $Id$ + * + * Authors: Simon Latapie + * Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_VLM_H +#define VLC_VLM_H 1 + +#include + +/** + * \defgroup server VLM + * VLC stream manager + * + * VLM is the server core in vlc that allows streaming of multiple media streams + * at the same time. It provides broadcast, schedule and video on demand features + * for streaming using several streaming and network protocols. + * @{ + * \file + * VLC stream manager interface + */ + +/** VLM media */ +typedef struct +{ + int64_t id; /*< numeric id for vlm_media_t item */ + bool b_enabled; /*< vlm_media_t is enabled */ + + char *psz_name; /*< descriptive name of vlm_media_t item */ + + int i_input; /*< number of input options */ + char **ppsz_input; /*< array of input options */ + + int i_option; /*< number of output options */ + char **ppsz_option; /*< array of output options */ + + char *psz_output; /*< */ + + bool b_vod; /*< vlm_media_t is of type VOD */ + struct + { + bool b_loop; /*< this vlc_media_t broadcast item should loop */ + } broadcast; /*< Broadcast specific information */ + struct + { + char *psz_mux; /*< name of muxer to use */ + } vod; /*< VOD specific information */ + +} vlm_media_t; + +/** VLM media instance */ +typedef struct +{ + char *psz_name; /*< vlm media instance descriptive name */ + + int64_t i_time; /*< vlm media instance vlm media current time */ + int64_t i_length; /*< vlm media instance vlm media item length */ + double d_position; /*< vlm media instance position in stream */ + bool b_paused; /*< vlm media instance is paused */ + int i_rate; // normal is INPUT_RATE_DEFAULT +} vlm_media_instance_t; + +#if 0 +typedef struct +{ + +} vlm_schedule_t +#endif + +/** VLM events + * You can catch vlm event by adding a callback on the variable "intf-event" + * of the VLM object. + * This variable is an address that will hold a vlm_event_t* value. + */ +enum vlm_event_type_e +{ + /* */ + VLM_EVENT_MEDIA_ADDED = 0x100, + VLM_EVENT_MEDIA_REMOVED, + VLM_EVENT_MEDIA_CHANGED, + + /* */ + VLM_EVENT_MEDIA_INSTANCE_STARTED = 0x200, + VLM_EVENT_MEDIA_INSTANCE_STOPPED, + VLM_EVENT_MEDIA_INSTANCE_STATE, +}; + +typedef struct +{ + int i_type; /* a vlm_event_type_e value */ + int64_t id; /* Media ID */ + const char *psz_name; /* Media name */ + const char *psz_instance_name; /* Instance name or NULL */ + input_state_e input_state; /* Input instance event type */ +} vlm_event_t; + +/** VLM control query */ +enum vlm_query_e +{ + /* --- Media control */ + /* Get all medias */ + VLM_GET_MEDIAS, /* arg1=vlm_media_t ***, int *pi_media */ + /* Delete all medias */ + VLM_CLEAR_MEDIAS, /* no arg */ + + /* Add a new media */ + VLM_ADD_MEDIA, /* arg1=vlm_media_t* arg2=int64_t *p_id res=can fail */ + /* Delete an existing media */ + VLM_DEL_MEDIA, /* arg1=int64_t id */ + /* Change properties of an existing media (all fields but id and b_vod) */ + VLM_CHANGE_MEDIA, /* arg1=vlm_media_t* res=can fail */ + /* Get 1 media by it's ID */ + VLM_GET_MEDIA, /* arg1=int64_t id arg2=vlm_media_t ** */ + /* Get media ID from its name */ + VLM_GET_MEDIA_ID, /* arg1=const char *psz_name arg2=int64_t* */ + + /* Media instance control XXX VOD control are for internal use only */ + /* Get all media instances */ + VLM_GET_MEDIA_INSTANCES, /* arg1=int64_t id arg2=vlm_media_instance_t *** arg3=int *pi_instance */ + /* Delete all media instances */ + VLM_CLEAR_MEDIA_INSTANCES, /* arg1=int64_t id */ + /* Control broadcast instance */ + VLM_START_MEDIA_BROADCAST_INSTANCE, /* arg1=int64_t id, arg2=const char *psz_instance_name, int i_input_index res=can fail */ + /* Control VOD instance */ + VLM_START_MEDIA_VOD_INSTANCE, /* arg1=int64_t id, arg2=const char *psz_instance_name, int i_input_index char *psz_vod_output res=can fail */ + /* Stop an instance */ + VLM_STOP_MEDIA_INSTANCE, /* arg1=int64_t id, arg2=const char *psz_instance_name res=can fail */ + /* Pause an instance */ + VLM_PAUSE_MEDIA_INSTANCE, /* arg1=int64_t id, arg2=const char *psz_instance_name res=can fail */ + /* Get instance position time (in microsecond) */ + VLM_GET_MEDIA_INSTANCE_TIME, /* arg1=int64_t id, arg2=const char *psz_instance_name arg3=int64_t * */ + /* Set instance position time (in microsecond) */ + VLM_SET_MEDIA_INSTANCE_TIME, /* arg1=int64_t id, arg2=const char *psz_instance_name arg3=int64_t */ + /* Get instance position ([0.0 .. 1.0]) */ + VLM_GET_MEDIA_INSTANCE_POSITION, /* arg1=int64_t id, arg2=const char *psz_instance_name arg3=double * */ + /* Set instance position ([0.0 .. 1.0]) */ + VLM_SET_MEDIA_INSTANCE_POSITION, /* arg1=int64_t id, arg2=const char *psz_instance_name arg3=double */ + + /* Schedule control */ + VLM_CLEAR_SCHEDULES, /* no arg */ + /* TODO: missing schedule control */ + + /* */ +}; + + +/* VLM specific - structures and functions */ + +/* ok, here is the structure of a vlm_message: + The parent node is ( name_of_the_command , NULL ), or + ( name_of_the_command , message_error ) on error. + If a node has children, it should not have a value (=NULL).*/ +struct vlm_message_t +{ + char *psz_name; /*< message name */ + char *psz_value; /*< message value */ + + int i_child; /*< number of child messages */ + vlm_message_t **child; /*< array of vlm_message_t */ +}; + + +#ifdef __cplusplus +extern "C" { +#endif + +VLC_API vlm_t * vlm_New( vlc_object_t * ); +#define vlm_New( a ) vlm_New( VLC_OBJECT(a) ) +VLC_API void vlm_Delete( vlm_t * ); +VLC_API int vlm_ExecuteCommand( vlm_t *, const char *, vlm_message_t ** ); +VLC_API int vlm_Control( vlm_t *p_vlm, int i_query, ... ); + +VLC_API vlm_message_t * vlm_MessageSimpleNew( const char * ); +VLC_API vlm_message_t * vlm_MessageNew( const char *, const char *, ... ) VLC_FORMAT( 2, 3 ); +VLC_API vlm_message_t * vlm_MessageAdd( vlm_message_t *, vlm_message_t * ); +VLC_API void vlm_MessageDelete( vlm_message_t * ); + +/* media helpers */ + +/** + * Initialize a vlm_media_t instance + * \param p_media vlm_media_t instance to initialize + */ +static inline void vlm_media_Init( vlm_media_t *p_media ) +{ + memset( p_media, 0, sizeof(vlm_media_t) ); + p_media->id = 0; // invalid id + p_media->psz_name = NULL; + TAB_INIT( p_media->i_input, p_media->ppsz_input ); + TAB_INIT( p_media->i_option, p_media->ppsz_option ); + p_media->psz_output = NULL; + p_media->b_vod = false; + + p_media->vod.psz_mux = NULL; + p_media->broadcast.b_loop = false; +} + +/** + * Copy a vlm_media_t instance into another vlm_media_t instance + * \param p_dst vlm_media_t instance to copy to + * \param p_src vlm_media_t instance to copy from + */ +static inline void +#ifndef __cplusplus +vlm_media_Copy( vlm_media_t *restrict p_dst, const vlm_media_t *restrict p_src ) +#else +vlm_media_Copy( vlm_media_t *p_dst, const vlm_media_t *p_src ) +#endif +{ + int i; + + memset( p_dst, 0, sizeof(vlm_media_t) ); + p_dst->id = p_src->id; + p_dst->b_enabled = p_src->b_enabled; + if( p_src->psz_name ) + p_dst->psz_name = strdup( p_src->psz_name ); + + for( i = 0; i < p_src->i_input; i++ ) + TAB_APPEND_CAST( (char**), p_dst->i_input, p_dst->ppsz_input, strdup(p_src->ppsz_input[i]) ); + for( i = 0; i < p_src->i_option; i++ ) + TAB_APPEND_CAST( (char**), p_dst->i_option, p_dst->ppsz_option, strdup(p_src->ppsz_option[i]) ); + + if( p_src->psz_output ) + p_dst->psz_output = strdup( p_src->psz_output ); + + p_dst->b_vod = p_src->b_vod; + if( p_src->b_vod ) + { + if( p_src->vod.psz_mux ) + p_dst->vod.psz_mux = strdup( p_src->vod.psz_mux ); + } + else + { + p_dst->broadcast.b_loop = p_src->broadcast.b_loop; + } +} + +/** + * Cleanup and release memory associated with this vlm_media_t instance. + * You still need to release p_media itself with vlm_media_Delete(). + * \param p_media vlm_media_t to cleanup + */ +static inline void vlm_media_Clean( vlm_media_t *p_media ) +{ + int i; + free( p_media->psz_name ); + + for( i = 0; i < p_media->i_input; i++ ) + free( p_media->ppsz_input[i]); + TAB_CLEAN(p_media->i_input, p_media->ppsz_input ); + + for( i = 0; i < p_media->i_option; i++ ) + free( p_media->ppsz_option[i]); + TAB_CLEAN(p_media->i_option, p_media->ppsz_option ); + + free( p_media->psz_output ); + if( p_media->b_vod ) + free( p_media->vod.psz_mux ); +} + +/** + * Allocate a new vlm_media_t instance + * \return vlm_media_t instance + */ +static inline vlm_media_t *vlm_media_New(void) +{ + vlm_media_t *p_media = (vlm_media_t *)malloc( sizeof(vlm_media_t) ); + if( p_media ) + vlm_media_Init( p_media ); + return p_media; +} + +/** + * Delete a vlm_media_t instance + * \param p_media vlm_media_t instance to delete + */ +static inline void vlm_media_Delete( vlm_media_t *p_media ) +{ + vlm_media_Clean( p_media ); + free( p_media ); +} + +/** + * Copy a vlm_media_t instance + * \param p_src vlm_media_t instance to copy + * \return vlm_media_t duplicate of p_src + */ +static inline vlm_media_t *vlm_media_Duplicate( vlm_media_t *p_src ) +{ + vlm_media_t *p_dst = vlm_media_New(); + if( p_dst ) + vlm_media_Copy( p_dst, p_src ); + return p_dst; +} + +/* media instance helpers */ +/** + * Initialize vlm_media_instance_t + * \param p_instance vlm_media_instance_t to initialize + */ +static inline void vlm_media_instance_Init( vlm_media_instance_t *p_instance ) +{ + memset( p_instance, 0, sizeof(vlm_media_instance_t) ); + p_instance->psz_name = NULL; + p_instance->i_time = 0; + p_instance->i_length = 0; + p_instance->d_position = 0.0; + p_instance->b_paused = false; + p_instance->i_rate = INPUT_RATE_DEFAULT; +} + +/** + * Cleanup vlm_media_instance_t + * \param p_instance vlm_media_instance_t to cleanup + */ +static inline void vlm_media_instance_Clean( vlm_media_instance_t *p_instance ) +{ + free( p_instance->psz_name ); +} + +/** + * Allocate a new vlm_media_instance_t + * \return a new vlm_media_instance_t + */ +static inline vlm_media_instance_t *vlm_media_instance_New(void) +{ + vlm_media_instance_t *p_instance = (vlm_media_instance_t *) malloc( sizeof(vlm_media_instance_t) ); + if( p_instance ) + vlm_media_instance_Init( p_instance ); + return p_instance; +} + +/** + * Delete a vlm_media_instance_t + * \param p_instance vlm_media_instance_t to delete + */ +static inline void vlm_media_instance_Delete( vlm_media_instance_t *p_instance ) +{ + vlm_media_instance_Clean( p_instance ); + free( p_instance ); +} + +#ifdef __cplusplus +} +#endif + +/**@}*/ + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout.h new file mode 100644 index 0000000..a73080b --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout.h @@ -0,0 +1,167 @@ +/***************************************************************************** + * vlc_vout.h: common video definitions + ***************************************************************************** + * Copyright (C) 1999 - 2008 VLC authors and VideoLAN + * $Id$ + * + * Authors: Vincent Seguin + * Samuel Hocevar + * Olivier Aubert + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_VOUT_H_ +#define VLC_VOUT_H_ 1 + +#include +#include +#include + +/** + * \defgroup output Output + * \defgroup video_output Video output + * \ingroup output + * Video rendering, output and window management + * + * This module describes the programming interface for video output threads. + * It includes functions allowing to open a new thread, send pictures to a + * thread, and destroy a previously opened video output thread. + * @{ + * \file + * Video output thread interface + */ + +/** + * Vout configuration + */ +typedef struct { + vout_thread_t *vout; + vlc_object_t *input; + bool change_fmt; + const video_format_t *fmt; + unsigned dpb_size; +} vout_configuration_t; + +/** + * Video output thread private structure + */ +typedef struct vout_thread_sys_t vout_thread_sys_t; + +/** + * Video output thread descriptor + * + * Any independent video output device, such as an X11 window or a GGI device, + * is represented by a video output thread, and described using the following + * structure. + */ +struct vout_thread_t { + VLC_COMMON_MEMBERS + + /* Private vout_thread data */ + vout_thread_sys_t *p; +}; + +/* Alignment flags */ +#define VOUT_ALIGN_LEFT 0x0001 +#define VOUT_ALIGN_RIGHT 0x0002 +#define VOUT_ALIGN_HMASK 0x0003 +#define VOUT_ALIGN_TOP 0x0004 +#define VOUT_ALIGN_BOTTOM 0x0008 +#define VOUT_ALIGN_VMASK 0x000C + +/***************************************************************************** + * Prototypes + *****************************************************************************/ + +/** + * Returns a suitable vout or release the given one. + * + * If cfg->fmt is non NULL and valid, a vout will be returned, reusing cfg->vout + * is possible, otherwise it returns NULL. + * If cfg->vout is not used, it will be closed and released. + * + * You can release the returned value either by vout_Request or vout_Close() + * followed by a vlc_object_release() or shorter vout_CloseAndRelease() + * + * \param object a vlc object + * \param cfg the video configuration requested. + * \return a vout + */ +VLC_API vout_thread_t * vout_Request( vlc_object_t *object, const vout_configuration_t *cfg ); +#define vout_Request(a,b) vout_Request(VLC_OBJECT(a),b) + +/** + * This function will close a vout created by vout_Request. + * The associated vout module is closed. + * Note: It is not released yet, you'll have to call vlc_object_release() + * or use the convenient vout_CloseAndRelease(). + * + * \param p_vout the vout to close + */ +VLC_API void vout_Close( vout_thread_t *p_vout ); + +/** + * This function will close a vout created by vout_Create + * and then release it. + * + * \param p_vout the vout to close and release + */ +static inline void vout_CloseAndRelease( vout_thread_t *p_vout ) +{ + vout_Close( p_vout ); + vlc_object_release( p_vout ); +} + +/** + * This function will handle a snapshot request. + * + * pp_image, pp_picture and p_fmt can be NULL otherwise they will be + * set with returned value in case of success. + * + * pp_image will hold an encoded picture in psz_format format. + * + * p_fmt can be NULL otherwise it will be set with the format used for the + * picture before encoding. + * + * i_timeout specifies the time the function will wait for a snapshot to be + * available. + * + */ +VLC_API int vout_GetSnapshot( vout_thread_t *p_vout, + block_t **pp_image, picture_t **pp_picture, + video_format_t *p_fmt, + const char *psz_format, vlc_tick_t i_timeout ); + +VLC_API void vout_ChangeAspectRatio( vout_thread_t *p_vout, + unsigned int i_num, unsigned int i_den ); + +/* */ +VLC_API picture_t * vout_GetPicture( vout_thread_t * ); +VLC_API void vout_PutPicture( vout_thread_t *, picture_t * ); + +/* Subpictures channels ID */ +#define VOUT_SPU_CHANNEL_INVALID (-1) /* Always fails in comparison */ +#define VOUT_SPU_CHANNEL_OSD 1 /* OSD channel is automatically cleared */ +#define VOUT_SPU_CHANNEL_AVAIL_FIRST 8 /* Registerable channels from this offset */ + +/* */ +VLC_API void vout_PutSubpicture( vout_thread_t *, subpicture_t * ); +VLC_API int vout_RegisterSubpictureChannel( vout_thread_t * ); +VLC_API void vout_FlushSubpictureChannel( vout_thread_t *, int ); + +/**@}*/ + +#endif /* _VLC_VIDEO_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout_display.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout_display.h new file mode 100644 index 0000000..80761c8 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout_display.h @@ -0,0 +1,481 @@ +/***************************************************************************** + * vlc_vout_display.h: vout_display_t definitions + ***************************************************************************** + * Copyright (C) 2009 Laurent Aimar + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_VOUT_DISPLAY_H +#define VLC_VOUT_DISPLAY_H 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + * \defgroup video_display Video output display + * Video output display: output buffers and rendering + * + * \ingroup video_output + * @{ + * \file + * Video output display modules interface + */ + +/* XXX + * Do NOT use video_format_t::i_aspect but i_sar_num/den everywhere. i_aspect + * will be removed as soon as possible. + * + */ +typedef struct vout_display_t vout_display_t; +typedef struct vout_display_sys_t vout_display_sys_t; +typedef struct vout_display_owner_t vout_display_owner_t; + +/** + * Possible alignments for vout_display. + */ +typedef enum +{ + VOUT_DISPLAY_ALIGN_CENTER, + /* */ + VOUT_DISPLAY_ALIGN_LEFT, + VOUT_DISPLAY_ALIGN_RIGHT, + /* */ + VOUT_DISPLAY_ALIGN_TOP, + VOUT_DISPLAY_ALIGN_BOTTOM, +} vout_display_align_t; + +/** + * Window management state. + */ +enum { + VOUT_WINDOW_STATE_NORMAL=0, + VOUT_WINDOW_STATE_ABOVE=1, + VOUT_WINDOW_STATE_BELOW=2, + VOUT_WINDOW_STACK_MASK=3, +}; + +/** + * Initial/Current configuration for a vout_display_t + */ +typedef struct { +#if defined(_WIN32) || defined(__OS2__) + bool is_fullscreen VLC_DEPRECATED; /* Is the display fullscreen */ +#endif + + /* Display properties */ + struct { + /* Window title (may be NULL) */ + const char *title; + + /* Display size */ + unsigned width; + unsigned height; + + /* Display SAR */ + vlc_rational_t sar; + } display; + + /* Alignment of the picture inside the display */ + struct { + int horizontal; + int vertical; + } align; + + /* Do we fill up the display with the video */ + bool is_display_filled; + + /* Zoom to use + * It will be applied to the whole display if b_display_filled is set, otherwise + * only on the video source */ + struct { + int num; + int den; + } zoom; + + vlc_viewpoint_t viewpoint; +} vout_display_cfg_t; + +/** + * Information from a vout_display_t to configure + * the core behaviour. + * + * By default they are all false or NULL. + * + */ +typedef struct { + bool is_slow; /* The picture memory has slow read/write */ + bool has_double_click; /* Is double-click generated */ + bool needs_hide_mouse; /* Needs VOUT_DISPLAY_HIDE_MOUSE, + * needs to call vout_display_SendEventMouseMoved() + * or vout_display_SendEventMouseState() */ + bool has_pictures_invalid; /* Will VOUT_DISPLAY_EVENT_PICTURES_INVALID be used */ + const vlc_fourcc_t *subpicture_chromas; /* List of supported chromas for subpicture rendering. */ +} vout_display_info_t; + +/** + * Control query for vout_display_t + */ +enum { + /* Hide the mouse. It will be sent when + * vout_display_t::info.needs_hide_mouse is true */ + VOUT_DISPLAY_HIDE_MOUSE VLC_DEPRECATED_ENUM, + + /* Ask to reset the internal buffers after a VOUT_DISPLAY_EVENT_PICTURES_INVALID + * request. + */ + VOUT_DISPLAY_RESET_PICTURES, + +#if defined(_WIN32) || defined(__OS2__) + /* Ask the module to acknowledge/refuse the fullscreen state change after + * being requested (externally or by VOUT_DISPLAY_EVENT_FULLSCREEN */ + VOUT_DISPLAY_CHANGE_FULLSCREEN VLC_DEPRECATED_ENUM, /* bool fs */ + /* Ask the module to acknowledge/refuse the window management state change + * after being requested externally or by VOUT_DISPLAY_WINDOW_STATE */ + VOUT_DISPLAY_CHANGE_WINDOW_STATE VLC_DEPRECATED_ENUM, /* unsigned state */ +#endif + /* Ask the module to acknowledge/refuse the display size change requested + * (externally or by VOUT_DISPLAY_EVENT_DISPLAY_SIZE) */ + VOUT_DISPLAY_CHANGE_DISPLAY_SIZE, /* const vout_display_cfg_t *p_cfg */ + + /* Ask the module to acknowledge/refuse fill display state change after + * being requested externally */ + VOUT_DISPLAY_CHANGE_DISPLAY_FILLED, /* const vout_display_cfg_t *p_cfg */ + + /* Ask the module to acknowledge/refuse zoom change after being requested + * externally */ + VOUT_DISPLAY_CHANGE_ZOOM, /* const vout_display_cfg_t *p_cfg */ + + /* Ask the module to acknowledge/refuse source aspect ratio after being + * requested externally */ + VOUT_DISPLAY_CHANGE_SOURCE_ASPECT, + + /* Ask the module to acknowledge/refuse source crop change after being + * requested externally. + * The cropping requested is stored by video_format_t::i_x/y_offset and + * video_format_t::i_visible_width/height */ + VOUT_DISPLAY_CHANGE_SOURCE_CROP, + + /* Ask the module to acknowledge/refuse VR/360° viewing direction after + * being requested externally */ + VOUT_DISPLAY_CHANGE_VIEWPOINT, /* const vout_display_cfg_t *p_cfg */ +}; + +/** + * Event from vout_display_t + * + * Events modifiying the state may be sent multiple times. + * Only the transition will be retained and acted upon. + */ +enum { + /* TODO: + * ZOOM ? DISPLAY_FILLED ? ON_TOP ? + */ + /* */ + VOUT_DISPLAY_EVENT_PICTURES_INVALID, /* The buffer are now invalid and need to be changed */ + +#if defined(_WIN32) || defined(__OS2__) + VOUT_DISPLAY_EVENT_FULLSCREEN, + VOUT_DISPLAY_EVENT_WINDOW_STATE, +#endif + + VOUT_DISPLAY_EVENT_DISPLAY_SIZE, /* The display size need to change : int i_width, int i_height */ + + /* */ + VOUT_DISPLAY_EVENT_CLOSE, + VOUT_DISPLAY_EVENT_KEY, + + /* Full mouse state. + * You can use it OR use the other mouse events. The core will do + * the conversion. + */ + VOUT_DISPLAY_EVENT_MOUSE_STATE, + + /* Mouse event */ + VOUT_DISPLAY_EVENT_MOUSE_MOVED, + VOUT_DISPLAY_EVENT_MOUSE_PRESSED, + VOUT_DISPLAY_EVENT_MOUSE_RELEASED, + VOUT_DISPLAY_EVENT_MOUSE_DOUBLE_CLICK, + + /* VR navigation */ + VOUT_DISPLAY_EVENT_VIEWPOINT_MOVED, +}; + +/** + * Vout owner structures + */ +struct vout_display_owner_t { + /* Private place holder for the vout_display_t creator + */ + void *sys; + + /* Event coming from the module + * + * This function is set prior to the module instantiation and must not + * be overwritten nor used directly (use the vout_display_SendEvent* + * wrapper. + * + * You can send it at any time i.e. from any vout_display_t functions or + * from another thread. + * Be careful, it does not ensure correct serialization if it is used + * from multiple threads. + */ + void (*event)(vout_display_t *, int, va_list); + + /* Window management + * + * These functions are set prior to the module instantiation and must not + * be overwritten nor used directly (use the vout_display_*Window + * wrapper */ + vout_window_t *(*window_new)(vout_display_t *, unsigned type); + void (*window_del)(vout_display_t *, vout_window_t *); +}; + +struct vout_display_t { + VLC_COMMON_MEMBERS + + /* Module */ + module_t *module; + + /* Initial and current configuration. + * You cannot modify it directly, you must use the appropriate events. + * + * It reflects the current values, i.e. after the event has been accepted + * and applied/configured if needed. + */ + const vout_display_cfg_t *cfg; + + /* video source format. + * + * Cropping is not requested while in the open function. + * You cannot change it. + */ + video_format_t source; + + /* picture_t format. + * + * You can only change it inside the module open function to + * match what you want, and when a VOUT_DISPLAY_RESET_PICTURES control + * request is made and succeeds. + * + * By default, it is equal to ::source except for the aspect ratio + * which is undefined(0) and is ignored. + */ + video_format_t fmt; + + /* Information + * + * You can only set them in the open function. + */ + vout_display_info_t info; + + /* Return a pointer over the current picture_pool_t* (mandatory). + * + * For performance reasons, it is best to provide at least count + * pictures but it is not mandatory. + * You can return NULL when you cannot/do not want to allocate + * pictures. + * The vout display module keeps the ownership of the pool and can + * destroy it only when closing or on invalid pictures control. + */ + picture_pool_t *(*pool)(vout_display_t *, unsigned count); + + /* Prepare a picture and an optional subpicture for display (optional). + * + * It is called before the next pf_display call to provide as much + * time as possible to prepare the given picture and the subpicture + * for display. + * You are guaranted that pf_display will always be called and using + * the exact same picture_t and subpicture_t. + * You cannot change the pixel content of the picture_t or of the + * subpicture_t. + */ + void (*prepare)(vout_display_t *, picture_t *, subpicture_t *); + + /* Display a picture and an optional subpicture (mandatory). + * + * The picture and the optional subpicture must be displayed as soon as + * possible. + * You cannot change the pixel content of the picture_t or of the + * subpicture_t. + * + * This function gives away the ownership of the picture and of the + * subpicture, so you must release them as soon as possible. + */ + void (*display)(vout_display_t *, picture_t *, subpicture_t *); + + /* Control on the module (mandatory) */ + int (*control)(vout_display_t *, int, va_list); + + /* Manage pending event (optional) */ + void (*manage)(vout_display_t *) VLC_DEPRECATED; + + /* Private place holder for the vout_display_t module (optional) + * + * A module is free to use it as it wishes. + */ + vout_display_sys_t *sys; + + /* Reserved for the vout_display_t owner. + * + * It must not be overwritten nor used directly by a module. + */ + vout_display_owner_t owner; +}; + +static inline void vout_display_SendEvent(vout_display_t *vd, int query, ...) +{ + va_list args; + va_start(args, query); + vd->owner.event(vd, query, args); + va_end(args); +} + +static inline void vout_display_SendEventDisplaySize(vout_display_t *vd, int width, int height) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_DISPLAY_SIZE, width, height); +} +static inline void vout_display_SendEventPicturesInvalid(vout_display_t *vd) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_PICTURES_INVALID); +} +static inline void vout_display_SendEventClose(vout_display_t *vd) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_CLOSE); +} +static inline void vout_display_SendEventKey(vout_display_t *vd, int key) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_KEY, key); +} +#if defined(_WIN32) || defined(__OS2__) +static inline void vout_display_SendEventFullscreen(vout_display_t *vd, bool is_fullscreen, + bool is_window_fullscreen) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_FULLSCREEN, is_fullscreen, is_window_fullscreen); +} +static inline void vout_display_SendWindowState(vout_display_t *vd, unsigned state) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_WINDOW_STATE, state); +} +#endif +/* The mouse position (State and Moved event) must be expressed against vout_display_t::source unit */ +static inline void vout_display_SendEventMouseState(vout_display_t *vd, int x, int y, int button_mask) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_MOUSE_STATE, x, y, button_mask); +} +static inline void vout_display_SendEventMouseMoved(vout_display_t *vd, int x, int y) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_MOUSE_MOVED, x, y); +} +static inline void vout_display_SendEventMousePressed(vout_display_t *vd, int button) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_MOUSE_PRESSED, button); +} +static inline void vout_display_SendEventMouseReleased(vout_display_t *vd, int button) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_MOUSE_RELEASED, button); +} +static inline void vout_display_SendEventMouseDoubleClick(vout_display_t *vd) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_MOUSE_DOUBLE_CLICK); +} +static inline void vout_display_SendEventViewpointMoved(vout_display_t *vd, + const vlc_viewpoint_t *vp) +{ + vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_VIEWPOINT_MOVED, vp); +} + +/** + * Asks for a new window of a given type. + */ +static inline vout_window_t *vout_display_NewWindow(vout_display_t *vd, unsigned type) +{ + return vd->owner.window_new(vd, type); +} +/** + * Deletes a window created by vout_display_NewWindow if window is non NULL + * or any unused windows otherwise. + */ +static inline void vout_display_DeleteWindow(vout_display_t *vd, + vout_window_t *window) +{ + vd->owner.window_del(vd, window); +} + +static inline bool vout_display_IsWindowed(vout_display_t *vd) +{ + vout_window_t *window = vout_display_NewWindow(vd, VOUT_WINDOW_TYPE_INVALID); + if (window != NULL) + vout_display_DeleteWindow(vd, window); + return window != NULL; +} + +/** + * Computes the default display size given the source and + * the display configuration. + * + * This asssumes that the picture is already cropped. + */ +VLC_API void vout_display_GetDefaultDisplaySize(unsigned *width, unsigned *height, const video_format_t *source, const vout_display_cfg_t *); + + +/** + * Structure used to store the result of a vout_display_PlacePicture. + */ +typedef struct { + int x; + int y; + unsigned width; + unsigned height; +} vout_display_place_t; + +/** + * Computes how to place a picture inside the display to respect + * the given parameters. + * This assumes that cropping is done by an external mean. + * + * \param p_place Place inside the window (window pixel unit) + * \param p_source Video source format + * \param p_cfg Display configuration + * \param b_clip If true, prevent the video to go outside the display (break zoom). + */ +VLC_API void vout_display_PlacePicture(vout_display_place_t *place, const video_format_t *source, const vout_display_cfg_t *cfg, bool do_clipping); + + +/** + * Helper function that applies the necessary transforms to the mouse position + * and then calls vout_display_SendEventMouseMoved. + * + * \param vd vout_display_t. + * \param orient_display The orientation of the picture as seen on screen (probably ORIENT_NORMAL). + * \param m_x Mouse x position (relative to place, origin is top left). + * \param m_y Mouse y position (relative to place, origin is top left). + * \param place Place of the picture. + */ +VLC_API void vout_display_SendMouseMovedDisplayCoordinates(vout_display_t *vd, video_orientation_t orient_display, int m_x, int m_y, + vout_display_place_t *place); + +/** @} */ +#endif /* VLC_VOUT_DISPLAY_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout_osd.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout_osd.h new file mode 100644 index 0000000..a97b068 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout_osd.h @@ -0,0 +1,102 @@ +/***************************************************************************** + * vlc_vout_osd.h: vout OSD + ***************************************************************************** + * Copyright (C) 1999-2010 VLC authors and VideoLAN + * Copyright (C) 2004-2005 M2X + * $Id$ + * + * Authors: Jean-Paul Saman + * Gildas Bazin + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_VOUT_OSD_H +#define VLC_VOUT_OSD_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup osd On-screen display + * \ingroup spu + * @{ + * \file + * Overlay text and widgets + */ + +/** + * OSD menu position and picture type defines + */ +enum +{ + /* Icons */ + OSD_PLAY_ICON = 1, + OSD_PAUSE_ICON, + OSD_SPEAKER_ICON, + OSD_MUTE_ICON, + /* Sliders */ + OSD_HOR_SLIDER, + OSD_VERT_SLIDER, +}; + +VLC_API int vout_OSDEpg( vout_thread_t *, input_item_t * ); + +/** + * \brief Write an informative message if the OSD option is enabled. + * \param vout The vout on which the message will be displayed + * \param channel Subpicture channel + * \param position Position of the text + * \param duration Duration of the text being displayed + * \param text Text to be displayed + */ +VLC_API void vout_OSDText( vout_thread_t *vout, int channel, int position, vlc_tick_t duration, const char *text ); + +/** + * \brief Write an informative message at the default location, + * for the default duration and only if the OSD option is enabled. + * \param vout The vout on which the message will be displayed + * \param channel Subpicture channel + * \param format printf style formatting + * + * Provided for convenience. + */ +VLC_API void vout_OSDMessage( vout_thread_t *, int, const char *, ... ) VLC_FORMAT( 3, 4 ); + +/** + * Display a slider on the video output. + * \param p_this The object that called the function. + * \param i_channel Subpicture channel + * \param i_postion Current position in the slider + * \param i_type Types are: OSD_HOR_SLIDER and OSD_VERT_SLIDER. + */ +VLC_API void vout_OSDSlider( vout_thread_t *, int, int , short ); + +/** + * Display an Icon on the video output. + * \param p_this The object that called the function. + * \param i_channel Subpicture channel + * \param i_type Types are: OSD_PLAY_ICON, OSD_PAUSE_ICON, OSD_SPEAKER_ICON, OSD_MUTE_ICON + */ +VLC_API void vout_OSDIcon( vout_thread_t *, int, short ); + +/** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* VLC_VOUT_OSD_H */ + diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout_window.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout_window.h new file mode 100644 index 0000000..3a613d4 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_vout_window.h @@ -0,0 +1,373 @@ +/***************************************************************************** + * vlc_vout_window.h: vout_window_t definitions + ***************************************************************************** + * Copyright (C) 2008 Rémi Denis-Courmont + * Copyright (C) 2009 Laurent Aimar + * $Id$ + * + * Authors: Laurent Aimar + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_VOUT_WINDOW_H +#define VLC_VOUT_WINDOW_H 1 + +#include +#include + +/** + * \defgroup video_window Video window + * \ingroup video_output + * Video output window management + * @{ + * \file + * Video output window modules interface + */ + +typedef struct vout_window_t vout_window_t; +typedef struct vout_window_sys_t vout_window_sys_t; + +struct wl_display; +struct wl_surface; + +/** + * Window handle type + */ +enum vout_window_type { + VOUT_WINDOW_TYPE_INVALID=0 /**< Invalid or unspecified window type */, + VOUT_WINDOW_TYPE_XID /**< X11 window */, + VOUT_WINDOW_TYPE_HWND /**< Win32 or OS/2 window */, + VOUT_WINDOW_TYPE_NSOBJECT /**< MacOS X view */, + VOUT_WINDOW_TYPE_ANDROID_NATIVE /**< Android native window */, + VOUT_WINDOW_TYPE_WAYLAND /**< Wayland surface */, +}; + +/** + * Control query for vout_window_t + */ +enum vout_window_control { + VOUT_WINDOW_SET_STATE, /* unsigned state */ + VOUT_WINDOW_SET_SIZE, /* unsigned i_width, unsigned i_height */ + VOUT_WINDOW_SET_FULLSCREEN, /* int b_fullscreen */ + VOUT_WINDOW_HIDE_MOUSE, /* int b_hide */ +}; + +/** + * Window mouse event type for vout_window_mouse_event_t + */ +enum vout_window_mouse_event_type { + VOUT_WINDOW_MOUSE_STATE, + VOUT_WINDOW_MOUSE_MOVED, + VOUT_WINDOW_MOUSE_PRESSED, + VOUT_WINDOW_MOUSE_RELEASED, + VOUT_WINDOW_MOUSE_DOUBLE_CLICK, +}; + +/** + * Window mouse event + */ +typedef struct vout_window_mouse_event_t +{ + enum vout_window_mouse_event_type type; + int x; + int y; + int button_mask; +} vout_window_mouse_event_t; + +typedef struct vout_window_cfg_t { + /* Window handle type */ + unsigned type; + + /* If true, a standalone window is requested */ + bool is_standalone; + bool is_fullscreen; + +#ifdef __APPLE__ + /* Window position hint */ + int x; + int y; +#endif + + /* Windows size hint */ + unsigned width; + unsigned height; + +} vout_window_cfg_t; + +typedef struct vout_window_owner { + void *sys; + void (*resized)(vout_window_t *, unsigned width, unsigned height); + void (*closed)(vout_window_t *); + void (*mouse_event)(vout_window_t *, const vout_window_mouse_event_t *mouse); +} vout_window_owner_t; + +/** + * Graphical window + * + * This structure is an abstract interface to the windowing system. + * The window is normally used to draw video (and subpictures) into, but it + * can also be used for other purpose (e.g. OpenGL visualization). + * + * The window is responsible for providing a window handle, whose exact + * meaning depends on the windowing system. It also must report some events + * such as user input (keyboard, mouse) and window resize. + * + * Finally, it must support some control requests such as for fullscreen mode. + */ +struct vout_window_t { + VLC_COMMON_MEMBERS + + /** + * Window handle type + * + * This identified the windowing system and protocol that the window + * needs to use. This also selects which member of the \ref handle union + * and the \ref display union are to be set. + * + * The possible values are defined in \ref vout_window_type. + * + * VOUT_WINDOW_TYPE_INVALID is a special placeholder type. It means that + * any windowing system is acceptable. In that case, the plugin must set + * its actual type during activation. + */ + unsigned type; + + /** + * Window handle (mandatory) + * + * This must be filled by the plugin upon activation. + * + * Depending on the \ref type above, a different member of this union is + * used. + */ + union { + void *hwnd; /**< Win32 window handle */ + uint32_t xid; /**< X11 windows ID */ + void *nsobject; /**< Mac OSX view object */ + void *anativewindow; /**< Android native window */ + struct wl_surface *wl; /**< Wayland surface (client pointer) */ + } handle; + + /** Display server (mandatory) + * + * This must be filled by the plugin upon activation. + * + * The window handle is relative to the display server. The exact meaning + * of the display server depends on the window handle type. Not all window + * handle type provide a display server field. + */ + union { + char *x11; /**< X11 display string (NULL = use default) */ + struct wl_display *wl; /**< Wayland display (client pointer) */ + } display; + + /** + * Control callback (mandatory) + * + * This callback handles some control request regarding the window. + * See \ref vout_window_control. + * + * This field should not be used directly when manipulating a window. + * vout_window_Control() should be used instead. + */ + int (*control)(vout_window_t *, int query, va_list); + + struct { + bool has_double_click; /**< Whether double click events are sent, + or need to be emulated */ + } info; + + /* Private place holder for the vout_window_t module (optional) + * + * A module is free to use it as it wishes. + */ + vout_window_sys_t *sys; + + vout_window_owner_t owner; +}; + +/** + * Creates a new window. + * + * @param module plugin name (usually "$window") + * @note If you are inside a "vout display", you must use + / vout_display_NewWindow() and vout_display_DeleteWindow() instead. + * This enables recycling windows. + */ +VLC_API vout_window_t * vout_window_New(vlc_object_t *, const char *module, const vout_window_cfg_t *, const vout_window_owner_t *); + +/** + * Deletes a window created by vout_window_New(). + * + * @note See vout_window_New() about window recycling. + */ +VLC_API void vout_window_Delete(vout_window_t *); + +void vout_window_SetInhibition(vout_window_t *window, bool enabled); + +static inline int vout_window_vaControl(vout_window_t *window, int query, + va_list ap) +{ + return window->control(window, query, ap); +} + +/** + * Reconfigures a window. + * + * @note The vout_window_* wrappers should be used instead of this function. + * + * @warning The caller must own the window, as vout_window_t is not thread safe. + */ +static inline int vout_window_Control(vout_window_t *window, int query, ...) +{ + va_list ap; + int ret; + + va_start(ap, query); + ret = vout_window_vaControl(window, query, ap); + va_end(ap); + return ret; +} + +/** + * Configures the window manager state for this window. + */ +static inline int vout_window_SetState(vout_window_t *window, unsigned state) +{ + return vout_window_Control(window, VOUT_WINDOW_SET_STATE, state); +} + +/** + * Configures the window display (i.e. inner/useful) size. + */ +static inline int vout_window_SetSize(vout_window_t *window, + unsigned width, unsigned height) +{ + return vout_window_Control(window, VOUT_WINDOW_SET_SIZE, width, height); +} + +/** + * Sets fullscreen mode. + */ +static inline int vout_window_SetFullScreen(vout_window_t *window, bool full) +{ + return vout_window_Control(window, VOUT_WINDOW_SET_FULLSCREEN, full); +} + +/** + * Hide the mouse cursor + */ +static inline int vout_window_HideMouse(vout_window_t *window, bool hide) +{ + return vout_window_Control(window, VOUT_WINDOW_HIDE_MOUSE, hide); +} + +/** + * Report current window size + * + * This notifies the user of the window what the pixel dimensions of the + * window are (or should be, depending on the windowing system). + * + * \note This function is thread-safe. In case of concurrent call, it is + * undefined which one is taken into account (but at least one is). + */ +static inline void vout_window_ReportSize(vout_window_t *window, + unsigned width, unsigned height) +{ + if (window->owner.resized != NULL) + window->owner.resized(window, width, height); +} + +static inline void vout_window_ReportClose(vout_window_t *window) +{ + if (window->owner.closed != NULL) + window->owner.closed(window); +} + +static inline void vout_window_SendMouseEvent(vout_window_t *window, + const vout_window_mouse_event_t *mouse) +{ + if (window->owner.mouse_event != NULL) + window->owner.mouse_event(window, mouse); +} + +/** + * Send a full mouse state + * + * The mouse position must be expressed against window unit. You can use this + * function of others vout_window_ReportMouse*() functions. + */ +static inline void vout_window_ReportMouseState(vout_window_t *window, + int x, int y, int button_mask) +{ + const vout_window_mouse_event_t mouse = { + VOUT_WINDOW_MOUSE_STATE, x, y, button_mask + }; + vout_window_SendMouseEvent(window, &mouse); +} + +/** + * Send a mouse movement + * + * The mouse position must be expressed against window unit. + */ +static inline void vout_window_ReportMouseMoved(vout_window_t *window, + int x, int y) +{ + const vout_window_mouse_event_t mouse = { + VOUT_WINDOW_MOUSE_MOVED, x, y, 0 + }; + vout_window_SendMouseEvent(window, &mouse); +} + +/** + * Send a mouse pressed event + */ +static inline void vout_window_ReportMousePressed(vout_window_t *window, + int button) +{ + const vout_window_mouse_event_t mouse = { + VOUT_WINDOW_MOUSE_PRESSED, 0, 0, button, + }; + vout_window_SendMouseEvent(window, &mouse); +} + +/** + * Send a mouse released event + */ +static inline void vout_window_ReportMouseReleased(vout_window_t *window, + int button) +{ + const vout_window_mouse_event_t mouse = { + VOUT_WINDOW_MOUSE_RELEASED, 0, 0, button, + }; + vout_window_SendMouseEvent(window, &mouse); +} + +/** + * Send a mouse double click event + */ +static inline void vout_window_ReportMouseDoubleClick(vout_window_t *window, + int button) +{ + const vout_window_mouse_event_t mouse = { + VOUT_WINDOW_MOUSE_DOUBLE_CLICK, 0, 0, button, + }; + vout_window_SendMouseEvent(window, &mouse); +} + +/** @} */ +#endif /* VLC_VOUT_WINDOW_H */ diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_xlib.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_xlib.h new file mode 100644 index 0000000..b6818c1 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_xlib.h @@ -0,0 +1,57 @@ +/***************************************************************************** + * vlc_xlib.h: initialization of Xlib + ***************************************************************************** + * Copyright (C) 2010 Rémi Denis-Courmont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_XLIB_H +# define VLC_XLIB_H 1 + +# include +# include +# include +# include + +static inline bool vlc_xlib_init (vlc_object_t *obj) +{ + if (!var_InheritBool (obj, "xlib")) + return false; + + bool ok = false; + + /* XInitThreads() can be called multiple times, + * but it is not reentrant, so we need this global lock. */ + vlc_global_lock (VLC_XLIB_MUTEX); + + if (_Xglobal_lock == NULL && unlikely(_XErrorFunction != NULL)) + /* (_Xglobal_lock == NULL) => Xlib threads not initialized */ + /* (_XErrorFunction != NULL) => Xlib already in use */ + fprintf (stderr, "%s:%u:%s: Xlib not initialized for threads.\n" + "This process is probably using LibVLC incorrectly.\n" + "Pass \"--no-xlib\" to libvlc_new() to fix this.\n", + __FILE__, __LINE__, __func__); + else if (XInitThreads ()) + ok = true; + + vlc_global_unlock (VLC_XLIB_MUTEX); + + if (!ok) + msg_Err (obj, "Xlib not initialized for threads"); + return ok; +} + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_xml.h b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_xml.h new file mode 100644 index 0000000..661e76d --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/plugins/vlc_xml.h @@ -0,0 +1,121 @@ +/***************************************************************************** + * vlc_xml.h: XML abstraction layer + ***************************************************************************** + * Copyright (C) 2004-2010 VLC authors and VideoLAN + * + * Author: Gildas Bazin + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_XML_H +#define VLC_XML_H + +/** +* \file +* This file defines functions and structures to handle xml tags in vlc +* +*/ + +# ifdef __cplusplus +extern "C" { +# endif + +struct xml_t +{ + VLC_COMMON_MEMBERS + + /* Module properties */ + module_t *p_module; + xml_sys_t *p_sys; + + void (*pf_catalog_load) ( xml_t *, const char * ); + void (*pf_catalog_add) ( xml_t *, const char *, const char *, + const char * ); +}; + +VLC_API xml_t * xml_Create( vlc_object_t * ) VLC_USED; +#define xml_Create( a ) xml_Create( VLC_OBJECT(a) ) +VLC_API void xml_Delete( xml_t * ); + +static inline void xml_CatalogLoad( xml_t *xml, const char *catalog ) +{ + xml->pf_catalog_load( xml, catalog ); +} + +static inline void xml_CatalogAdd( xml_t *xml, const char *type, + const char *orig, const char *value ) +{ + xml->pf_catalog_add( xml, type, orig, value ); +} + + +struct xml_reader_t +{ + VLC_COMMON_MEMBERS + + xml_reader_sys_t *p_sys; + stream_t *p_stream; + module_t *p_module; + + int (*pf_next_node) ( xml_reader_t *, const char ** ); + const char *(*pf_next_attr) ( xml_reader_t *, const char ** ); + + int (*pf_use_dtd) ( xml_reader_t * ); + int (*pf_is_empty) ( xml_reader_t * ); +}; + +VLC_API xml_reader_t * xml_ReaderCreate(vlc_object_t *, stream_t *) VLC_USED; +#define xml_ReaderCreate( a, s ) xml_ReaderCreate(VLC_OBJECT(a), s) +VLC_API void xml_ReaderDelete(xml_reader_t *); +VLC_API xml_reader_t * xml_ReaderReset(xml_reader_t *, stream_t *) VLC_USED; + +static inline int xml_ReaderNextNode( xml_reader_t *reader, const char **pval ) +{ + return reader->pf_next_node( reader, pval ); +} + +static inline const char *xml_ReaderNextAttr( xml_reader_t *reader, + const char **pval ) +{ + return reader->pf_next_attr( reader, pval ); +} + +static inline int xml_ReaderUseDTD( xml_reader_t *reader ) +{ + return reader->pf_use_dtd( reader ); +} + +static inline int xml_ReaderIsEmptyElement( xml_reader_t *reader ) +{ + if(reader->pf_is_empty == NULL) + return -2; + + return reader->pf_is_empty( reader ); +} + +enum { + XML_READER_ERROR=-1, + XML_READER_NONE=0, + XML_READER_STARTELEM, + XML_READER_ENDELEM, + XML_READER_TEXT, +}; + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/support/3rd_party/vlc/sdk/include/vlc/vlc.h b/support/3rd_party/vlc/sdk/include/vlc/vlc.h new file mode 100644 index 0000000..6d25cd5 --- /dev/null +++ b/support/3rd_party/vlc/sdk/include/vlc/vlc.h @@ -0,0 +1,57 @@ +/***************************************************************************** + * vlc.h: global header for libvlc + ***************************************************************************** + * Copyright (C) 1998-2008 VLC authors and VideoLAN + * $Id$ + * + * Authors: Vincent Seguin + * Samuel Hocevar + * Gildas Bazin + * Derk-Jan Hartman + * Pierre d'Herbemont + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_VLC_H +#define VLC_VLC_H 1 + +/** + * \file + * This file defines libvlc new external API + */ + +# ifdef __cplusplus +extern "C" { +# endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +# ifdef __cplusplus +} +# endif + +#endif /* _VLC_VLC_H */ diff --git a/support/3rd_party/vlc/sdk/lib/libvlc.lib b/support/3rd_party/vlc/sdk/lib/libvlc.lib new file mode 100644 index 0000000..439d2da Binary files /dev/null and b/support/3rd_party/vlc/sdk/lib/libvlc.lib differ diff --git a/support/3rd_party/vlc/sdk/lib/libvlccore.lib b/support/3rd_party/vlc/sdk/lib/libvlccore.lib new file mode 100644 index 0000000..c30c1d9 Binary files /dev/null and b/support/3rd_party/vlc/sdk/lib/libvlccore.lib differ diff --git a/support/3rd_party/vlc/sdk/lib/pkgconfig/libvlc.pc b/support/3rd_party/vlc/sdk/lib/pkgconfig/libvlc.pc new file mode 100644 index 0000000..4bdc8c9 --- /dev/null +++ b/support/3rd_party/vlc/sdk/lib/pkgconfig/libvlc.pc @@ -0,0 +1,11 @@ +prefix=/builds/videolan/vlc/win64/_win32 +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: LibVLC control API +Description: VLC media player external control library +Version: 3.0.21 +Cflags: -I${includedir} +Libs: -L${libdir} -lvlc +Libs.private: -lvlccore diff --git a/support/3rd_party/vlc/sdk/lib/pkgconfig/vlc-plugin.pc b/support/3rd_party/vlc/sdk/lib/pkgconfig/vlc-plugin.pc new file mode 100644 index 0000000..f00f4b0 --- /dev/null +++ b/support/3rd_party/vlc/sdk/lib/pkgconfig/vlc-plugin.pc @@ -0,0 +1,24 @@ +prefix=/builds/videolan/vlc/win64/_win32 +exec_prefix=${prefix} +includedir=${prefix}/include +datarootdir=${prefix}/share +libdir=${exec_prefix}/lib +datadir=${datarootdir} +pkgincludedir=${prefix}/include/vlc +pkgdatadir=${datadir}/vlc +pkglibdir=${libdir}/vlc +pluginsdir=${pkglibdir}/plugins + +Name: VLC plugin API +Description: VLC media player plugin interface +Version: 3.0.21 +Cflags: -I${includedir} -I${pkgincludedir}/plugins \ + -D__PLUGIN__ \ + -D_FILE_OFFSET_BITS=64 \ + \ + -D_REENTRANT \ + -D_THREAD_SAFE +Libs: -L${libdir} -lvlccore +Libs.private: \ + -L/builds/videolan/vlc/contrib/x86_64-w64-mingw32/lib -lintl -L/builds/videolan/vlc/contrib/x86_64-w64-mingw32/lib -liconv -L/builds/videolan/vlc/contrib/x86_64-w64-mingw32/lib -liconv \ + -lws2_32 -liphlpapi -lm diff --git a/support/3rd_party/vlc/sdk/lib/vlc.lib b/support/3rd_party/vlc/sdk/lib/vlc.lib new file mode 100644 index 0000000..bc7fa00 --- /dev/null +++ b/support/3rd_party/vlc/sdk/lib/vlc.lib @@ -0,0 +1 @@ +INPUT(libvlc.lib) diff --git a/support/3rd_party/vlc/sdk/lib/vlccore.lib b/support/3rd_party/vlc/sdk/lib/vlccore.lib new file mode 100644 index 0000000..0762444 --- /dev/null +++ b/support/3rd_party/vlc/sdk/lib/vlccore.lib @@ -0,0 +1 @@ +INPUT(libvlccore.lib) diff --git a/support/3rd_party/vlc/skins/default.vlt b/support/3rd_party/vlc/skins/default.vlt new file mode 100644 index 0000000..64fdcd6 Binary files /dev/null and b/support/3rd_party/vlc/skins/default.vlt differ diff --git a/support/3rd_party/vlc/skins/fonts/FreeSans.ttf b/support/3rd_party/vlc/skins/fonts/FreeSans.ttf new file mode 100644 index 0000000..5d17b32 Binary files /dev/null and b/support/3rd_party/vlc/skins/fonts/FreeSans.ttf differ diff --git a/support/3rd_party/vlc/skins/fonts/FreeSansBold.ttf b/support/3rd_party/vlc/skins/fonts/FreeSansBold.ttf new file mode 100644 index 0000000..0cae657 Binary files /dev/null and b/support/3rd_party/vlc/skins/fonts/FreeSansBold.ttf differ diff --git a/support/3rd_party/vlc/skins/skin.catalog b/support/3rd_party/vlc/skins/skin.catalog new file mode 100644 index 0000000..514174a --- /dev/null +++ b/support/3rd_party/vlc/skins/skin.catalog @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/support/3rd_party/vlc/skins/skin.dtd b/support/3rd_party/vlc/skins/skin.dtd new file mode 100644 index 0000000..6517aaa --- /dev/null +++ b/support/3rd_party/vlc/skins/skin.dtd @@ -0,0 +1,340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/support/3rd_party/vlc/skins/winamp2.xml b/support/3rd_party/vlc/skins/winamp2.xml new file mode 100644 index 0000000..a13e7eb --- /dev/null +++ b/support/3rd_party/vlc/skins/winamp2.xml @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +