pax_global_header 0000666 0000000 0000000 00000000064 14420260131 0014503 g ustar 00root root 0000000 0000000 52 comment=fb4486d5ab5d0cd3b6a71659c7d5eb4509f2a4ce
HM-HM-18.0/ 0000775 0000000 0000000 00000000000 14420260131 0012241 5 ustar 00root root 0000000 0000000 HM-HM-18.0/.cproject 0000664 0000000 0000000 00000046671 14420260131 0014071 0 ustar 00root root 0000000 0000000
HM-HM-18.0/.gitattributes 0000664 0000000 0000000 00000000351 14420260131 0015133 0 ustar 00root root 0000000 0000000 # Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.cpp text
*.h text
HM-HM-18.0/.gitignore 0000664 0000000 0000000 00000000130 14420260131 0014223 0 ustar 00root root 0000000 0000000 dec.yuv
rec.yuv
str.bin
/build/
/bin/
/lib/
core
deploy
*.sdf
*.suo
*.pyc
.vs/
.vscode/
HM-HM-18.0/.gitlab-ci.yml 0000664 0000000 0000000 00000001234 14420260131 0014675 0 ustar 00root root 0000000 0000000 stages:
- build
.build_template:
stage: build
script:
- make realclean
- make all
only:
refs:
- master
- merge_requests
variables:
- $CI_PROJECT_URL == 'https://vcgit.hhi.fraunhofer.de/jvet/HM'
- $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'master'
build_macos:
extends: .build_template
tags:
- macos
build_ubuntu2204:
extends: .build_template
tags:
- ubuntu2204
build_ubuntu2004:
extends: .build_template
tags:
- ubuntu2004
build_vc191x:
extends: .build_template
tags:
- vc191x
build_vc192x:
extends: .build_template
tags:
- vc192x
HM-HM-18.0/.project 0000664 0000000 0000000 00000004610 14420260131 0013711 0 ustar 00root root 0000000 0000000
HMorg.eclipse.cdt.managedbuilder.core.genmakebuilderclean,full,incremental,?name?org.eclipse.cdt.make.core.append_environmenttrueorg.eclipse.cdt.make.core.autoBuildTargetallorg.eclipse.cdt.make.core.buildArgumentsorg.eclipse.cdt.make.core.buildCommandmakeorg.eclipse.cdt.make.core.buildLocation${workspace_loc:}/${ProjName}/build/linuxorg.eclipse.cdt.make.core.cleanBuildTargetcleanorg.eclipse.cdt.make.core.contentsorg.eclipse.cdt.make.core.activeConfigSettingsorg.eclipse.cdt.make.core.enableAutoBuildfalseorg.eclipse.cdt.make.core.enableCleanBuildtrueorg.eclipse.cdt.make.core.enableFullBuildtrueorg.eclipse.cdt.make.core.fullBuildTargetallorg.eclipse.cdt.make.core.stopOnErrortrueorg.eclipse.cdt.make.core.useDefaultBuildCmdtrueorg.eclipse.cdt.managedbuilder.core.ScannerConfigBuilderorg.eclipse.cdt.core.cnatureorg.eclipse.cdt.core.ccnatureorg.eclipse.cdt.managedbuilder.core.managedBuildNatureorg.eclipse.cdt.managedbuilder.core.ScannerConfigNature
HM-HM-18.0/.settings/ 0000775 0000000 0000000 00000000000 14420260131 0014157 5 ustar 00root root 0000000 0000000 HM-HM-18.0/.settings/org.eclipse.cdt.core.prefs 0000664 0000000 0000000 00000030701 14420260131 0021133 0 ustar 00root root 0000000 0000000 #Fri Nov 12 15:27:20 CET 2010
eclipse.preferences.version=1
org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
org.eclipse.cdt.core.formatter.alignment_for_compact_if=0
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=80
org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48
org.eclipse.cdt.core.formatter.alignment_for_expression_list=0
org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_block=next_line
org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line
org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line
org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line
org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line
org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line
org.eclipse.cdt.core.formatter.compact_else_if=false
org.eclipse.cdt.core.formatter.continuation_indentation=2
org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false
org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false
org.eclipse.cdt.core.formatter.indent_empty_lines=false
org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.cdt.core.formatter.indentation.size=2
org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=insert
org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=true
org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.cdt.core.formatter.lineSplit=100
org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.cdt.core.formatter.tabulation.char=space
org.eclipse.cdt.core.formatter.tabulation.size=2
org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false
HM-HM-18.0/.settings/org.eclipse.cdt.ui.prefs 0000664 0000000 0000000 00000000163 14420260131 0020617 0 ustar 00root root 0000000 0000000 #Fri Nov 12 14:22:53 CET 2010
eclipse.preferences.version=1
formatter_profile=_TM
formatter_settings_version=1
HM-HM-18.0/CMakeLists.txt 0000664 0000000 0000000 00000011373 14420260131 0015006 0 ustar 00root root 0000000 0000000 # minimum required cmake version
cmake_minimum_required( VERSION 3.5 FATAL_ERROR )
# project name
if( EXTENSION_360_VIDEO )
project( HM360 )
else()
project( HM )
endif()
# use ccache
find_program( CCACHE_FOUND ccache )
if( CCACHE_FOUND )
message( STATUS "ccache found. using it." )
set_property( GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache )
set_property( GLOBAL PROPERTY RULE_LAUNCH_LINK ccache )
endif()
# set default CMAKE_BUILD_TYPE to Release if not set
if( NOT CMAKE_BUILD_TYPE )
set( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE )
endif()
if( CMAKE_SYSTEM_NAME STREQUAL "Linux" )
if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
set( USE_ADDRESS_SANITIZER OFF CACHE BOOL "Compiles with -sanitize=address and links to libasan" )
endif()
endif()
set( EXTENSION_360_VIDEO OFF CACHE BOOL "If EXTENSION_360_VIDEO is on, 360Lib will be added" )
set( SET_ENABLE_TRACING OFF CACHE BOOL "Set ENABLE_TRACING as a compiler flag" )
set( ENABLE_TRACING OFF CACHE BOOL "If SET_ENABLE_TRACING is on, it will be set to this value" )
set( HIGH_BITDEPTH OFF CACHE BOOL "Build libraries and applications with high bit depth support" )
if( CMAKE_COMPILER_IS_GNUCC )
set( BUILD_STATIC OFF CACHE BOOL "Build static executables" )
endif()
# set c++11
set( CMAKE_CXX_STANDARD 11 )
set( CMAKE_CXX_STANDARD_REQUIRED ON )
# compile everything position independent (even static libraries)
set( CMAKE_POSITION_INDEPENDENT_CODE TRUE )
# set verbose compile options
#set( CMAKE_VERBOSE_MAKEFILE ON )
# use folders in IDEs for projects (e.g. lib sample app test)
set_property( GLOBAL PROPERTY USE_FOLDERS ON )
# Include a utility module providing functions, macros, and settings
include( ${CMAKE_SOURCE_DIR}/cmake/CMakeBuild/cmake/modules/BBuildEnv.cmake )
# Enable multithreading
bb_multithreading()
find_package(OpenMP)
if( OpenMP_FOUND )
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )
set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}" )
endif()
# Enable warnings for some generators and toolsets.
# bb_enable_warnings( gcc warnings-as-errors -Wno-sign-compare )
# bb_enable_warnings( gcc -Wno-unused-variable )
# bb_enable_warnings( gcc-4.8 warnings-as-errors -Wno-unused-variable )
# for gcc 8.2:
bb_enable_warnings( gcc warnings-as-errors -Wno-sign-compare -Wno-class-memaccess)
if( XCODE )
bb_enable_warnings( clang warnings-as-errors
-Wno-deprecated-declarations
-Wno-unknown-attributes
-Wno-deprecated-register
-Wno-pessimizing-move
-Wno-absolute-value
-Wno-unused-const-variable )
else()
bb_enable_warnings( clang warnings-as-errors
-Wno-unknown-attributes
-Wno-deprecated-register
-Wno-pessimizing-move
-Wno-absolute-value
-Wno-unused-const-variable )
endif()
#bb_enable_warnings( clang warnings-as-errors )
# enable warnings
bb_enable_warnings( msvc warnings-as-errors "/wd4996" )
# enable sse4.1 build for all source files for gcc and clang
if( UNIX OR MINGW )
add_compile_options( "-msse4.1" )
endif()
# enable parallel build for Visual Studio
if( MSVC )
add_compile_options( "/MP" )
add_compile_options( "/EHsc" )
endif()
# set address sanitizer compiler arguments
if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
if( CMAKE_SYSTEM_NAME STREQUAL "Linux" )
if( USE_ADDRESS_SANITIZER )
# add compile options
add_compile_options( "-fsanitize=address" )
add_link_options( "-fsanitize=address" )
endif()
endif()
if( CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0 )
add_compile_options( "-fabi-version=6" )
endif()
endif()
# add needed subdirectories
add_subdirectory( "source/Lib/TLibCommon" )
add_subdirectory( "source/Lib/TLibCommonAnalyser" )
if( EXTENSION_360_VIDEO )
add_subdirectory( "source/Lib/Lib360" )
add_subdirectory( "source/Lib/AppEncHelper360" )
endif()
add_subdirectory( "source/Lib/TLibDecoder" )
add_subdirectory( "source/Lib/TLibDecoderAnalyser" )
add_subdirectory( "source/Lib/TLibEncoder" )
add_subdirectory( "source/Lib/Utilities" )
add_subdirectory( "source/App/TAppDecoder" )
add_subdirectory( "source/App/TAppDecoderAnalyser" )
add_subdirectory( "source/App/TAppEncoder" )
add_subdirectory( "source/App/TAppMCTSExtractor" )
add_subdirectory( "source/App/Parcat" )
add_subdirectory( "source/App/SEIRemovalApp" )
add_subdirectory( "source/App/SEIFilmGrainApp" )
if( EXTENSION_360_VIDEO )
add_subdirectory( "source/App/utils/360ConvertApp" )
endif()
HM-HM-18.0/COPYING 0000664 0000000 0000000 00000003320 14420260131 0013272 0 ustar 00root root 0000000 0000000 The copyright in this software is being made available under the BSD
License, included below. This software may be subject to other third party
and contributor rights, including patent rights, and no such rights are
granted under this license.
Copyright (c) 2010-2022, ITU/ISO/IEC
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the ITU/ISO/IEC nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
HM-HM-18.0/Makefile 0000664 0000000 0000000 00000012660 14420260131 0013706 0 ustar 00root root 0000000 0000000 BUILD_SCRIPT := $(CURDIR)/cmake/CMakeBuild/bin/cmake.py
# Define here a list of generic targets to be built separately using a suffix to select the variant and link option.
# Examples: must be replaced by a make target defined below.
#
# How to build a single target:
# make -a => build variant=debug,release,relwithdebinfo
# make -r => build variant=release
# make -d => build variant=debug
# make -p => build variant=relwithdebinfo
#
# How to clean and build a single target:
# make -ca => clean + build variant=debug,release,relwithdebinfo
# make -cr => clean + build variant=release
# make -cd => clean + build variant=debug
# make -cp => clean + build variant=relwithdebinfo
#
TARGETS := TLibCommon TAppDecoder TAppDecoderAnalyser TLibDecoder
TARGETS += TAppEncoder TLibEncoder Utilities MCTSExtractor SEIFilmGrainApp
ifeq ($(OS),Windows_NT)
ifneq ($(MSYSTEM),)
# MSYS runtime environment
UNAME_S := $(shell uname -s)
PYTHON_LAUNCHER := python3
BUILD_CMD := $(PYTHON_LAUNCHER) $(BUILD_SCRIPT)
else
UNAME_S := Windows
PY := $(wildcard c:/windows/py.*)
ifeq ($(PY),)
PYTHON_LAUNCHER := python
else
PYTHON_LAUNCHER := $(notdir $(PY))
endif
# If a plain cmake.py is used, the exit codes won't arrive in make; i.e. build failures are reported as success by make.
BUILD_CMD := $(PYTHON_LAUNCHER) $(BUILD_SCRIPT)
ifeq ($(toolset),gcc)
g := mgwmake
endif
endif
else
UNAME_S := $(shell uname -s)
BUILD_CMD := $(BUILD_SCRIPT)
ifeq ($(UNAME_S),Linux)
# for Jenkins: run trace build only on Linux
LINUXBUILD := TRUE
endif
ifeq ($(UNAME_S),Darwin)
# MAC
endif
endif
ifeq ($(j),)
BUILD_JOBS += -j
else
BUILD_JOBS += -j$(j)
endif
ifneq ($(g),)
CONFIG_OPTIONS += -g $(g)
endif
ifneq ($(toolset),)
# aarch64 and mingw are two shortcuts to simplify toolset specification.
ifeq ($(toolset),mingw)
CONFIG_OPTIONS += toolset=x86_64-w64-mingw32-gcc-posix
else
CONFIG_OPTIONS += toolset=$(toolset)
endif
endif
ifneq ($(address-model),)
CONFIG_OPTIONS += address-model=$(address-model)
endif
ifneq ($(address-sanitizer),)
CMAKE_OPTIONS += -DUSE_ADDRESS_SANITIZER=ON
endif
ifneq ($(high-bitdepth),)
CMAKE_OPTIONS += -DHIGH_BITDEPTH=ON
endif
ifneq ($(verbose),)
CMAKE_OPTIONS += -DCMAKE_VERBOSE_MAKEFILE=ON
endif
ifneq ($(enable-tracing),)
CONFIG_OPTIONS += -DSET_ENABLE_TRACING=ON -DENABLE_TRACING=$(enable-tracing)
endif
ifneq ($(static),)
CONFIG_OPTIONS += -DBUILD_STATIC=$(static)
endif
BUILD_OPTIONS := $(CONFIG_OPTIONS) -b
debug:
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=debug
all:
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=debug,release,relwithdebinfo
release:
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=release
relwithdebinfo:
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=relwithdebinfo
clean:
# clean is equal to realclean to ensure that CMake options are reset
$(RM) -rf bin build lib
# $(BUILD_CMD) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=debug,release,relwithdebinfo --target clean
clean-r:
$(BUILD_CMD) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=release --target clean
clean-d:
$(BUILD_CMD) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=debug --target clean
clean-p:
$(BUILD_CMD) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=relwithdebinfo --target clean
configure:
$(BUILD_CMD) $(CONFIG_OPTIONS) $(CMAKE_OPTIONS) variant=debug,release,relwithdebinfo
linuxbuild:
ifeq ($(LINUXBUILD),TRUE)
# option for automated jenkins build
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=debug
endif
#
# project specific targets
#
# build the list of release, debug targets given the generic targets
TARGETS_ALL := $(foreach t,$(TARGETS),$(t)-a)
TARGETS_RELEASE := $(foreach t,$(TARGETS),$(t)-r)
TARGETS_DEBUG := $(foreach t,$(TARGETS),$(t)-d)
TARGETS_RELWITHDEBINFO := $(foreach t,$(TARGETS),$(t)-p)
TARGETS_ALL_CLEAN_FIRST := $(foreach t,$(TARGETS),$(t)-ca)
TARGETS_RELEASE_CLEAN_FIRST := $(foreach t,$(TARGETS),$(t)-cr)
TARGETS_DEBUG_CLEAN_FIRST := $(foreach t,$(TARGETS),$(t)-cd)
TARGETS_RELWITHDEBINFO_CLEAN_FIRST := $(foreach t,$(TARGETS),$(t)-cp)
$(TARGETS_ALL):
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=debug,release,relwithdebinfo --target $(patsubst %-a,%,$@)
$(TARGETS_ALL_CLEAN_FIRST):
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=debug,release,relwithdebinfo --clean-first --target $(patsubst %-ca,%,$@)
$(TARGETS_RELEASE):
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=release --target $(patsubst %-r,%,$@)
$(TARGETS_RELEASE_CLEAN_FIRST):
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=release --clean-first --target $(patsubst %-cr,%,$@)
$(TARGETS_DEBUG):
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=debug --target $(patsubst %-d,%,$@)
$(TARGETS_DEBUG_CLEAN_FIRST):
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=debug --target $(patsubst %-cd,%,$@) --clean-first
$(TARGETS_RELWITHDEBINFO):
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=relwithdebinfo --target $(patsubst %-p,%,$@)
$(TARGETS_RELWITHDEBINFO_CLEAN_FIRST):
$(BUILD_CMD) $(BUILD_JOBS) $(BUILD_OPTIONS) $(CMAKE_OPTIONS) variant=relwithdebinfo --target $(patsubst %-cp,%,$@) --clean-first
realclean:
$(RM) -rf bin build lib
.NOTPARALLEL:
HM-HM-18.0/README.md 0000664 0000000 0000000 00000011637 14420260131 0013530 0 ustar 00root root 0000000 0000000 HM reference software for HEVC
==============================
This software package is the reference software for Rec. ITU-T H.265 | ISO/IEC 23008-2 High Efficiency Video Coding (HEVC). The reference software includes both encoder and decoder functionality.
Reference software is useful in aiding users of a video coding standard to establish and test conformance and interoperability, and to educate users and demonstrate the capabilities of the standard. For these purposes, this software is provided as an aid for the study and implementation of Rec. ITU-T H.265 | ISO/IEC 23008-2 High Efficiency Video Coding.
The software has been jointly developed by the ITU-T Video Coding Experts Group (VCEG, Question 6 of ITU-T Study Group 16) and the ISO/IEC Moving Picture Experts Group (MPEG, Working Group 11 of Subcommittee 29 of ISO/IEC Joint Technical Committee 1).
The software is maintained by the Joint Video Experts Team (JVET) which is a joint collaboration of ITU-T Video Coding Experts Group (VCEG, Question 6 of ITU-T Study Group 16) and the ISO/IEC Moving Picture Experts Group (MPEG, Working Group 5 of Subcommittee 29 of ISO/IEC Joint Technical Committee 1).
A software manual, which contains usage instructions, can be found in the "doc" subdirectory of this software package.
Build instructions
==================
The CMake tool is used to create platform-specific build files.
Although CMake may be able to generate 32-bit binaries, **it is generally suggested to build 64-bit binaries**. 32-bit binaries are not able to access more than 2GB of RAM, which will not be sufficient for coding larger image formats. Building in 32-bit environments is not tested and will not be supported.
Build instructions for plain CMake (suggested)
----------------------------------------------
**Note:** A working CMake installation is required for building the software.
CMake generates configuration files for the compiler environment/development environment on each platform.
The following is a list of examples for Windows (MS Visual Studio), macOS (Xcode) and Linux (make).
Open a command prompt on your system and change into the root directory of this project.
Create a build directory in the root directory:
```bash
mkdir build
```
Use one of the following CMake commands, based on your platform. Feel free to change the commands to satisfy
your needs.
**Windows Visual Studio 2015/17/19 64 Bit:**
Use the proper generator string for generating Visual Studio files, e.g. for VS 2015:
```bash
cd build
cmake .. -G "Visual Studio 14 2015 Win64"
```
Then open the generated solution file in MS Visual Studio.
For VS 2017 use "Visual Studio 15 2017 Win64", for VS 2019 use "Visual Studio 16 2019".
Visual Studio 2019 also allows you to open the CMake directory directly. Choose "File->Open->CMake" for this option.
**macOS Xcode:**
For generating an Xcode workspace type:
```bash
cd build
cmake .. -G "Xcode"
```
Then open the generated work space in Xcode.
For generating Makefiles with optional non-default compilers, use the following commands:
```bash
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc-9 -DCMAKE_CXX_COMPILER=g++-9
```
In this example the brew installed GCC 9 is used for a release build.
**Linux**
For generating Linux Release Makefile:
```bash
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
```
For generating Linux Debug Makefile:
```bash
cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug
```
Then type
```bash
make -j
```
For more details, refer to the CMake documentation: https://cmake.org/cmake/help/latest/
Build instructions for make
---------------------------
**Note:** The build instructions in this section require the make tool and Python to be installed, which are
part of usual Linux and macOS environments. See below for installation instruction for Python and GnuWin32
on Windows.
Open a command prompt on your system and change into the root directory of this project.
To use the default system compiler simply call:
```bash
make all
```
**MSYS2 and MinGW (Windows)**
**Note:** Build files for MSYS MinGW were added on request. The build platform is not regularily tested and can't be supported.
Open an MSYS MinGW 64-Bit terminal and change into the root directory of this project.
Call:
```bash
make all toolset=gcc
```
The following tools need to be installed for MSYS2 and MinGW:
Download CMake: http://www.cmake.org/ and install it.
Python and GnuWin32 are not mandatory, but they simplify the build process for the user.
python: https://www.python.org/downloads/release/python-371/
gnuwin32: https://sourceforge.net/projects/getgnuwin32/files/getgnuwin32/0.6.30/GetGnuWin32-0.6.3.exe/download
To use MinGW, install MSYS2: http://repo.msys2.org/distrib/msys2-x86_64-latest.exe
Installation instructions: https://www.msys2.org/
Install the needed toolchains:
```bash
pacman -S --needed base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain git subversion mingw-w64-i686-cmake mingw-w64-x86_64-cmake
```
HM-HM-18.0/cfg/ 0000775 0000000 0000000 00000000000 14420260131 0013000 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cfg/encoder_intra_high_throughput_rext.cfg 0000664 0000000 0000000 00000021676 14420260131 0022643 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile definition ==============
Profile : high-throughput-RExt # Profile name to use for encoding. Use main (for FDIS main), main10 (for FDIS main10), main-still-picture, main-RExt, high-throughput-RExt, main-SCC
Tier : main # Tier to use for interpretation of --Level (main or high only)"
IntraConstraintFlag : 1 # Intra constraint flag - must be 1 in high-throughput-RExt profile
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 1 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#=========== RExt ============
ExtendedPrecision : 0 # Increased internal accuracies to support high bit depths (not valid in V1 profiles)
TransformSkipLog2MaxSize : 2 # Specify transform-skip maximum size. Minimum 2. (not valid in V1 profiles)
ImplicitResidualDPCM : 1 # Enable implicitly signalled residual DPCM for intra (also known as sample-adaptive intra predict) (not valid in V1 profiles)
ExplicitResidualDPCM : 1 # Enable explicitly signalled residual DPCM for inter (not valid in V1 profiles)
ResidualRotation : 1 # Enable rotation of transform-skipped and transquant-bypassed TUs through 180 degrees prior to entropy coding (not valid in V1 profiles)
SingleSignificanceMapContext : 1 # Enable, for transform-skipped and transquant-bypassed TUs, the selection of a single significance map context variable for all coefficients (not valid in V1 profiles)
IntraReferenceSmoothing : 1 # 0: Disable use of intra reference smoothing (not valid in V1 profiles). 1: Enable use of intra reference smoothing (same as V1)
GolombRiceParameterAdaptation : 1 # Enable the partial retention of the Golomb-Rice parameter value from one coefficient group to the next
HighPrecisionPredictionWeighting : 1 # Use high precision option for weighted prediction (not valid in V1 profiles)
CrossComponentPrediction : 1 # Enable the use of cross-component prediction (not valid in V1 profiles)
AlignCABACBeforeBypass : 1 # Align the CABAC engine to a defined fraction of a bit prior to coding bypass data.
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_intra_main.cfg 0000664 0000000 0000000 00000015462 14420260131 0017311 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 1 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_intra_main10.cfg 0000664 0000000 0000000 00000015464 14420260131 0017454 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main10
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 1 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_intra_main10_ctc_subsample.cfg 0000664 0000000 0000000 00000015635 14420260131 0022360 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main10
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 1 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
TemporalSubsampleRatio : 8 # only encode every eighth frame (for CTC runtime reduction)
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_intra_main_ctc_subsample.cfg 0000664 0000000 0000000 00000015633 14420260131 0022215 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 1 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
TemporalSubsampleRatio : 8 # only encode every eighth frame (for CTC runtime reduction)
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_intra_main_rext.cfg 0000664 0000000 0000000 00000021266 14420260131 0020352 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile definition ==============
Profile : main-RExt # Profile name to use for encoding. Use main (for FDIS main), main10 (for FDIS main10), main-still-picture, main-RExt, high-throughput-RExt, main-SCC
Tier : main # Tier to use for interpretation of --Level (main or high only)"
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 1 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#=========== RExt ============
ExtendedPrecision : 0 # Increased internal accuracies to support high bit depths (not valid in V1 profiles)
TransformSkipLog2MaxSize : 2 # Specify transform-skip maximum size. Minimum 2. (not valid in V1 profiles)
ImplicitResidualDPCM : 1 # Enable implicitly signalled residual DPCM for intra (also known as sample-adaptive intra predict) (not valid in V1 profiles)
ExplicitResidualDPCM : 1 # Enable explicitly signalled residual DPCM for inter (not valid in V1 profiles)
ResidualRotation : 1 # Enable rotation of transform-skipped and transquant-bypassed TUs through 180 degrees prior to entropy coding (not valid in V1 profiles)
SingleSignificanceMapContext : 1 # Enable, for transform-skipped and transquant-bypassed TUs, the selection of a single significance map context variable for all coefficients (not valid in V1 profiles)
IntraReferenceSmoothing : 1 # 0: Disable use of intra reference smoothing (not valid in V1 profiles). 1: Enable use of intra reference smoothing (same as V1)
GolombRiceParameterAdaptation : 1 # Enable the partial retention of the Golomb-Rice parameter value from one coefficient group to the next
HighPrecisionPredictionWeighting : 1 # Use high precision option for weighted prediction (not valid in V1 profiles)
CrossComponentPrediction : 1 # Enable the use of cross-component prediction (not valid in V1 profiles)
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_intra_main_rext_subsample.cfg 0000664 0000000 0000000 00000021437 14420260131 0022425 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile definition ==============
Profile : main-RExt # Profile name to use for encoding. Use main (for FDIS main), main10 (for FDIS main10), main-still-picture, main-RExt, high-throughput-RExt, main-SCC
Tier : main # Tier to use for interpretation of --Level (main or high only)"
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 1 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
TemporalSubsampleRatio : 8 # only encode every eighth frame (for CTC runtime reduction)
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#=========== RExt ============
ExtendedPrecision : 0 # Increased internal accuracies to support high bit depths (not valid in V1 profiles)
TransformSkipLog2MaxSize : 2 # Specify transform-skip maximum size. Minimum 2. (not valid in V1 profiles)
ImplicitResidualDPCM : 1 # Enable implicitly signalled residual DPCM for intra (also known as sample-adaptive intra predict) (not valid in V1 profiles)
ExplicitResidualDPCM : 1 # Enable explicitly signalled residual DPCM for inter (not valid in V1 profiles)
ResidualRotation : 1 # Enable rotation of transform-skipped and transquant-bypassed TUs through 180 degrees prior to entropy coding (not valid in V1 profiles)
SingleSignificanceMapContext : 1 # Enable, for transform-skipped and transquant-bypassed TUs, the selection of a single significance map context variable for all coefficients (not valid in V1 profiles)
IntraReferenceSmoothing : 1 # 0: Disable use of intra reference smoothing (not valid in V1 profiles). 1: Enable use of intra reference smoothing (same as V1)
GolombRiceParameterAdaptation : 1 # Enable the partial retention of the Golomb-Rice parameter value from one coefficient group to the next
HighPrecisionPredictionWeighting : 1 # Use high precision option for weighted prediction (not valid in V1 profiles)
CrossComponentPrediction : 1 # Enable the use of cross-component prediction (not valid in V1 profiles)
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_lowdelay_P_main.cfg 0000664 0000000 0000000 00000025371 14420260131 0020273 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : -1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 0 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 8 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -1
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: P 1 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -9 -17 -25 0
Frame2: P 2 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -2 -10 -18 1 -1 5 1 1 1 0 1
Frame3: P 3 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -3 -11 -19 1 -1 5 0 1 1 1 1
Frame4: P 4 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -4 -12 -20 1 -1 5 0 1 1 1 1
Frame5: P 5 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -5 -13 -21 1 -1 5 0 1 1 1 1
Frame6: P 6 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -6 -14 -22 1 -1 5 0 1 1 1 1
Frame7: P 7 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -7 -15 -23 1 -1 5 0 1 1 1 1
Frame8: P 8 1 0.0 0.0 0 0 1.0 0 0 0 4 4 -1 -8 -16 -24 1 -1 5 0 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 1 # Enable/disable GOP Based Temporal Filter
TemporalFilterPastRefs : 4 # Number of past references for temporal prefilter
TemporalFilterFutureRefs : 0 # Number of future references for temporal prefilter
TemporalFilterStrengthFrame8 : 0.10 # Enable filter at every 8th frame with strength
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_lowdelay_P_main10.cfg 0000664 0000000 0000000 00000025373 14420260131 0020436 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main10
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : -1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 0 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 8 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -1
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: P 1 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -9 -17 -25 0
Frame2: P 2 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -2 -10 -18 1 -1 5 1 1 1 0 1
Frame3: P 3 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -3 -11 -19 1 -1 5 0 1 1 1 1
Frame4: P 4 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -4 -12 -20 1 -1 5 0 1 1 1 1
Frame5: P 5 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -5 -13 -21 1 -1 5 0 1 1 1 1
Frame6: P 6 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -6 -14 -22 1 -1 5 0 1 1 1 1
Frame7: P 7 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -7 -15 -23 1 -1 5 0 1 1 1 1
Frame8: P 8 1 0.0 0.0 0 0 1.0 0 0 0 4 4 -1 -8 -16 -24 1 -1 5 0 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 1 # Enable/disable GOP Based Temporal Filter
TemporalFilterPastRefs : 4 # Number of past references for temporal prefilter
TemporalFilterFutureRefs : 0 # Number of future references for temporal prefilter
TemporalFilterStrengthFrame8 : 0.10 # Enable filter at every 8th frame with strength
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_lowdelay_main.cfg 0000664 0000000 0000000 00000025372 14420260131 0020015 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : -1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 0 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 8 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -1
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 1 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -9 -17 -25 0
Frame2: B 2 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -2 -10 -18 1 -1 5 1 1 1 0 1
Frame3: B 3 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -3 -11 -19 1 -1 5 0 1 1 1 1
Frame4: B 4 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -4 -12 -20 1 -1 5 0 1 1 1 1
Frame5: B 5 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -5 -13 -21 1 -1 5 0 1 1 1 1
Frame6: B 6 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -6 -14 -22 1 -1 5 0 1 1 1 1
Frame7: B 7 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -7 -15 -23 1 -1 5 0 1 1 1 1
Frame8: B 8 1 0.0 0.0 0 0 1.0 0 0 0 4 4 -1 -8 -16 -24 1 -1 5 0 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 1 # Enable/disable GOP Based Temporal Filter
TemporalFilterPastRefs : 4 # Number of past references for temporal prefilter
TemporalFilterFutureRefs : 0 # Number of future references for temporal prefilter
TemporalFilterStrengthFrame8 : 0.10 # Enable filter at every 8th frame with strength
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_lowdelay_main10.cfg 0000664 0000000 0000000 00000025376 14420260131 0020162 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main10
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : -1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 0 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 8 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -1
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 1 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -9 -17 -25 0
Frame2: B 2 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -2 -10 -18 1 -1 5 1 1 1 0 1
Frame3: B 3 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -3 -11 -19 1 -1 5 0 1 1 1 1
Frame4: B 4 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -4 -12 -20 1 -1 5 0 1 1 1 1
Frame5: B 5 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -5 -13 -21 1 -1 5 0 1 1 1 1
Frame6: B 6 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -6 -14 -22 1 -1 5 0 1 1 1 1
Frame7: B 7 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -7 -15 -23 1 -1 5 0 1 1 1 1
Frame8: B 8 1 0.0 0.0 0 0 1.0 0 0 0 4 4 -1 -8 -16 -24 1 -1 5 0 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 1 # Enable/disable GOP Based Temporal Filter
TemporalFilterPastRefs : 4 # Number of past references for temporal prefilter
TemporalFilterFutureRefs : 0 # Number of future references for temporal prefilter
TemporalFilterStrengthFrame8 : 0.10 # Enable filter at every 8th frame with strength
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_lowdelay_main_rext.cfg 0000664 0000000 0000000 00000031176 14420260131 0021056 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile definition ==============
Profile : main-RExt # Profile name to use for encoding. Use main (for FDIS main), main10 (for FDIS main10), main-still-picture, main-RExt, high-throughput-RExt, main-SCC
Tier : main # Tier to use for interpretation of --Level (main or high only)"
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : -1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 0 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 8 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -1
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 1 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -9 -17 -25 0
Frame2: B 2 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -2 -10 -18 1 -1 5 1 1 1 0 1
Frame3: B 3 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -3 -11 -19 1 -1 5 0 1 1 1 1
Frame4: B 4 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -4 -12 -20 1 -1 5 0 1 1 1 1
Frame5: B 5 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -5 -13 -21 1 -1 5 0 1 1 1 1
Frame6: B 6 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -6 -14 -22 1 -1 5 0 1 1 1 1
Frame7: B 7 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -7 -15 -23 1 -1 5 0 1 1 1 1
Frame8: B 8 1 0.0 0.0 0 0 1.0 0 0 0 4 4 -1 -8 -16 -24 1 -1 5 0 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 1 # Enable/disable GOP Based Temporal Filter
TemporalFilterPastRefs : 4 # Number of past references for temporal prefilter
TemporalFilterFutureRefs : 0 # Number of future references for temporal prefilter
TemporalFilterStrengthFrame8 : 0.10 # Enable filter at every 8th frame with strength
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
#=========== RExt ============
ExtendedPrecision : 0 # Increased internal accuracies to support high bit depths (not valid in V1 profiles)
TransformSkipLog2MaxSize : 2 # Specify transform-skip maximum size. Minimum 2. (not valid in V1 profiles)
ImplicitResidualDPCM : 1 # Enable implicitly signalled residual DPCM for intra (also known as sample-adaptive intra predict) (not valid in V1 profiles)
ExplicitResidualDPCM : 1 # Enable explicitly signalled residual DPCM for inter (not valid in V1 profiles)
ResidualRotation : 1 # Enable rotation of transform-skipped and transquant-bypassed TUs through 180 degrees prior to entropy coding (not valid in V1 profiles)
SingleSignificanceMapContext : 1 # Enable, for transform-skipped and transquant-bypassed TUs, the selection of a single significance map context variable for all coefficients (not valid in V1 profiles)
IntraReferenceSmoothing : 1 # 0: Disable use of intra reference smoothing (not valid in V1 profiles). 1: Enable use of intra reference smoothing (same as V1)
GolombRiceParameterAdaptation : 1 # Enable the partial retention of the Golomb-Rice parameter value from one coefficient group to the next
HighPrecisionPredictionWeighting : 1 # Use high precision option for weighted prediction (not valid in V1 profiles)
CrossComponentPrediction : 1 # Enable the use of cross-component prediction (not valid in V1 profiles)
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_randomaccess_main.cfg 0000664 0000000 0000000 00000031371 14420260131 0020633 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 16 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -3
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 16 1 0.0 0.0 0 0 1.0 0 0 0 2 2 -16 -32 0
Frame2: B 8 1 -4.8848 0.2061 0 0 1.0 0 0 1 2 3 -8 -24 8 1 8 3 1 1 1
Frame3: B 4 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 4 -4 -20 4 12 1 4 4 1 1 1 1
Frame4: B 2 5 -5.90 0.2333 0 0 1.0 0 0 3 2 5 -2 -18 2 6 14 1 2 5 1 1 1 1 1
Frame5: B 1 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 1 3 7 15 1 1 6 1 0 1 1 1 1
Frame6: B 3 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 1 5 13 1 -2 6 1 1 1 1 1 0
Frame7: B 6 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -6 2 10 1 -3 6 0 1 1 1 1 0
Frame8: B 5 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -5 1 3 11 1 1 5 1 1 1 1 1
Frame9: B 7 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -7 1 9 1 -2 6 0 1 1 1 1 0
Frame10: B 12 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 3 -4 -12 4 1 -5 5 0 1 1 1 0
Frame11: B 10 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -10 2 6 1 2 4 1 1 1 1
Frame12: B 9 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -9 1 3 7 1 1 5 1 1 1 1 1
Frame13: B 11 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -11 1 5 1 -2 6 0 1 1 1 1 0
Frame14: B 14 5 -5.90 0.2333 0 0 1.0 0 0 3 2 3 -2 -14 2 1 -3 5 0 1 1 1 0
Frame15: B 13 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -13 1 3 1 1 4 1 1 1 1
Frame16: B 15 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -3 -15 1 1 -2 5 1 1 1 1 0
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 384 # (0: Search range is a Full frame)
ASR : 1 # Adaptive motion search range
MinSearchWindow : 96 # Minimum motion search window size for the adaptive window ME
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 1 # Enable/disable GOP Based Temporal Filter
TemporalFilterPastRefs : 4 # Number of past references for temporal prefilter
TemporalFilterFutureRefs : 4 # Number of future references for temporal prefilter
TemporalFilterStrengthFrame8 : 0.95 # Enable filter at every 8th frame with given strength
TemporalFilterStrengthFrame16 : 1.5 # Enable filter at every 16th frame with given strength, longer intervals has higher priority
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnableFlag : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_randomaccess_main10.cfg 0000664 0000000 0000000 00000031373 14420260131 0020776 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main10
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 16 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -3
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 16 1 0.0 0.0 0 0 1.0 0 0 0 2 2 -16 -32 0
Frame2: B 8 1 -4.8848 0.2061 0 0 1.0 0 0 1 2 3 -8 -24 8 1 8 3 1 1 1
Frame3: B 4 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 4 -4 -20 4 12 1 4 4 1 1 1 1
Frame4: B 2 5 -5.90 0.2333 0 0 1.0 0 0 3 2 5 -2 -18 2 6 14 1 2 5 1 1 1 1 1
Frame5: B 1 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 1 3 7 15 1 1 6 1 0 1 1 1 1
Frame6: B 3 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 1 5 13 1 -2 6 1 1 1 1 1 0
Frame7: B 6 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -6 2 10 1 -3 6 0 1 1 1 1 0
Frame8: B 5 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -5 1 3 11 1 1 5 1 1 1 1 1
Frame9: B 7 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -7 1 9 1 -2 6 0 1 1 1 1 0
Frame10: B 12 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 3 -4 -12 4 1 -5 5 0 1 1 1 0
Frame11: B 10 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -10 2 6 1 2 4 1 1 1 1
Frame12: B 9 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -9 1 3 7 1 1 5 1 1 1 1 1
Frame13: B 11 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -11 1 5 1 -2 6 0 1 1 1 1 0
Frame14: B 14 5 -5.90 0.2333 0 0 1.0 0 0 3 2 3 -2 -14 2 1 -3 5 0 1 1 1 0
Frame15: B 13 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -13 1 3 1 1 4 1 1 1 1
Frame16: B 15 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -3 -15 1 1 -2 5 1 1 1 1 0
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 384 # (0: Search range is a Full frame)
ASR : 1 # Adaptive motion search range
MinSearchWindow : 96 # Minimum motion search window size for the adaptive window ME
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 1 # Enable/disable GOP Based Temporal Filter
TemporalFilterPastRefs : 4 # Number of past references for temporal prefilter
TemporalFilterFutureRefs : 4 # Number of future references for temporal prefilter
TemporalFilterStrengthFrame8 : 0.95 # Enable filter at every 8th frame with given strength
TemporalFilterStrengthFrame16 : 1.5 # Enable filter at every 16th frame with given strength, longer intervals has higher priority
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnableFlag : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/encoder_randomaccess_main_rext.cfg 0000664 0000000 0000000 00000035263 14420260131 0021701 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile definition ==============
Profile : main-RExt # Profile name to use for encoding. Use main (for FDIS main), main10 (for FDIS main10), main-still-picture, main-RExt, high-throughput-RExt, main-SCC
Tier : main # Tier to use for interpretation of --Level (main or high only)"
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 16 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -3
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 16 1 0.0 0.0 0 0 1.0 0 0 0 2 2 -16 -32 0
Frame2: B 8 1 -4.8848 0.2061 0 0 1.0 0 0 1 2 3 -8 -24 8 1 8 3 1 1 1
Frame3: B 4 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 4 -4 -20 4 12 1 4 4 1 1 1 1
Frame4: B 2 5 -5.90 0.2333 0 0 1.0 0 0 3 2 5 -2 -18 2 6 14 1 2 5 1 1 1 1 1
Frame5: B 1 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 1 3 7 15 1 1 6 1 0 1 1 1 1
Frame6: B 3 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 1 5 13 1 -2 6 1 1 1 1 1 0
Frame7: B 6 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -6 2 10 1 -3 6 0 1 1 1 1 0
Frame8: B 5 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -5 1 3 11 1 1 5 1 1 1 1 1
Frame9: B 7 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -7 1 9 1 -2 6 0 1 1 1 1 0
Frame10: B 12 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 3 -4 -12 4 1 -5 5 0 1 1 1 0
Frame11: B 10 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -10 2 6 1 2 4 1 1 1 1
Frame12: B 9 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -9 1 3 7 1 1 5 1 1 1 1 1
Frame13: B 11 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -11 1 5 1 -2 6 0 1 1 1 1 0
Frame14: B 14 5 -5.90 0.2333 0 0 1.0 0 0 3 2 3 -2 -14 2 1 -3 5 0 1 1 1 0
Frame15: B 13 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -13 1 3 1 1 4 1 1 1 1
Frame16: B 15 6 -7.1444 0.3 0 0 1.0 0 0 4 2 4 -1 -3 -15 1 1 -2 5 1 1 1 1 0
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 384 # (0: Search range is a Full frame)
ASR : 1 # Adaptive motion search range
MinSearchWindow : 96 # Minimum motion search window size for the adaptive window ME
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 1 # Enable/disable GOP Based Temporal Filter
TemporalFilterPastRefs : 4 # Number of past references for temporal prefilter
TemporalFilterFutureRefs : 4 # Number of future references for temporal prefilter
TemporalFilterStrengthFrame8 : 0.95 # Enable filter at every 8th frame with given strength
TemporalFilterStrengthFrame16 : 1.5 # Enable filter at every 16th frame with given strength, longer intervals has higher priority
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
#=========== RExt ============
ExtendedPrecision : 0 # Increased internal accuracies to support high bit depths (not valid in V1 profiles)
TransformSkipLog2MaxSize : 2 # Specify transform-skip maximum size. Minimum 2. (not valid in V1 profiles)
ImplicitResidualDPCM : 1 # Enable implicitly signalled residual DPCM for intra (also known as sample-adaptive intra predict) (not valid in V1 profiles)
ExplicitResidualDPCM : 1 # Enable explicitly signalled residual DPCM for inter (not valid in V1 profiles)
ResidualRotation : 1 # Enable rotation of transform-skipped and transquant-bypassed TUs through 180 degrees prior to entropy coding (not valid in V1 profiles)
SingleSignificanceMapContext : 1 # Enable, for transform-skipped and transquant-bypassed TUs, the selection of a single significance map context variable for all coefficients (not valid in V1 profiles)
IntraReferenceSmoothing : 1 # 0: Disable use of intra reference smoothing (not valid in V1 profiles). 1: Enable use of intra reference smoothing (same as V1)
GolombRiceParameterAdaptation : 1 # Enable the partial retention of the Golomb-Rice parameter value from one coefficient group to the next
HighPrecisionPredictionWeighting : 1 # Use high precision option for weighted prediction (not valid in V1 profiles)
CrossComponentPrediction : 1 # Enable the use of cross-component prediction (not valid in V1 profiles)
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/hbd/ 0000775 0000000 0000000 00000000000 14420260131 0013535 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cfg/hbd/12-bit.cfg 0000664 0000000 0000000 00000000025 14420260131 0015211 0 ustar 00root root 0000000 0000000 InternalBitDepth: 12 HM-HM-18.0/cfg/hbd/16-bit.cfg 0000664 0000000 0000000 00000000025 14420260131 0015215 0 ustar 00root root 0000000 0000000 InternalBitDepth: 16 HM-HM-18.0/cfg/hbd/hbd.cfg 0000664 0000000 0000000 00000000050 14420260131 0014746 0 ustar 00root root 0000000 0000000 TemporalFilter: 0
ExtendedPrecision: 1 HM-HM-18.0/cfg/lossless/ 0000775 0000000 0000000 00000000000 14420260131 0014647 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cfg/lossless/lossless.cfg 0000664 0000000 0000000 00000000253 14420260131 0017177 0 ustar 00root root 0000000 0000000 CostMode : lossless
ExtendedPrecision : 1
TransquantBypassEnableFlag : 1
CUTransquantBypassFlagForce : 1
IntraReferenceSmoothing : 0 HM-HM-18.0/cfg/misc/ 0000775 0000000 0000000 00000000000 14420260131 0013733 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cfg/misc/encoder_lowdelay_P_main10_GOP4.cfg 0000664 0000000 0000000 00000023421 14420260131 0022152 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main10
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : -1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 0 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 4 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -1
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: P 1 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -5 -9 -13 0
Frame2: P 2 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -2 -6 -10 1 -1 5 1 1 1 0 1
Frame3: P 3 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -3 -7 -11 1 -1 5 0 1 1 1 1
Frame4: P 4 1 0.0 0.0 0 0 1.0 0 0 0 4 4 -1 -4 -8 -12 1 -1 5 0 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 0 # Enable/disable GOP Based Temporal Filter
TemporalFilterFutureReference : 0 # Enable/disable reading future frames
TemporalFilterStrengthFrame4 : 0.40 # Enable filter at every 4th frame with strength
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_lowdelay_P_main_GOP4.cfg 0000664 0000000 0000000 00000023417 14420260131 0022016 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : -1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 0 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 4 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -1
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: P 1 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -5 -9 -13 0
Frame2: P 2 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -2 -6 -10 1 -1 5 1 1 1 0 1
Frame3: P 3 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -3 -7 -11 1 -1 5 0 1 1 1 1
Frame4: P 4 1 0.0 0.0 0 0 1.0 0 0 0 4 4 -1 -4 -8 -12 1 -1 5 0 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 0 # Enable/disable GOP Based Temporal Filter
TemporalFilterFutureReference : 0 # Enable/disable reading future frames
TemporalFilterStrengthFrame4 : 0.40 # Enable filter at every 4th frame with strength
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_lowdelay_main10_GOP4.cfg 0000664 0000000 0000000 00000023423 14420260131 0021675 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main10
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : -1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 0 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 4 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -1
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 1 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -5 -9 -13 0
Frame2: B 2 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -2 -6 -10 1 -1 5 1 1 1 0 1
Frame3: B 3 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -3 -7 -11 1 -1 5 0 1 1 1 1
Frame4: B 4 1 0.0 0.0 0 0 1.0 0 0 0 4 4 -1 -4 -8 -12 1 -1 5 0 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 0 # Enable/disable GOP Based Temporal Filter
TemporalFilterFutureReference : 0 # Enable/disable reading future frames
TemporalFilterStrengthFrame4 : 0.40 # Enable filter at every 4th frame with strength
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_lowdelay_main_GOP4.cfg 0000664 0000000 0000000 00000023421 14420260131 0021532 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : -1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 0 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 4 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -1
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 1 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -5 -9 -13 0
Frame2: B 2 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -2 -6 -10 1 -1 5 1 1 1 0 1
Frame3: B 3 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -3 -7 -11 1 -1 5 0 1 1 1 1
Frame4: B 4 1 0.0 0.0 0 0 1.0 0 0 0 4 4 -1 -4 -8 -12 1 -1 5 0 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 0 # Enable/disable GOP Based Temporal Filter
TemporalFilterFutureReference : 0 # Enable/disable reading future frames
TemporalFilterStrengthFrame4 : 0.40 # Enable filter at every 4th frame with strength
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_lowdelay_main_field_coding.cfg 0000664 0000000 0000000 00000025245 14420260131 0023435 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
FieldCoding : 1 # (0: Frame based coding, 1: Field based coding)
TopFieldFirst : 1 # Field parity order (1: Top field first, 0: Bottom field first)
ConformanceMode : 1
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile/Level ================
Profile : main
Level : 6.2
#======== SEI ===========================
VuiParametersPresent : 1
SEIActiveParameterSets : 1
SEIPictureTiming : 1
FrameFieldInfoPresentFlag : 1
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 8 # GOP Size (number of B slice = GOPSize-1)
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 2 3 0.0 0.0 0 0 0.4624 0 0 0 8 8 -1 -2 -9 -10 -17 -18 -25 -26 0
Frame2: B 3 4 0.0 0.0 0 0 0.4624 0 0 0 8 9 -1 -2 -3 -10 -11 -18 -19 -26 -27 1 -1 9 1 1 1 1 1 1 1 1 1
Frame3: B 4 2 0.0 0.0 0 0 0.4624 0 0 0 8 8 -1 -2 -3 -4 -11 -12 -19 -20 1 -1 10 1 1 1 1 1 1 1 0 0 1
Frame4: B 5 3 0.0 0.0 0 0 0.4624 0 0 0 8 9 -1 -2 -3 -4 -5 -12 -13 -20 -21 1 -1 9 1 1 1 1 1 1 1 1 1
Frame5: B 6 3 0.0 0.0 0 0 0.4624 0 0 0 8 8 -1 -2 -5 -6 -13 -14 -21 -22 1 -1 10 1 0 0 1 1 1 1 1 1 1
Frame6: B 7 4 0.0 0.0 0 0 0.4624 0 0 0 8 9 -1 -2 -3 -6 -7 -14 -15 -22 -23 1 -1 9 1 1 1 1 1 1 1 1 1
Frame7: B 8 1 0.0 0.0 0 0 0.578 0 0 0 8 8 -1 -2 -7 -8 -15 -16 -23 -24 1 -1 10 1 0 0 1 1 1 1 1 1 1
Frame8: B 9 1 0.0 0.0 0 0 0.578 0 0 0 8 9 -1 -2 -3 -8 -9 -16 -17 -24 -25 1 -1 9 1 1 1 1 1 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_lowdelay_main_rext_GOP4.cfg 0000664 0000000 0000000 00000027225 14420260131 0022602 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile definition ==============
Profile : main-RExt # Profile name to use for encoding. Use main (for FDIS main), main10 (for FDIS main10), main-still-picture, main-RExt, high-throughput-RExt, main-SCC
Tier : main # Tier to use for interpretation of --Level (main or high only)"
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : -1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 0 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 4 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -1
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 1 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -5 -9 -13 0
Frame2: B 2 4 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -2 -6 -10 1 -1 5 1 1 1 0 1
Frame3: B 3 5 -6.5 0.2590 0 0 1.0 0 0 0 4 4 -1 -3 -7 -11 1 -1 5 0 1 1 1 1
Frame4: B 4 1 0.0 0.0 0 0 1.0 0 0 0 4 4 -1 -4 -8 -12 1 -1 5 0 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 0 # Enable/disable GOP Based Temporal Filter
TemporalFilterFutureReference : 0 # Enable/disable reading future frames
TemporalFilterStrengthFrame4 : 0.40 # Enable filter at every 4th frame with strength
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
#=========== RExt ============
ExtendedPrecision : 0 # Increased internal accuracies to support high bit depths (not valid in V1 profiles)
TransformSkipLog2MaxSize : 2 # Specify transform-skip maximum size. Minimum 2. (not valid in V1 profiles)
ImplicitResidualDPCM : 1 # Enable implicitly signalled residual DPCM for intra (also known as sample-adaptive intra predict) (not valid in V1 profiles)
ExplicitResidualDPCM : 1 # Enable explicitly signalled residual DPCM for inter (not valid in V1 profiles)
ResidualRotation : 1 # Enable rotation of transform-skipped and transquant-bypassed TUs through 180 degrees prior to entropy coding (not valid in V1 profiles)
SingleSignificanceMapContext : 1 # Enable, for transform-skipped and transquant-bypassed TUs, the selection of a single significance map context variable for all coefficients (not valid in V1 profiles)
IntraReferenceSmoothing : 1 # 0: Disable use of intra reference smoothing (not valid in V1 profiles). 1: Enable use of intra reference smoothing (same as V1)
GolombRiceParameterAdaptation : 1 # Enable the partial retention of the Golomb-Rice parameter value from one coefficient group to the next
HighPrecisionPredictionWeighting : 1 # Use high precision option for weighted prediction (not valid in V1 profiles)
CrossComponentPrediction : 1 # Enable the use of cross-component prediction (not valid in V1 profiles)
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_randomaccess_main10_GOP16.cfg 0000664 0000000 0000000 00000031425 14420260131 0022603 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main10
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 16 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -3
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 16 1 0.0 0.0 0 0 1.0 0 0 0 2 3 -16 -24 -32 0
Frame2: B 8 1 -4.8848 0.2061 0 0 1.0 0 0 1 2 3 -8 -16 8 1 8 4 1 1 0 1
Frame3: B 4 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 4 -4 -12 4 12 1 4 4 1 1 1 1
Frame4: B 2 5 -5.90 0.2333 0 0 1.0 0 0 3 2 5 -2 -10 2 6 14 1 2 5 1 1 1 1 1
Frame5: B 1 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 1 3 7 15 1 1 6 1 0 1 1 1 1
Frame6: B 3 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 1 5 13 1 -2 6 1 1 1 1 1 0
Frame7: B 6 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -6 2 10 1 -3 6 0 1 1 1 1 0
Frame8: B 5 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -5 1 3 11 1 1 5 1 1 1 1 1
Frame9: B 7 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 -7 1 9 1 -2 6 1 1 1 1 1 0
Frame10: B 12 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 3 -4 -12 4 1 -5 6 0 0 1 1 1 0
Frame11: B 10 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -10 2 6 1 2 4 1 1 1 1
Frame12: B 9 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -9 1 3 7 1 1 5 1 1 1 1 1
Frame13: B 11 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 -11 1 5 1 -2 6 1 1 1 1 1 0
Frame14: B 14 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -6 -14 2 1 -3 6 0 1 1 1 1 0
Frame15: B 13 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -5 -13 1 3 1 1 5 1 1 1 1 1
Frame16: B 15 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 -7 -15 1 1 -2 6 1 1 1 1 1 0
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 384 # (0: Search range is a Full frame)
ASR : 1 # Adaptive motion search range
MinSearchWindow : 96 # Minimum motion search window size for the adaptive window ME
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 0 # Enable/disable GOP Based Temporal Filter
TemporalFilterFutureReference : 1 # Enable/disable reading future frames
TemporalFilterStrengthFrame8 : 0.95 # Enable filter at every 8th frame with given strength
TemporalFilterStrengthFrame16 : 1.5 # Enable filter at every 16th frame with given strength, longer intervals has higher priority
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnableFlag : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_randomaccess_main10_GOP8.cfg 0000664 0000000 0000000 00000024057 14420260131 0022527 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main10
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 8 # GOP Size (number of B slice = GOPSize-1)
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 8 1 0.0 0.0 0 0 0.442 0 0 0 2 3 -8 -12 -16 0
Frame2: B 4 2 0.0 0.0 0 0 0.3536 0 0 1 2 3 -4 -8 4 1 4 4 1 1 0 1
Frame3: B 2 3 0.0 0.0 0 0 0.3536 0 0 2 2 4 -2 -6 2 6 1 2 4 1 1 1 1
Frame4: B 1 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 1 3 7 1 1 5 1 0 1 1 1
Frame5: B 3 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 -3 1 5 1 -2 5 1 1 1 1 0
Frame6: B 6 3 0.0 0.0 0 0 0.3536 0 0 2 2 3 -2 -6 2 1 -3 5 0 1 1 1 0
Frame7: B 5 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 -5 1 3 1 1 4 1 1 1 1
Frame8: B 7 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 -3 -7 1 1 -2 5 1 1 1 1 0
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_randomaccess_main_2tids.cfg 0000664 0000000 0000000 00000023712 14420260131 0022673 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 8 # GOP Size (number of B slice = GOPSize-1)
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 8 1 0.0 0.0 0 0 0.442 0 0 0 4 4 -8 -10 -12 -16 0
Frame2: B 4 2 0.0 0.0 0 0 0.3536 0 0 0 2 3 -4 -6 4 1 4 5 1 1 0 0 1
Frame3: B 2 3 0.0 0.0 0 0 0.3536 0 0 0 2 4 -2 -4 2 6 1 2 4 1 1 1 1
Frame4: B 1 4 0.0 0.0 0 0 0.68 0 0 1 2 4 -1 1 3 7 1 1 5 1 0 1 1 1
Frame5: B 3 4 0.0 0.0 0 0 0.68 0 0 1 2 4 -1 -3 1 5 1 -2 5 1 1 1 1 0
Frame6: B 6 3 0.0 0.0 0 0 0.3536 0 0 0 2 4 -2 -4 -6 2 1 -3 5 1 1 1 1 0
Frame7: B 5 4 0.0 0.0 0 0 0.68 0 0 1 2 4 -1 -5 1 3 1 1 5 1 0 1 1 1
Frame8: B 7 4 0.0 0.0 0 0 0.68 0 0 1 2 4 -1 -3 -7 1 1 -2 5 1 1 1 1 0
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1=constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_randomaccess_main_GOP16.cfg 0000664 0000000 0000000 00000031422 14420260131 0022437 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 16 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -3
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 16 1 0.0 0.0 0 0 1.0 0 0 0 2 3 -16 -24 -32 0
Frame2: B 8 1 -4.8848 0.2061 0 0 1.0 0 0 1 2 3 -8 -16 8 1 8 4 1 1 0 1
Frame3: B 4 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 4 -4 -12 4 12 1 4 4 1 1 1 1
Frame4: B 2 5 -5.90 0.2333 0 0 1.0 0 0 3 2 5 -2 -10 2 6 14 1 2 5 1 1 1 1 1
Frame5: B 1 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 1 3 7 15 1 1 6 1 0 1 1 1 1
Frame6: B 3 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 1 5 13 1 -2 6 1 1 1 1 1 0
Frame7: B 6 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -6 2 10 1 -3 6 0 1 1 1 1 0
Frame8: B 5 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -5 1 3 11 1 1 5 1 1 1 1 1
Frame9: B 7 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 -7 1 9 1 -2 6 1 1 1 1 1 0
Frame10: B 12 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 3 -4 -12 4 1 -5 6 0 0 1 1 1 0
Frame11: B 10 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -10 2 6 1 2 4 1 1 1 1
Frame12: B 9 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -9 1 3 7 1 1 5 1 1 1 1 1
Frame13: B 11 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 -11 1 5 1 -2 6 1 1 1 1 1 0
Frame14: B 14 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -6 -14 2 1 -3 6 0 1 1 1 1 0
Frame15: B 13 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -5 -13 1 3 1 1 5 1 1 1 1 1
Frame16: B 15 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 -7 -15 1 1 -2 6 1 1 1 1 1 0
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 384 # (0: Search range is a Full frame)
ASR : 1 # Adaptive motion search range
MinSearchWindow : 96 # Minimum motion search window size for the adaptive window ME
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 0 # Enable/disable GOP Based Temporal Filter
TemporalFilterFutureReference : 1 # Enable/disable reading future frames
TemporalFilterStrengthFrame8 : 0.95 # Enable filter at every 8th frame with given strength
TemporalFilterStrengthFrame16 : 1.5 # Enable filter at every 16th frame with given strength, longer intervals has higher priority
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnableFlag : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_randomaccess_main_GOP8.cfg 0000664 0000000 0000000 00000024055 14420260131 0022364 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile ================
Profile : main
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 8 # GOP Size (number of B slice = GOPSize-1)
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 8 1 0.0 0.0 0 0 0.442 0 0 0 2 3 -8 -12 -16 0
Frame2: B 4 2 0.0 0.0 0 0 0.3536 0 0 1 2 3 -4 -8 4 1 4 4 1 1 0 1
Frame3: B 2 3 0.0 0.0 0 0 0.3536 0 0 2 2 4 -2 -6 2 6 1 2 4 1 1 1 1
Frame4: B 1 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 1 3 7 1 1 5 1 0 1 1 1
Frame5: B 3 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 -3 1 5 1 -2 5 1 1 1 1 0
Frame6: B 6 3 0.0 0.0 0 0 0.3536 0 0 2 2 3 -2 -6 2 1 -3 5 0 1 1 1 0
Frame7: B 5 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 -5 1 3 1 1 4 1 1 1 1
Frame8: B 7 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 -3 -7 1 1 -2 5 1 1 1 1 0
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_randomaccess_main_field_coding.cfg 0000775 0000000 0000000 00000030502 14420260131 0024252 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
FieldCoding : 1 # (0: Frame based coding, 1: Field based coding)
TopFieldFirst : 1 # Field parity order (1: Top field first, 0: Bottom field first)
ConformanceMode : 1
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile/Level ================
Profile : main
Level : 6.2
#======== SEI ===========================
VuiParametersPresent : 1
SEIActiveParameterSets : 1
SEIPictureTiming : 1
FrameFieldInfoPresentFlag : 1
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 16 # GOP Size (number of B slice = GOPSize-1)
# field coding GOP: Exchanged coding order of 16th and 17th field for more efficient encoding
# When EfficientFieldIRAPEnabled=1 is enabled, this has no additional effect
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 17 1 0.0 0.0 0 0 0.442 0 0 0 4 4 -16 -17 -20 -21 0
Frame2: B 16 1 0.0 0.0 0 0 0.442 0 0 0 3 3 -15 -16 1 1 1 5 1 1 0 0 1
Frame3: B 8 2 0.0 0.0 0 0 0.3536 0 0 0 2 4 -7 -8 8 9 1 8 4 1 1 1 1
Frame4: B 9 2 0.0 0.0 0 0 0.3536 0 0 0 2 5 -1 -8 -9 7 8 1 -1 5 1 1 1 1 1
Frame5: B 4 3 0.0 0.0 0 0 0.3536 0 0 0 2 6 -3 -4 4 5 12 13 1 5 6 1 1 1 1 1 1
Frame6: B 5 3 0.0 0.0 0 0 0.3536 0 0 0 2 7 -1 -4 -5 3 4 11 12 1 -1 7 1 1 1 1 1 1 1
Frame7: B 2 3 0.0 0.0 0 0 0.3536 0 0 0 2 8 -1 -2 2 3 6 7 14 15 1 3 8 1 1 1 1 1 1 1 1
Frame8: B 3 4 0.0 0.0 0 0 0.68 0 0 0 2 8 -1 -2 1 2 5 6 13 14 1 -1 9 1 0 1 1 1 1 1 1 1
Frame9: B 6 3 0.0 0.0 0 0 0.3536 0 0 0 2 6 -1 -2 2 3 10 11 1 -3 9 0 0 1 1 1 1 1 1 0
Frame10: B 7 4 0.0 0.0 0 0 0.68 0 0 0 2 7 -1 -2 -3 1 2 9 10 1 -1 7 1 1 1 1 1 1 1
Frame11: B 12 3 0.0 0.0 0 0 0.3536 0 0 0 2 4 -3 -4 4 5 1 -5 8 0 0 0 1 1 1 1 0
Frame12: B 13 3 0.0 0.0 0 0 0.3536 0 0 0 2 5 -1 -4 -5 3 4 1 -1 5 1 1 1 1 1
Frame13: B 10 3 0.0 0.0 0 0 0.3536 0 0 0 2 6 -1 -2 2 3 6 7 1 3 6 1 1 1 1 1 1
Frame14: B 11 4 0.0 0.0 0 0 0.68 0 0 0 2 7 -1 -2 -3 1 2 5 6 1 -1 7 1 1 1 1 1 1 1
Frame15: B 14 3 0.0 0.0 0 0 0.3536 0 0 0 2 5 -1 -2 -5 2 3 1 -3 8 0 1 0 1 1 1 1 0
Frame16: B 15 4 0.0 0.0 0 0 0.68 0 0 0 2 6 -1 -2 -3 -6 1 2 1 -1 6 1 1 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1=constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Constant lossless-value signaling per CU, if TransquantBypassEnableFlag is 1.
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_randomaccess_main_field_coding_simple_GOP.cfg 0000664 0000000 0000000 00000031173 14420260131 0026332 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
FieldCoding : 1 # (0: Frame based coding, 1: Field based coding)
TopFieldFirst : 1 # Field parity order (1: Top field first, 0: Bottom field first)
ConformanceMode : 1
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile/Level ================
Profile : main
Level : 6.2
#======== SEI ===========================
VuiParametersPresent : 1
SEIActiveParameterSets : 1
SEIPictureTiming : 1
FrameFieldInfoPresentFlag : 1
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 16 # GOP Size (number of B slice = GOPSize-1)
# simple field coding GOP: When EfficientFieldIRAPEnabled=1 is enabled, the order of frames 16 and 17 is exchanged
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 16 1 0.0 0.0 0 0 0.442 0 0 0 8 8 -15 -16 -19 -20 -23 -24 -31 -32 0
Frame2: B 17 1 0.0 0.0 0 0 0.442 0 0 0 4 9 -1 -16 -17 -20 -21 -24 -25 -32 -33 1 -1 9 1 1 1 1 1 1 1 1 1
Frame3: B 8 2 0.0 0.0 0 0 0.3536 0 0 0 4 6 -7 -8 -11 -12 8 9 1 9 10 1 1 1 1 1 0 0 0 0 1
Frame4: B 9 3 0.0 0.0 0 0 0.3536 0 0 0 4 7 -1 -8 -9 -12 -13 7 8 1 -1 7 1 1 1 1 1 1 1
Frame5: B 4 3 0.0 0.0 0 0 0.3536 0 0 0 4 8 -3 -4 -7 -8 4 5 12 13 1 5 8 1 1 1 1 1 1 1 1
Frame6: B 5 4 0.0 0.0 0 0 0.68 0 0 0 4 9 -1 -4 -5 -8 -9 3 4 11 12 1 -1 9 1 1 1 1 1 1 1 1 1
Frame7: B 2 3 0.0 0.0 0 0 0.3536 0 0 0 4 8 -1 -2 2 3 6 7 14 15 1 3 10 1 1 1 0 0 1 1 1 1 1
Frame8: B 3 4 0.0 0.0 0 0 0.68 0 0 0 4 9 -1 -2 -3 1 2 5 6 13 14 1 -1 9 1 1 1 1 1 1 1 1 1
Frame9: B 6 3 0.0 0.0 0 0 0.3536 0 0 0 4 8 -1 -2 -5 -6 2 3 10 11 1 -3 10 0 1 1 1 1 1 1 1 1 0
Frame10: B 7 4 0.0 0.0 0 0 0.68 0 0 0 4 9 -1 -2 -3 -6 -7 1 2 9 10 1 -1 9 1 1 1 1 1 1 1 1 1
Frame11: B 12 3 0.0 0.0 0 0 0.3536 0 0 0 4 8 -3 -4 -7 -8 -11 -12 4 5 1 -5 10 0 1 1 1 1 1 1 1 1 0
Frame12: B 13 4 0.0 0.0 0 0 0.68 0 0 0 4 9 -1 -4 -5 -8 -9 -12 -13 3 4 1 -1 9 1 1 1 1 1 1 1 1 1
Frame13: B 10 3 0.0 0.0 0 0 0.3536 0 0 0 4 8 -1 -2 -9 -10 2 3 6 7 1 3 10 1 1 1 0 0 1 1 1 1 1
Frame14: B 11 4 0.0 0.0 0 0 0.68 0 0 0 4 9 -1 -2 -3 -10 -11 1 2 5 6 1 -1 9 1 1 1 1 1 1 1 1 1
Frame15: B 14 3 0.0 0.0 0 0 0.3536 0 0 0 4 8 -1 -2 -5 -6 -13 -14 2 3 1 -3 10 0 1 1 1 1 1 1 1 1 0
Frame16: B 15 4 0.0 0.0 0 0 0.68 0 0 0 4 9 -1 -2 -3 -6 -7 -14 -15 1 2 1 -1 9 1 1 1 1 1 1 1 1 1
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1=constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream)
#=========== Misc. ============
InternalBitDepth : 8 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Constant lossless-value signaling per CU, if TransquantBypassEnableFlag is 1.
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_randomaccess_main_rext_GOP16.cfg 0000664 0000000 0000000 00000035314 14420260131 0023505 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile definition ==============
Profile : main-RExt # Profile name to use for encoding. Use main (for FDIS main), main10 (for FDIS main10), main-still-picture, main-RExt, high-throughput-RExt, main-SCC
Tier : main # Tier to use for interpretation of --Level (main or high only)"
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 16 # GOP Size (number of B slice = GOPSize-1)
ReWriteParamSetsFlag : 1 # Write parameter sets with every IRAP
IntraQPOffset : -3
LambdaFromQpEnable : 1 # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 16 1 0.0 0.0 0 0 1.0 0 0 0 2 3 -16 -24 -32 0
Frame2: B 8 1 -4.8848 0.2061 0 0 1.0 0 0 1 2 3 -8 -16 8 1 8 4 1 1 0 1
Frame3: B 4 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 4 -4 -12 4 12 1 4 4 1 1 1 1
Frame4: B 2 5 -5.90 0.2333 0 0 1.0 0 0 3 2 5 -2 -10 2 6 14 1 2 5 1 1 1 1 1
Frame5: B 1 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 1 3 7 15 1 1 6 1 0 1 1 1 1
Frame6: B 3 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 1 5 13 1 -2 6 1 1 1 1 1 0
Frame7: B 6 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -6 2 10 1 -3 6 0 1 1 1 1 0
Frame8: B 5 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -5 1 3 11 1 1 5 1 1 1 1 1
Frame9: B 7 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 -7 1 9 1 -2 6 1 1 1 1 1 0
Frame10: B 12 4 -5.7476 0.2286 0 0 1.0 0 0 2 2 3 -4 -12 4 1 -5 6 0 0 1 1 1 0
Frame11: B 10 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -10 2 6 1 2 4 1 1 1 1
Frame12: B 9 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -9 1 3 7 1 1 5 1 1 1 1 1
Frame13: B 11 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 -11 1 5 1 -2 6 1 1 1 1 1 0
Frame14: B 14 5 -5.90 0.2333 0 0 1.0 0 0 3 2 4 -2 -6 -14 2 1 -3 6 0 1 1 1 1 0
Frame15: B 13 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -5 -13 1 3 1 1 5 1 1 1 1 1
Frame16: B 15 6 -7.1444 0.3 0 0 1.0 0 0 4 2 5 -1 -3 -7 -15 1 1 -2 6 1 1 1 1 1 0
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 384 # (0: Search range is a Full frame)
ASR : 1 # Adaptive motion search range
MinSearchWindow : 96 # Minimum motion search window size for the adaptive window ME
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#=========== TemporalFilter =================
TemporalFilter : 0 # Enable/disable GOP Based Temporal Filter
TemporalFilterFutureReference : 1 # Enable/disable reading future frames
TemporalFilterStrengthFrame8 : 0.95 # Enable filter at every 8th frame with given strength
TemporalFilterStrengthFrame16 : 1.5 # Enable filter at every 16th frame with given strength, longer intervals has higher priority
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
#=========== RExt ============
ExtendedPrecision : 0 # Increased internal accuracies to support high bit depths (not valid in V1 profiles)
TransformSkipLog2MaxSize : 2 # Specify transform-skip maximum size. Minimum 2. (not valid in V1 profiles)
ImplicitResidualDPCM : 1 # Enable implicitly signalled residual DPCM for intra (also known as sample-adaptive intra predict) (not valid in V1 profiles)
ExplicitResidualDPCM : 1 # Enable explicitly signalled residual DPCM for inter (not valid in V1 profiles)
ResidualRotation : 1 # Enable rotation of transform-skipped and transquant-bypassed TUs through 180 degrees prior to entropy coding (not valid in V1 profiles)
SingleSignificanceMapContext : 1 # Enable, for transform-skipped and transquant-bypassed TUs, the selection of a single significance map context variable for all coefficients (not valid in V1 profiles)
IntraReferenceSmoothing : 1 # 0: Disable use of intra reference smoothing (not valid in V1 profiles). 1: Enable use of intra reference smoothing (same as V1)
GolombRiceParameterAdaptation : 1 # Enable the partial retention of the Golomb-Rice parameter value from one coefficient group to the next
HighPrecisionPredictionWeighting : 1 # Use high precision option for weighted prediction (not valid in V1 profiles)
CrossComponentPrediction : 1 # Enable the use of cross-component prediction (not valid in V1 profiles)
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/encoder_randomaccess_main_rext_GOP8.cfg 0000664 0000000 0000000 00000027747 14420260131 0023441 0 ustar 00root root 0000000 0000000 #======== File I/O =====================
BitstreamFile : str.bin
ReconFile : rec.yuv
#======== Profile definition ==============
Profile : main-RExt # Profile name to use for encoding. Use main (for FDIS main), main10 (for FDIS main10), main-still-picture, main-RExt, high-throughput-RExt, main-SCC
Tier : main # Tier to use for interpretation of --Level (main or high only)"
#======== Unit definition ================
MaxCUWidth : 64 # Maximum coding unit width in pixel
MaxCUHeight : 64 # Maximum coding unit height in pixel
MaxPartitionDepth : 4 # Maximum coding unit depth
QuadtreeTULog2MaxSize : 5 # Log2 of maximum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize : 2 # Log2 of minimum transform size for
# quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter : 3
QuadtreeTUMaxDepthIntra : 3
#======== Coding Structure =============
IntraPeriod : 32 # Period of I-Frame ( -1 = only first)
DecodingRefreshType : 1 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize : 8 # GOP Size (number of B slice = GOPSize-1)
# Type POC QPoffset QPOffsetModelOff QPOffsetModelScale CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures predict deltaRPS #ref_idcs reference idcs
Frame1: B 8 1 0.0 0.0 0 0 0.442 0 0 0 2 3 -8 -12 -16 0
Frame2: B 4 2 0.0 0.0 0 0 0.3536 0 0 1 2 3 -4 -8 4 1 4 4 1 1 0 1
Frame3: B 2 3 0.0 0.0 0 0 0.3536 0 0 2 2 4 -2 -6 2 6 1 2 4 1 1 1 1
Frame4: B 1 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 1 3 7 1 1 5 1 0 1 1 1
Frame5: B 3 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 -3 1 5 1 -2 5 1 1 1 1 0
Frame6: B 6 3 0.0 0.0 0 0 0.3536 0 0 2 2 3 -2 -6 2 1 -3 5 0 1 1 1 0
Frame7: B 5 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 -5 1 3 1 1 4 1 1 1 1
Frame8: B 7 4 0.0 0.0 0 0 0.68 0 0 3 2 4 -1 -3 -7 1 1 -2 5 1 1 1 1 0
#=========== Motion Search =============
FastSearch : 1 # 0:Full search 1:TZ search
SearchRange : 64 # (0: Search range is a Full frame)
BipredSearchRange : 4 # Search range for bi-prediction refinement
HadamardME : 1 # Use of hadamard measure for fractional ME
FEN : 1 # Fast encoder decision
FDM : 1 # Fast Decision for Merge RD cost
#======== Quantization =============
QP : 32 # Quantization parameter(0-51)
MaxDeltaQP : 0 # CU-based multi-QP optimization
MaxCuDQPDepth : 0 # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD : 0 # Slice-based multi-QP optimization
RDOQ : 1 # RDOQ
RDOQTS : 1 # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0 # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0 # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0 # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
#=========== Deblock Filter ============
LoopFilterOffsetInPPS : 1 # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1 (default) =constant params in PPS, param = base_param)
LoopFilterDisable : 0 # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2 : 0 # base_param: -6 ~ 6
LoopFilterTcOffset_div2 : 0 # base_param: -6 ~ 6
DeblockingFilterMetric : 0 # blockiness metric (automatically configures deblocking parameters in bitstream). Applies slice-level loop filter offsets (LoopFilterOffsetInPPS and LoopFilterDisable must be 0)
#=========== Misc. ============
InternalBitDepth : 10 # codec operating bit-depth
#=========== Coding Tools =================
SAO : 1 # Sample adaptive offset (0: OFF, 1: ON)
AMP : 1 # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip : 1 # Transform skipping (0: OFF, 1: ON)
TransformSkipFast : 1 # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)
#============ Slices ================
SliceMode : 0 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 1500 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1 : 0 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 3 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 0 # Number of tile rows in a picture minus 1
TileRowHeightArray : 2 # Array containing tile row height values in units of CTU (from top to bottom in picture)
LFCrossTileBoundaryFlag : 1 # In-loop filtering is across or not across tile boundary.
# 0:not across, 1: across
#============ WaveFront ================
WaveFrontSynchro : 0 # 0: No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
# >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList : 0 # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile : scaling_list.txt # Scaling List file name. If file is not exist, use Default Matrix.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
KeepHierarchicalBit : 2 # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
LCULevelRateControl : 1 # Rate control: 1: LCU level RC; 0: picture level RC
RCLCUSeparateModel : 1 # Rate control: use LCU level separate R-lambda model
InitialQP : 0 # Rate control: initial QP
RCForceIntraQP : 0 # Rate control: force intra QP to be equal to initial QP
#=========== RExt ============
ExtendedPrecision : 0 # Increased internal accuracies to support high bit depths (not valid in V1 profiles)
TransformSkipLog2MaxSize : 2 # Specify transform-skip maximum size. Minimum 2. (not valid in V1 profiles)
ImplicitResidualDPCM : 1 # Enable implicitly signalled residual DPCM for intra (also known as sample-adaptive intra predict) (not valid in V1 profiles)
ExplicitResidualDPCM : 1 # Enable explicitly signalled residual DPCM for inter (not valid in V1 profiles)
ResidualRotation : 1 # Enable rotation of transform-skipped and transquant-bypassed TUs through 180 degrees prior to entropy coding (not valid in V1 profiles)
SingleSignificanceMapContext : 1 # Enable, for transform-skipped and transquant-bypassed TUs, the selection of a single significance map context variable for all coefficients (not valid in V1 profiles)
IntraReferenceSmoothing : 1 # 0: Disable use of intra reference smoothing (not valid in V1 profiles). 1: Enable use of intra reference smoothing (same as V1)
GolombRiceParameterAdaptation : 1 # Enable the partial retention of the Golomb-Rice parameter value from one coefficient group to the next
HighPrecisionPredictionWeighting : 1 # Use high precision option for weighted prediction (not valid in V1 profiles)
CrossComponentPrediction : 1 # Enable the use of cross-component prediction (not valid in V1 profiles)
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
HM-HM-18.0/cfg/misc/example_colour_remapping_sei_encoder_0.txt 0000775 0000000 0000000 00000003550 14420260131 0024340 0 ustar 00root root 0000000 0000000 # Example colour remapping information SEI configuration file
# One of these is required per POC, with the POC number used in the filename suffix.
colour_remap_id: 1
colour_remap_cancel_flag: 0
colour_remap_persistence_flag: 1
colour_remap_video_signal_info_present_flag: 1
colour_remap_full_range_flag: 0
colour_remap_primaries: 1
colour_remap_transfer_function: 1
colour_remap_matrix_coefficients: 1
colour_remap_input_bit_depth: 10
colour_remap_bit_depth: 10
pre_lut_num_val_minus1[c]: 1
pre_lut_coded_value[c][i]: 0 pre_lut_target_value[c][i]: 0
pre_lut_coded_value[c][i]: 1023 pre_lut_target_value[c][i]: 1023
pre_lut_num_val_minus1[c]: 1
pre_lut_coded_value[c][i]: 0 pre_lut_target_value[c][i]: 0
pre_lut_coded_value[c][i]: 1023 pre_lut_target_value[c][i]: 1023
pre_lut_num_val_minus1[c]: 1
pre_lut_coded_value[c][i]: 0 pre_lut_target_value[c][i]: 0
pre_lut_coded_value[c][i]: 1023 pre_lut_target_value[c][i]: 1023
colour_remap_matrix_present_flag: 1
log2_matrix_denom: 10
colour_remap_coeffs[c][i]: 1024
colour_remap_coeffs[c][i]: 0
colour_remap_coeffs[c][i]: 0
colour_remap_coeffs[c][i]: 0
colour_remap_coeffs[c][i]: 1024
colour_remap_coeffs[c][i]: 0
colour_remap_coeffs[c][i]: 0
colour_remap_coeffs[c][i]: 0
colour_remap_coeffs[c][i]: 1024
post_lut_num_val_minus1[c]: 3
post_lut_coded_value[c][i]: 0 post_lut_target_value[c][i]: 0
post_lut_coded_value[c][i]: 200 post_lut_target_value[c][i]: 100
post_lut_coded_value[c][i]: 800 post_lut_target_value[c][i]: 900
post_lut_coded_value[c][i]: 1023 post_lut_target_value[c][i]: 1023
post_lut_num_val_minus1[c]: 1
post_lut_coded_value[c][i]: 0 post_lut_target_value[c][i]: 0
post_lut_coded_value[c][i]: 1023 post_lut_target_value[c][i]: 1023
post_lut_num_val_minus1[c]: 1
post_lut_coded_value[c][i]: 0 post_lut_target_value[c][i]: 0
post_lut_coded_value[c][i]: 1023 post_lut_target_value[c][i]: 1023
HM-HM-18.0/cfg/per-class/ 0000775 0000000 0000000 00000000000 14420260131 0014671 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cfg/per-class/classF.cfg 0000664 0000000 0000000 00000000022 14420260131 0016557 0 ustar 00root root 0000000 0000000 TemporalFilter: 0
HM-HM-18.0/cfg/per-class/classH1.cfg 0000664 0000000 0000000 00000001256 14420260131 0016654 0 ustar 00root root 0000000 0000000 #======== Luma adaptive QP ========
LumaLevelToDeltaQPMode : 1 # Change luma delta QP based on average luma
#======== Chroma QP scale ============
WCGPPSEnable : 1 # enable WCG Chroma scale
#======== VUI Parameters (PQ) =========
#VuiParametersPresent : 1
#VideoSignalTypePresent : 1
#VideoFullRange : 0
#ColourDescriptionPresent : 1
#ColourPrimaries : 9
#TransferCharacteristics : 16
#MatrixCoefficients : 9
#ChromaLocInfoPresent : 1
#ChromaSampleLocTypeTopField : 2
#ChromaSampleLocTypeBottomField : 2 HM-HM-18.0/cfg/per-class/classH2.cfg 0000664 0000000 0000000 00000001256 14420260131 0016655 0 ustar 00root root 0000000 0000000 ======== Luma adaptive QP ========
LumaLevelToDeltaQPMode : 0 # Change luma delta QP based on average luma
#======== Chroma QP scale ============
WCGPPSEnable : 0 # enable WCG Chroma scale
#======== VUI Parameters (HLG) ========
#VuiParametersPresent : 1
#VideoSignalTypePresent : 1
#VideoFullRange : 0
#ColourDescriptionPresent : 1
#ColourPrimaries : 9
#TransferCharacteristics : 18
#MatrixCoefficients : 9
#ChromaLocInfoPresent : 1
#ChromaSampleLocTypeTopField : 0
#ChromaSampleLocTypeBottomField : 0 HM-HM-18.0/cfg/per-sequence-HBD/ 0000775 0000000 0000000 00000000000 14420260131 0015767 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cfg/per-sequence-HBD/CrowdRun_RGB_16bit.cfg 0000664 0000000 0000000 00000001752 14420260131 0021717 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : CrowdRun_1920x1080_50_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/DucksTakeOff_RGB_16bit.cfg 0000664 0000000 0000000 00000001756 14420260131 0022471 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : DucksTakeOff_1920x1080_50_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_BalloonFestival_420_12bit.cfg 0000664 0000000 0000000 00000001236 14420260131 0023454 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BalloonFestival_1920x1080p_24_12b_pq_709_ct2020_420.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_BalloonFestival_422_12bit.cfg 0000664 0000000 0000000 00000001236 14420260131 0023456 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BalloonFestival_1920x1080p_24_12b_pq_709_ct2020_422.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_BalloonFestival_444_12bit.cfg 0000664 0000000 0000000 00000001236 14420260131 0023462 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BalloonFestival_1920x1080p_24_12b_pq_709_ct2020_444.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_FireEater2_420_12bit.cfg 0000664 0000000 0000000 00000001242 14420260131 0022315 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : FireEater2Clip4000r1_1920x1080p_25_12b_pq_709_ct2020_420.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 25 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_FireEater2_422_12bit.cfg 0000664 0000000 0000000 00000001242 14420260131 0022317 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : FireEater2Clip4000r1_1920x1080p_25_12b_pq_709_ct2020_422.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 25 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_FireEater2_444_12bit.cfg 0000664 0000000 0000000 00000001242 14420260131 0022323 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : FireEater2Clip4000r1_1920x1080p_25_12b_pq_709_ct2020_444.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 25 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_Hurdles_420_12bit.cfg 0000664 0000000 0000000 00000001234 14420260131 0021774 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBU_04_Hurdles_1920x1080p_50_12b_pq_709_ct2020_420.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_Hurdles_422_12bit.cfg 0000664 0000000 0000000 00000001234 14420260131 0021776 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBU_04_Hurdles_1920x1080p_50_12b_pq_709_ct2020_422.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_Hurdles_444_12bit.cfg 0000664 0000000 0000000 00000001234 14420260131 0022002 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBU_04_Hurdles_1920x1080p_50_12b_pq_709_ct2020_444.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_Market3_420_12bit.cfg 0000664 0000000 0000000 00000001237 14420260131 0021677 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Market3Clip4000r2_1920x1080p_50_12b_pq_709_ct2020_420.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 400 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_Market3_422_12bit.cfg 0000664 0000000 0000000 00000001237 14420260131 0021701 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Market3Clip4000r2_1920x1080p_50_12b_pq_709_ct2020_422.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 400 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_Market3_444_12bit.cfg 0000664 0000000 0000000 00000001237 14420260131 0021705 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Market3Clip4000r2_1920x1080p_50_12b_pq_709_ct2020_444.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 400 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_Starting_420_12bit.cfg 0000664 0000000 0000000 00000001235 14420260131 0022162 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBU_06_Starting_1920x1080p_50_12b_pq_709_ct2020_420.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_Starting_422_12bit.cfg 0000664 0000000 0000000 00000001235 14420260131 0022164 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBU_06_Starting_1920x1080p_50_12b_pq_709_ct2020_422.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H1_Starting_444_12bit.cfg 0000664 0000000 0000000 00000001235 14420260131 0022170 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBU_06_Starting_1920x1080p_50_12b_pq_709_ct2020_444.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_DayStreet_420_12bit.cfg 0000664 0000000 0000000 00000001217 14420260131 0022274 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : DayStreet_1920x1080_60p_12bit_420_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_DayStreet_422_12bit.cfg 0000664 0000000 0000000 00000001217 14420260131 0022276 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : DayStreet_1920x1080_60p_12bit_422_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_DayStreet_444_12bit.cfg 0000664 0000000 0000000 00000001217 14420260131 0022302 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : DayStreet_1920x1080_60p_12bit_444_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_NightStreet_420_12bit.cfg 0000664 0000000 0000000 00000001221 14420260131 0022623 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : NightStreet_1920x1080_60p_12bit_420_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_NightStreet_422_12bit.cfg 0000664 0000000 0000000 00000001221 14420260131 0022625 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : NightStreet_1920x1080_60p_12bit_422_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_NightStreet_444_12bit.cfg 0000664 0000000 0000000 00000001221 14420260131 0022631 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : NightStreet_1920x1080_60p_12bit_444_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_PeopleInShoppingCenter_420_12bit.cfg 0000664 0000000 0000000 00000001234 14420260131 0024753 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : PeopleInShoppingCenter_1920x1080_60p_12bit_420_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_PeopleInShoppingCenter_422_12bit.cfg 0000664 0000000 0000000 00000001234 14420260131 0024755 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : PeopleInShoppingCenter_1920x1080_60p_12bit_422_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_PeopleInShoppingCenter_444_12bit.cfg 0000664 0000000 0000000 00000001234 14420260131 0024761 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : PeopleInShoppingCenter_1920x1080_60p_12bit_444_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_StainedGlass_420_12bit.cfg 0000664 0000000 0000000 00000001222 14420260131 0022745 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : StainedGlass_1920x1080_60p_12bit_420_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_StainedGlass_422_12bit.cfg 0000664 0000000 0000000 00000001222 14420260131 0022747 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : StainedGlass_1920x1080_60p_12bit_422_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/H2_StainedGlass_444_12bit.cfg 0000664 0000000 0000000 00000001222 14420260131 0022753 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : StainedGlass_1920x1080_60p_12bit_444_hlg.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/InToTree_RGB_16bit.cfg 0000664 0000000 0000000 00000001752 14420260131 0021645 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : InToTree_1920x1080_50_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/OldTownCross_RGB_16bit.cfg 0000664 0000000 0000000 00000001756 14420260131 0022560 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : OldTownCross_1920x1080_50_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HBD/ParkJoy_RGB_16bit.cfg 0000664 0000000 0000000 00000001751 14420260131 0021532 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : ParkJoy_1920x1080_50_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 4.1
HM-HM-18.0/cfg/per-sequence-HDR/ 0000775 0000000 0000000 00000000000 14420260131 0016007 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cfg/per-sequence-HDR/H1_BalloonFestival.cfg 0000664 0000000 0000000 00000002352 14420260131 0022106 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BalloonFestival_1920x1080p_25_10b_pq_709_ct2020_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
Level : 4.1
#============ HDR ================
WCGPPSChromaQpScale : -0.46 # Linear chroma QP offset mapping (scale)
WCGPPSChromaQpOffset : 9.26 # Linear chroma QP offset mapping (offset)
WCGPPSCbQpScale : 1.14 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.14 for BT.709 material and 1.04 for P3 material)
WCGPPSCrQpScale : 1.79 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.79 for BT.709 material and 1.39 for P3 material)
HM-HM-18.0/cfg/per-sequence-HDR/H1_Cosmos1_TreeTrunk.cfg 0000664 0000000 0000000 00000002333 14420260131 0022350 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Cosmos1_1920x856_BT2100_PQ_24fps_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 856 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
Level : 4.1
#============ HDR ================
WCGPPSChromaQpScale : -0.46 # Linear chroma QP offset mapping (scale)
WCGPPSChromaQpOffset : 9.26 # Linear chroma QP offset mapping (offset)
WCGPPSCbQpScale : 1.04 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.14 for BT.709 material and 1.04 for P3 material)
WCGPPSCrQpScale : 1.39 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.79 for BT.709 material and 1.39 for P3 material)
HM-HM-18.0/cfg/per-sequence-HDR/H1_EBU_Hurdles.cfg 0000664 0000000 0000000 00000002347 14420260131 0021127 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Hurdles_1920x1080p_50_10b_pq_709_ct2020_420_rev1.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 4.1
#============ HDR ================
WCGPPSChromaQpScale : -0.46 # Linear chroma QP offset mapping (scale)
WCGPPSChromaQpOffset : 9.26 # Linear chroma QP offset mapping (offset)
WCGPPSCbQpScale : 1.14 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.14 for BT.709 material and 1.04 for P3 material)
WCGPPSCrQpScale : 1.79 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.79 for BT.709 material and 1.39 for P3 material)
HM-HM-18.0/cfg/per-sequence-HDR/H1_EBU_Starting.cfg 0000664 0000000 0000000 00000002350 14420260131 0021306 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Starting_1920x1080p_50_10b_pq_709_ct2020_420_rev1.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 4.1
#============ HDR ================
WCGPPSChromaQpScale : -0.46 # Linear chroma QP offset mapping (scale)
WCGPPSChromaQpOffset : 9.26 # Linear chroma QP offset mapping (offset)
WCGPPSCbQpScale : 1.14 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.14 for BT.709 material and 1.04 for P3 material)
WCGPPSCrQpScale : 1.79 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.79 for BT.709 material and 1.39 for P3 material)
HM-HM-18.0/cfg/per-sequence-HDR/H1_Market.cfg 0000664 0000000 0000000 00000002347 14420260131 0020251 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Market3_1920x1080p_50_10b_pq_709_ct2020_420_rev1.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 400 # Number of frames to be coded
Level : 4.1
#============ HDR ================
WCGPPSChromaQpScale : -0.46 # Linear chroma QP offset mapping (scale)
WCGPPSChromaQpOffset : 9.26 # Linear chroma QP offset mapping (offset)
WCGPPSCbQpScale : 1.14 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.14 for BT.709 material and 1.04 for P3 material)
WCGPPSCrQpScale : 1.79 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.79 for BT.709 material and 1.39 for P3 material)
HM-HM-18.0/cfg/per-sequence-HDR/H1_ShowGirl.cfg 0000664 0000000 0000000 00000002356 14420260131 0020564 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : ShowGirl2TeaserClip4000_1920x1080p_24_12_P3_ct2020_rev1.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 25 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 339 # Number of frames to be coded
Level : 4.1
#============ HDR ================
WCGPPSChromaQpScale : -0.46 # Linear chroma QP offset mapping (scale)
WCGPPSChromaQpOffset : 9.26 # Linear chroma QP offset mapping (offset)
WCGPPSCbQpScale : 1.04 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.14 for BT.709 material and 1.04 for P3 material)
WCGPPSCrQpScale : 1.39 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.79 for BT.709 material and 1.39 for P3 material)
HM-HM-18.0/cfg/per-sequence-HDR/H1_SunRise.cfg 0000664 0000000 0000000 00000002342 14420260131 0020411 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : SunRise_1920x1080p_25_10b_pq_709_ct2020_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 25 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
Level : 4.1
#============ HDR ================
WCGPPSChromaQpScale : -0.46 # Linear chroma QP offset mapping (scale)
WCGPPSChromaQpOffset : 9.26 # Linear chroma QP offset mapping (offset)
WCGPPSCbQpScale : 1.14 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.14 for BT.709 material and 1.04 for P3 material)
WCGPPSCrQpScale : 1.79 # Scale factor depending on capture and representation color space (with BT.2020 container use 1.79 for BT.709 material and 1.39 for P3 material)
HM-HM-18.0/cfg/per-sequence-HDR/H2_DayStreet2.cfg 0000664 0000000 0000000 00000001226 14420260131 0021010 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : DayStreet2_3840x2160_60p_10bit_420_hlg_type2.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence-HDR/H2_FlyingBirds3.cfg 0000664 0000000 0000000 00000001226 14420260131 0021321 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : FlyingBirds3_3840x2160p_60_10b_HLG_420_type2.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence-HDR/H2_PeopleInShoppingCenter2.cfg 0000664 0000000 0000000 00000001243 14420260131 0023467 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : PeopleInShoppingCenter2_3840x2160_60p_10bit_420_hlg_type2.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence-HDR/H2_SunsetBeach3.cfg 0000664 0000000 0000000 00000001226 14420260131 0021311 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : SunsetBeach3_3840x2160p_60_10b_HLG_420_type2.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence/ 0000775 0000000 0000000 00000000000 14420260131 0015374 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cfg/per-sequence/ArenaOfValor.cfg 0000664 0000000 0000000 00000001215 14420260131 0020373 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : ArenaOfValor_1920x1080_60_8bit_420.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence/BQMall.cfg 0000664 0000000 0000000 00000001237 14420260131 0017170 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BQMall_832x480_60.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 832 # Input frame width
SourceHeight : 480 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
LastValidFrame : 599
Level : 3.1
HM-HM-18.0/cfg/per-sequence/BQSquare.cfg 0000664 0000000 0000000 00000001241 14420260131 0017536 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BQSquare_416x240_60.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 416 # Input frame width
SourceHeight : 240 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
LastValidFrame : 599
Level : 2.1
HM-HM-18.0/cfg/per-sequence/BQTerrace.cfg 0000664 0000000 0000000 00000001244 14420260131 0017666 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BQTerrace_1920x1080_60.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
LastValidFrame : 599
Level : 4.1
HM-HM-18.0/cfg/per-sequence/BasketballDrill.cfg 0000664 0000000 0000000 00000001250 14420260131 0021106 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BasketballDrill_832x480_50.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 832 # Input frame width
SourceHeight : 480 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
LastValidFrame : 499
Level : 3.1
HM-HM-18.0/cfg/per-sequence/BasketballDrillText.cfg 0000664 0000000 0000000 00000001254 14420260131 0021757 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BasketballDrillText_832x480_50.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 832 # Input frame width
SourceHeight : 480 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
LastValidFrame : 499
Level : 3.1
HM-HM-18.0/cfg/per-sequence/BasketballDrive.cfg 0000664 0000000 0000000 00000001252 14420260131 0021113 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BasketballDrive_1920x1080_50.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
LastValidFrame : 499
Level : 4.1
HM-HM-18.0/cfg/per-sequence/BasketballPass.cfg 0000664 0000000 0000000 00000001247 14420260131 0020754 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BasketballPass_416x240_50.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 416 # Input frame width
SourceHeight : 240 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
LastValidFrame : 499
Level : 2.1
HM-HM-18.0/cfg/per-sequence/BasketballScreen_444.cfg 0000664 0000000 0000000 00000001217 14420260131 0021655 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Basketball_Screen_2560x1440_60p_8b444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 322 # Number of frames to be skipped in input
SourceWidth : 2560 # Input frame width
SourceHeight : 1440 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/BasketballScreen_RGB.cfg 0000664 0000000 0000000 00000001760 14420260131 0021757 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Basketball_Screen_2560x1440_60p_8b444.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 322 # Number of frames to be skipped in input
SourceWidth : 2560 # Input frame width
SourceHeight : 1440 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/BirdsInCage_444_10bit.cfg 0000664 0000000 0000000 00000001214 14420260131 0021557 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BirdsInCage_1920x1080_60_10bit_444.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/BlowingBubbles.cfg 0000664 0000000 0000000 00000001247 14420260131 0020761 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : BlowingBubbles_416x240_50.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 416 # Input frame width
SourceHeight : 240 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
LastValidFrame : 499
Level : 2.1
HM-HM-18.0/cfg/per-sequence/Bubbles_RGB_16bit.cfg 0000664 0000000 0000000 00000001751 14420260131 0021136 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Bubbles_4096x2160_24_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 4096 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 120 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/CADWaveform_444.cfg 0000664 0000000 0000000 00000001226 14420260131 0020547 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_cad_waveform_1920x1080_20_8bit_200_444_r1.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/CADWaveform_GBR.cfg 0000664 0000000 0000000 00000001223 14420260131 0020643 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_cad_waveform_1920x1080_20_8bit_200_gbr.gbr
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/CADWaveform_RGB.cfg 0000664 0000000 0000000 00000001764 14420260131 0020655 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_cad_waveform_1920x1080_20_8bit_200_rgb.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Cactus.cfg 0000664 0000000 0000000 00000001175 14420260131 0017303 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Cactus_1920x1080_50.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 4.1
HM-HM-18.0/cfg/per-sequence/Campfire.cfg 0000664 0000000 0000000 00000001235 14420260131 0017604 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Campfire_3840x2160_30fps_10bit_420_bt709_videoRange.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence/Cardiac_400_12bit.cfg 0000664 0000000 0000000 00000001206 14420260131 0020766 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : CT_Cardiac_512x512_12bit_400.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 400 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 512 # Input frame width
SourceHeight : 512 # Input frame height
FramesToBeEncoded : 281 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/CatRobot.cfg 0000664 0000000 0000000 00000001221 14420260131 0017566 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : CatRobot_3840x2160_60fps_10bit_420_jvet.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence/CatRobot1.cfg 0000664 0000000 0000000 00000001214 14420260131 0017651 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : CatRobot1_3840x2160p_60_10_709_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence/ChinaSpeed.cfg 0000664 0000000 0000000 00000001200 14420260131 0020051 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : ChinaSpeed_1024x768_30.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1024 # Input frame width
SourceHeight : 768 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 3.1
HM-HM-18.0/cfg/per-sequence/Console_444.cfg 0000664 0000000 0000000 00000001212 14420260131 0020046 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_console_1920x1080_60_8bit_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Console_RGB.cfg 0000664 0000000 0000000 00000001753 14420260131 0020157 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_console_1920x1080_60_8bit_rgb.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/CrowdRun_444_10bit.cfg 0000664 0000000 0000000 00000001211 14420260131 0021205 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : CrowdRun_1920x1080_50_10bit_444.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/CrowdRun_RGB_16bit.cfg 0000664 0000000 0000000 00000001752 14420260131 0021324 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : CrowdRun_1920x1080_50_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/DaylightRoad2.cfg 0000664 0000000 0000000 00000001221 14420260131 0020506 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : DaylightRoad2_3840x2160_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence/Desktop_444.cfg 0000664 0000000 0000000 00000001212 14420260131 0020055 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_desktop_1920x1080_60_8bit_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Desktop_RGB.cfg 0000664 0000000 0000000 00000001753 14420260131 0020166 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_desktop_1920x1080_60_8bit_rgb.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Doc_444.cfg 0000664 0000000 0000000 00000001211 14420260131 0017150 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_doc_1280x720_10_8bit_500_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 10 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Doc_RGB.cfg 0000664 0000000 0000000 00000001746 14420260131 0017264 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_doc_1280x720_10_8bit_500.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 10 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Drums100.cfg 0000664 0000000 0000000 00000001220 14420260131 0017363 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Drums_3840x2160_100fps_10bit_420_jvet.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 100 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.2
HM-HM-18.0/cfg/per-sequence/DucksAndLegs_RGB_10bit.cfg 0000664 0000000 0000000 00000001757 14420260131 0022067 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : DucksAndLegs_1920x1080_30_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/DucksTakeOff_RGB_16bit.cfg 0000664 0000000 0000000 00000001756 14420260131 0022076 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : DucksTakeOff_1920x1080_50_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/EBUGraphics_422_10bit.cfg 0000664 0000000 0000000 00000001214 14420260131 0021535 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBUGraphics_1920x1080_50_10bit_422.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/EBUHorse_422_10bit.cfg 0000664 0000000 0000000 00000001211 14420260131 0021052 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBUHorse_1920x1080_50_10bit_422.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/EBUKidsSoccer_422_10bit.cfg 0000664 0000000 0000000 00000001216 14420260131 0022030 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBUKidsSoccer_1920x1080_50_10bit_422.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/EBULupoCandlelight_444_10bit.cfg 0000664 0000000 0000000 00000001223 14420260131 0023057 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBULupoCandlelight_1920x1080_50_10bit_444.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/EBULupoCandlelight_RGB_10bit.cfg 0000664 0000000 0000000 00000001765 14420260131 0023171 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBULupoCandlelight_1920x1080_50_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/EBURainFruits_444_10bit.cfg 0000664 0000000 0000000 00000001216 14420260131 0022071 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBURainFruits_1920x1080_50_10bit_444.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/EBURainFruits_RGB_10bit+2MSB.cfg 0000664 0000000 0000000 00000002077 14420260131 0022675 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBURainFruits_1920x1080_50_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
MSBExtendedBitDepth : 12 # bit depth after addition of MSBs
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/EBURainFruits_RGB_10bit+4MSB.cfg 0000664 0000000 0000000 00000002077 14420260131 0022677 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBURainFruits_1920x1080_50_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
MSBExtendedBitDepth : 14 # bit depth after addition of MSBs
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/EBURainFruits_RGB_10bit+6MSB.cfg 0000664 0000000 0000000 00000002077 14420260131 0022701 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBURainFruits_1920x1080_50_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
MSBExtendedBitDepth : 16 # bit depth after addition of MSBs
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/EBURainFruits_RGB_10bit.cfg 0000664 0000000 0000000 00000001760 14420260131 0022174 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBURainFruits_1920x1080_50_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/EBUWaterRocksClose_422_10bit.cfg 0000664 0000000 0000000 00000001223 14420260131 0023047 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : EBUWaterRocksClose_1920x1080_50_10bit_422.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/FlyingGraphics_444.cfg 0000664 0000000 0000000 00000001221 14420260131 0021355 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_flyingGraphics_1920x1080_60_8bit_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/FlyingGraphics_RGB.cfg 0000664 0000000 0000000 00000001762 14420260131 0021466 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_flyingGraphics_1920x1080_60_8bit_rgb.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/FoodMarket4.cfg 0000664 0000000 0000000 00000001217 14420260131 0020175 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : FoodMarket4_3840x2160_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence/FourPeople.cfg 0000664 0000000 0000000 00000001176 14420260131 0020142 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : FourPeople_1280x720_60.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4
HM-HM-18.0/cfg/per-sequence/FruitStall_RGB_16bit.cfg 0000664 0000000 0000000 00000001754 14420260131 0021654 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : FruitStall_1920x1080_24_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Head_400_16bit.cfg 0000664 0000000 0000000 00000001204 14420260131 0020303 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : AX_Head_1240x960_16bit_400.yuv
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 400 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1240 # Input frame width
SourceHeight : 960 # Input frame height
FramesToBeEncoded : 496 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/InToTree_RGB_16bit.cfg 0000664 0000000 0000000 00000001752 14420260131 0021252 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : InToTree_1920x1080_50_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Johnny.cfg 0000664 0000000 0000000 00000001172 14420260131 0017323 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Johnny_1280x720_60.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4
HM-HM-18.0/cfg/per-sequence/Kimono.cfg 0000664 0000000 0000000 00000001174 14420260131 0017314 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Kimono1_1920x1080_24.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
Level : 4
HM-HM-18.0/cfg/per-sequence/Kimono_422_10bit.cfg 0000664 0000000 0000000 00000001210 14420260131 0020671 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Kimono1_1920x1080_24_10bit_422.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Kimono_444_10bit.cfg 0000664 0000000 0000000 00000001210 14420260131 0020675 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Kimono1_1920x1080_24_10bit_444.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Kimono_RGB_10bit+2MSB.cfg 0000664 0000000 0000000 00000002071 14420260131 0021501 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Kimono1_1920x1080_24_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
MSBExtendedBitDepth : 12 # bit depth after addition of MSBs
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Kimono_RGB_10bit+4MSB.cfg 0000664 0000000 0000000 00000002071 14420260131 0021503 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Kimono1_1920x1080_24_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
MSBExtendedBitDepth : 14 # bit depth after addition of MSBs
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Kimono_RGB_10bit+6MSB.cfg 0000664 0000000 0000000 00000002071 14420260131 0021505 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Kimono1_1920x1080_24_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
MSBExtendedBitDepth : 16 # bit depth after addition of MSBs
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Kimono_RGB_10bit.cfg 0000664 0000000 0000000 00000001752 14420260131 0021007 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Kimono1_1920x1080_24_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/KristenAndSara.cfg 0000664 0000000 0000000 00000001202 14420260131 0020721 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : KristenAndSara_1280x720_60.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4
HM-HM-18.0/cfg/per-sequence/LongRunShort_400_12bit.cfg 0000664 0000000 0000000 00000001213 14420260131 0022042 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : CT_LongrunShort_512x512_12bit_400.yuv
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 400 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 512 # Input frame width
SourceHeight : 512 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Map_444.cfg 0000664 0000000 0000000 00000001205 14420260131 0017163 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_map_1280x720_60_8bit_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Map_GBR.cfg 0000664 0000000 0000000 00000001201 14420260131 0017256 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_map_1280x720_60_8bit.gbr
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Map_RGB.cfg 0000664 0000000 0000000 00000001742 14420260131 0017270 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_map_1280x720_60_8bit.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/MarketPlace.cfg 0000664 0000000 0000000 00000001215 14420260131 0020244 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : MarketPlace_1920x1080_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4
HM-HM-18.0/cfg/per-sequence/MissionControl2_444.cfg 0000664 0000000 0000000 00000001221 14420260131 0021510 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : MissionControlClip2_2560x1440_60p_8b444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 120 # Number of frames to be skipped in input
SourceWidth : 2560 # Input frame width
SourceHeight : 1440 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/MissionControl2_RGB.cfg 0000664 0000000 0000000 00000001762 14420260131 0021621 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : MissionControlClip2_2560x1440_60p_8b444.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 120 # Number of frames to be skipped in input
SourceWidth : 2560 # Input frame width
SourceHeight : 1440 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/MissionControl3_444.cfg 0000664 0000000 0000000 00000001221 14420260131 0021511 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : MissionControlClip3_1920x1080_60p_8b444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/MissionControl3_RGB.cfg 0000664 0000000 0000000 00000001762 14420260131 0021622 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : MissionControlClip3_1920x1080_60p_8b444.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/NebutaFestival_10bit.cfg 0000664 0000000 0000000 00000001262 14420260131 0021771 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : NebutaFestival_2560x1600_60_10bit_crop.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 2560 # Input frame width
SourceHeight : 1600 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
LastValidFrame : 299
Level : 5
HM-HM-18.0/cfg/per-sequence/OldTownCross_RGB_10bit.cfg 0000664 0000000 0000000 00000001757 14420260131 0022160 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : OldTownCross_1920x1080_50_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/OldTownCross_RGB_16bit.cfg 0000664 0000000 0000000 00000001756 14420260131 0022165 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : OldTownCross_1920x1080_50_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/PCBLayout_444.cfg 0000664 0000000 0000000 00000001224 14420260131 0020251 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_pcb_layout_1920x1080_20_8bit_200_444_r1.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/PCBLayout_GBR.cfg 0000664 0000000 0000000 00000001221 14420260131 0020345 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_pcb_layout_1920x1080_20_8bit_200_gbr.gbr
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/PCBLayout_RGB.cfg 0000664 0000000 0000000 00000001762 14420260131 0020357 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_pcb_layout_1920x1080_20_8bit_200_rgb.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/ParkJoy_RGB_16bit.cfg 0000664 0000000 0000000 00000001751 14420260131 0021137 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : ParkJoy_1920x1080_50_16bit_444.rgb
InputBitDepth : 16 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/ParkRunning3.cfg 0000664 0000000 0000000 00000001220 14420260131 0020371 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : ParkRunning3_3840x2160_50fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence/ParkScene.cfg 0000664 0000000 0000000 00000001176 14420260131 0017735 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : ParkScene_1920x1080_24.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
Level : 4
HM-HM-18.0/cfg/per-sequence/ParkScene_RGB_10bit.cfg 0000664 0000000 0000000 00000001754 14420260131 0021430 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : ParkScene_1920x1080_24_10bit_444.rgb
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 24 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 240 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/PartyScene.cfg 0000664 0000000 0000000 00000001243 14420260131 0020132 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : PartyScene_832x480_50.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 832 # Input frame width
SourceHeight : 480 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
LastValidFrame : 499
Level : 3.1
HM-HM-18.0/cfg/per-sequence/PeopleOnStreet.cfg 0000664 0000000 0000000 00000001210 14420260131 0020757 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : PeopleOnStreet_2560x1600_30_crop.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 2560 # Input frame width
SourceHeight : 1600 # Input frame height
FramesToBeEncoded : 150 # Number of frames to be coded
Level : 5
HM-HM-18.0/cfg/per-sequence/Programming_444.cfg 0000664 0000000 0000000 00000001215 14420260131 0020731 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_programming_1280x720_60_8bit_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Programming_GBR.cfg 0000664 0000000 0000000 00000001211 14420260131 0021024 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_programming_1280x720_60_8bit.gbr
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Programming_RGB.cfg 0000664 0000000 0000000 00000001752 14420260131 0021036 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_programming_1280x720_60_8bit.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/RaceHorses.cfg 0000664 0000000 0000000 00000001175 14420260131 0020117 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : RaceHorses_416x240_30.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 416 # Input frame width
SourceHeight : 240 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 2
HM-HM-18.0/cfg/per-sequence/RaceHorsesC.cfg 0000664 0000000 0000000 00000001175 14420260131 0020222 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : RaceHorses_832x480_30.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 832 # Input frame width
SourceHeight : 480 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 3
HM-HM-18.0/cfg/per-sequence/RitualDance.cfg 0000664 0000000 0000000 00000001215 14420260131 0020247 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : RitualDance_1920x1080_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4
HM-HM-18.0/cfg/per-sequence/Robot_444.cfg 0000664 0000000 0000000 00000001213 14420260131 0017532 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_robot_1280x720_30_8bit_300_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Robot_RGB.cfg 0000664 0000000 0000000 00000001750 14420260131 0017637 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_robot_1280x720_30_8bit_300.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Rollercoaster2.cfg 0000664 0000000 0000000 00000001222 14420260131 0020754 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : RollerCoaster2_3840x2160_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence/Seeking_422_10bit.cfg 0000664 0000000 0000000 00000001210 14420260131 0021022 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Seeking_1920x1080_50_10bit_422.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 50 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/SlideEditing.cfg 0000664 0000000 0000000 00000001202 14420260131 0020414 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : SlideEditing_1280x720_30.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 3.1
HM-HM-18.0/cfg/per-sequence/SlideShow.cfg 0000664 0000000 0000000 00000001177 14420260131 0017764 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : SlideShow_1280x720_20.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 3.1
HM-HM-18.0/cfg/per-sequence/SlideShow_444.cfg 0000664 0000000 0000000 00000001217 14420260131 0020352 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_SlideShow_1280x720_20_8bit_500_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/SlideShow_RGB.cfg 0000664 0000000 0000000 00000001754 14420260131 0020457 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_SlideShow_1280x720_20_8bit_500.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/SocialNetworkMap_444.cfg 0000664 0000000 0000000 00000001267 14420260131 0021700 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_socialNetworkMap_1920x1080_60_8bit_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
LastValidFrame : 599
Level : 6.2
HM-HM-18.0/cfg/per-sequence/SocialNetworkMap_RGB.cfg 0000664 0000000 0000000 00000002030 14420260131 0021764 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_socialNetworkMap_1920x1080_60_8bit_rgb.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
LastValidFrame : 599
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/SteamLocomotiveTrain_10bit.cfg 0000664 0000000 0000000 00000001270 14420260131 0023164 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : SteamLocomotiveTrain_2560x1600_60_10bit_crop.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 2560 # Input frame width
SourceHeight : 1600 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
LastValidFrame : 299
Level : 5
HM-HM-18.0/cfg/per-sequence/Tango2.cfg 0000664 0000000 0000000 00000001212 14420260131 0017203 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Tango2_3840x2160_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 294 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence/ToddlerFountain2.cfg 0000664 0000000 0000000 00000001224 14420260131 0021237 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : ToddlerFountain2_3840x2160_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.1
HM-HM-18.0/cfg/per-sequence/Traffic.cfg 0000664 0000000 0000000 00000001201 14420260131 0017425 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Traffic_2560x1600_30_crop.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 2560 # Input frame width
SourceHeight : 1600 # Input frame height
FramesToBeEncoded : 150 # Number of frames to be coded
Level : 5
HM-HM-18.0/cfg/per-sequence/TrafficFlow.cfg 0000664 0000000 0000000 00000001222 14420260131 0020260 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : TrafficFlow_3840x2160_30fps_10bit_420_jvet.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2160 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5
HM-HM-18.0/cfg/per-sequence/Traffic_422_10bit.cfg 0000664 0000000 0000000 00000001215 14420260131 0021020 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Traffic_2560x1600_30_10bit_422_crop.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 422 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 2560 # Input frame width
SourceHeight : 1600 # Input frame height
FramesToBeEncoded : 150 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Traffic_444_10bit.cfg 0000664 0000000 0000000 00000001215 14420260131 0021024 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Traffic_2560x1600_30_10bit_444_crop.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 2560 # Input frame width
SourceHeight : 1600 # Input frame height
FramesToBeEncoded : 150 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Traffic_RGB_12bit.cfg 0000664 0000000 0000000 00000001752 14420260131 0021133 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : Traffic_2560x1600_30_12bit_444.rgb
InputBitDepth : 12 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 2560 # Input frame width
SourceHeight : 1600 # Input frame height
FramesToBeEncoded : 150 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/TwistTunnel_444.cfg 0000664 0000000 0000000 00000001230 14420260131 0020744 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_cg_twist_tunnel_1280x720_30_8bit_300_444_r1.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/TwistTunnel_GBR.cfg 0000664 0000000 0000000 00000001221 14420260131 0021043 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_cg_twist_tunnel_1280x720_30_8bit_gbr.gbr
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/TwistTunnel_RGB.cfg 0000664 0000000 0000000 00000001762 14420260131 0021055 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_cg_twist_tunnel_1280x720_30_8bit_rgb.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/VenueVu_444_10bit.cfg 0000664 0000000 0000000 00000001210 14420260131 0021036 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : VenueVu_1920x1080_30_10bit_444.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/VenueVu_GBR.cfg 0000664 0000000 0000000 00000001213 14420260131 0020141 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : VenueVu_1920x1080_30_8bit_444_gbr.gbr
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/VenueVu_RGB.cfg 0000664 0000000 0000000 00000001751 14420260131 0020150 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : VenueVu_1920x1080_30_8bit_444.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/VideoConferencingDocSharing_444.cfg 0000664 0000000 0000000 00000001247 14420260131 0024005 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_video_conferencing_doc_sharing_1280x720_30_8bit_300_444_r1.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/VideoConferencingDocSharing_GBR.cfg 0000664 0000000 0000000 00000001244 14420260131 0024101 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_video_conferencing_doc_sharing_1280x720_30_8bit_300_gbr.gbr
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/VideoConferencingDocSharing_RGB.cfg 0000664 0000000 0000000 00000002005 14420260131 0024075 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_video_conferencing_doc_sharing_1280x720_30_8bit_300_rgb.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Vidyo1.cfg 0000664 0000000 0000000 00000001172 14420260131 0017231 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : vidyo1_1280x720_60.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4
HM-HM-18.0/cfg/per-sequence/Vidyo3.cfg 0000664 0000000 0000000 00000001172 14420260131 0017233 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : vidyo3_1280x720_60.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4
HM-HM-18.0/cfg/per-sequence/Vidyo4.cfg 0000664 0000000 0000000 00000001172 14420260131 0017234 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : vidyo4_1280x720_60.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 4
HM-HM-18.0/cfg/per-sequence/Viking_444.cfg 0000664 0000000 0000000 00000001214 14420260131 0017675 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_viking_1280x720_30_8bit_300_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Viking_RGB.cfg 0000664 0000000 0000000 00000001751 14420260131 0020002 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_viking_1280x720_30_8bit_300.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/WebBrowsing_444.cfg 0000664 0000000 0000000 00000001225 14420260131 0020700 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_web_browsing_1280x720_30_8bit_300_444_r1.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/WebBrowsing_GBR.cfg 0000664 0000000 0000000 00000001222 14420260131 0020774 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_web_browsing_1280x720_30_8bit_300_gbr.gbr
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/WebBrowsing_RGB.cfg 0000664 0000000 0000000 00000001763 14420260131 0021006 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_web_browsing_1280x720_30_8bit_300_rgb.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Web_444.cfg 0000664 0000000 0000000 00000001211 14420260131 0017160 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_Web_1280x720_10_8bit_500_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 10 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/Web_RGB.cfg 0000664 0000000 0000000 00000001746 14420260131 0017274 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_Web_1280x720_10_8bit_500.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 10 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 500 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/WordEditing_444.cfg 0000664 0000000 0000000 00000001215 14420260131 0020666 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_wordEditing_1280x720_60_8bit_444.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/WordEditing_GBR.cfg 0000664 0000000 0000000 00000001211 14420260131 0020761 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_wordEditing_1280x720_60_8bit.gbr
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/WordEditing_RGB.cfg 0000664 0000000 0000000 00000001752 14420260131 0020773 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_wordEditing_1280x720_60_8bit.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1280 # Input frame width
SourceHeight : 720 # Input frame height
FramesToBeEncoded : 600 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/per-sequence/ppt_doc_xls_444.cfg 0000664 0000000 0000000 00000001225 14420260131 0020766 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_ppt_doc_xls_1920x1080_20_8bit_200_444_r1.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/ppt_doc_xls_GBR.cfg 0000664 0000000 0000000 00000001222 14420260131 0021062 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_ppt_doc_xls_1920x1080_20_8bit_200_gbr.gbr
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
Level : 6.2
HM-HM-18.0/cfg/per-sequence/ppt_doc_xls_RGB.cfg 0000664 0000000 0000000 00000001763 14420260131 0021074 0 ustar 00root root 0000000 0000000 #======== File I/O ===============
InputFile : sc_ppt_doc_xls_1920x1080_20_8bit_200_rgb.rgb
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 444 # Ratio of luminance to chrominance samples
FrameRate : 20 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 1920 # Input frame width
SourceHeight : 1080 # Input frame height
FramesToBeEncoded : 200 # Number of frames to be coded
InputColourSpaceConvert : RGBtoGBR # Non-normative colour space conversion to apply to input video
SNRInternalColourSpace : 1 # Evaluate SNRs in GBR order
OutputInternalColourSpace : 0 # Convert recon output back to RGB order. Use --OutputColourSpaceConvert GBRtoRGB on decoder to produce a matching output file.
Level : 6.2
HM-HM-18.0/cfg/sei/ 0000775 0000000 0000000 00000000000 14420260131 0013560 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cfg/sei/JCTVC-AD0021(JVET-T0056).cfg 0000664 0000000 0000000 00000000312 14420260131 0017221 0 ustar 00root root 0000000 0000000 # Controls if SEI Manifest SEI messages | enabled
SEISEIManifestEnabled: 1
# Controls if SEI Prefix Indication SEI messages | enabled
SEISEIPrefixIndicationEnabled: 1
HM-HM-18.0/cfg/sei/ambient_viewing_environment.cfg 0000664 0000000 0000000 00000000405 14420260131 0022033 0 ustar 00root root 0000000 0000000 #======== Ambient viewing environment SEI message =====================
SEIAVEEnabled : 1
SEIAVEAmbientIlluminance : 100000
SEIAVEAmbientLightX : 15635
SEIAVEAmbientLightY : 16450
HM-HM-18.0/cfg/sei/annotated_regions/ 0000775 0000000 0000000 00000000000 14420260131 0017263 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cfg/sei/annotated_regions/anno_reg_0.txt 0000664 0000000 0000000 00000002345 14420260131 0022037 0 ustar 00root root 0000000 0000000 SEIArCancelFlag: 0
SEIArNotOptForViewingFlag: 0
SEIArTrueMotionFlag: 0
SEIArOccludedObjsFlag: 0
SEIArPartialObjsFlagPresentFlag: 0
SEIArObjLabelPresentFlag: 1
SEIArObjConfInfoPresentFlag: 1
SEIArObjDetConfLength: 7
SEIArObjLabelLangPresentFlag: 1
SEIArLabelLanguage: ENGLISH
SEIArNumLabelUpdates: 2
SEIArLabelIdc[c]: 0
SEIArLabelCancelFlag[c]: 0
SEIArLabel[c]: car
SEIArLabelIdc[c]: 1
SEIArLabelCancelFlag[c]: 0
SEIArLabel[c]: person
SEIArNumObjUpdates: 3
SEIArObjIdx[c]: 0
SEIArObjCancelFlag[c]: 0
SEIArObjLabelUpdateFlag[c]: 1
SEIArObjectLabelIdc[c]: 0
SEIArBoundBoxUpdateFlag[c]: 1
SEIArBoundBoxCancelFlag[c]: 0
SEIArObjTop[c]: 10
SEIArObjLeft[c]: 10
SEIArObjWidth[c]: 50
SEIArObjHeight[c]: 50
SEIArObjDetConf[c]: 90
SEIArObjIdx[c]: 1
SEIArObjCancelFlag[c]: 0
SEIArObjLabelUpdateFlag[c]: 1
SEIArObjectLabelIdc[c]: 0
SEIArBoundBoxUpdateFlag[c]: 1
SEIArBoundBoxCancelFlag[c]: 0
SEIArObjTop[c]: 100
SEIArObjLeft[c]: 100
SEIArObjWidth[c]: 50
SEIArObjHeight[c]: 50
SEIArObjDetConf[c]: 90
SEIArObjIdx[c]: 2
SEIArObjCancelFlag[c]: 0
SEIArObjLabelUpdateFlag[c]: 1
SEIArObjectLabelIdc[c]: 1
SEIArBoundBoxUpdateFlag[c]: 1
SEIArBoundBoxCancelFlag[c]: 0
SEIArObjTop[c]: 200
SEIArObjLeft[c]: 200
SEIArObjWidth[c]: 80
SEIArObjHeight[c]: 100
SEIArObjDetConf[c]: 85
HM-HM-18.0/cfg/sei/annotated_regions/anno_reg_1.txt 0000664 0000000 0000000 00000001472 14420260131 0022040 0 ustar 00root root 0000000 0000000 SEIArCancelFlag: 0
SEIArNotOptForViewingFlag: 0
SEIArTrueMotionFlag: 0
SEIArOccludedObjsFlag: 0
SEIArPartialObjsFlagPresentFlag: 0
SEIArObjLabelPresentFlag: 1
SEIArObjConfInfoPresentFlag: 1
SEIArObjDetConfLength: 7
SEIArObjLabelLangPresentFlag: 1
SEIArLabelLanguage: ENGLISH
SEIArNumLabelUpdates: 0
SEIArNumObjUpdates: 2
SEIArObjIdx[c]: 0
SEIArObjCancelFlag[c]: 0
SEIArObjLabelUpdateFlag[c]: 0
SEIArBoundBoxUpdateFlag[c]: 1
SEIArBoundBoxCancelFlag[c]: 0
SEIArObjTop[c]: 20
SEIArObjLeft[c]: 20
SEIArObjWidth[c]: 50
SEIArObjHeight[c]: 50
SEIArObjDetConf[c]: 90
SEIArObjIdx[c]: 3
SEIArObjCancelFlag[c]: 0
SEIArObjLabelUpdateFlag[c]: 1
SEIArObjectLabelIdc[c]: 0
SEIArBoundBoxUpdateFlag[c]: 1
SEIArBoundBoxCancelFlag[c]: 0
SEIArObjTop[c]: 300
SEIArObjLeft[c]: 300
SEIArObjWidth[c]: 80
SEIArObjHeight[c]: 100
SEIArObjDetConf[c]: 90
HM-HM-18.0/cfg/sei/annotated_regions/anno_reg_2.txt 0000664 0000000 0000000 00000002156 14420260131 0022041 0 ustar 00root root 0000000 0000000 SEIArCancelFlag: 0
SEIArNotOptForViewingFlag: 0
SEIArTrueMotionFlag: 0
SEIArOccludedObjsFlag: 0
SEIArPartialObjsFlagPresentFlag: 0
SEIArObjLabelPresentFlag: 1
SEIArObjConfInfoPresentFlag: 1
SEIArObjDetConfLength: 7
SEIArObjLabelLangPresentFlag: 1
SEIArLabelLanguage: ENGLISH
SEIArNumLabelUpdates: 1
SEIArLabelIdc[c]: 2
SEIArLabelCancelFlag[c]: 0
SEIArLabel[c]: dog
SEIArNumObjUpdates: 3
SEIArObjIdx[c]: 1
SEIArObjCancelFlag[c]: 0
SEIArObjLabelUpdateFlag[c]: 0
SEIArBoundBoxUpdateFlag[c]: 1
SEIArBoundBoxCancelFlag[c]: 0
SEIArObjTop[c]: 150
SEIArObjLeft[c]: 150
SEIArObjWidth[c]: 50
SEIArObjHeight[c]: 50
SEIArObjDetConf[c]: 90
SEIArObjIdx[c]: 2
SEIArObjCancelFlag[c]: 0
SEIArObjLabelUpdateFlag[c]: 0
SEIArBoundBoxUpdateFlag[c]: 1
SEIArBoundBoxCancelFlag[c]: 0
SEIArObjTop[c]: 220
SEIArObjLeft[c]: 220
SEIArObjWidth[c]: 80
SEIArObjHeight[c]: 100
SEIArObjDetConf[c]: 85
SEIArObjIdx[c]: 4
SEIArObjCancelFlag[c]: 0
SEIArObjLabelUpdateFlag[c]: 1
SEIArObjectLabelIdc[c]: 2
SEIArBoundBoxUpdateFlag[c]: 1
SEIArBoundBoxCancelFlag[c]: 0
SEIArObjTop[c]: 400
SEIArObjLeft[c]: 400
SEIArObjWidth[c]: 30
SEIArObjHeight[c]: 60
SEIArObjDetConf[c]: 25
HM-HM-18.0/cfg/sei/annotated_regions/anno_reg_3.txt 0000664 0000000 0000000 00000001211 14420260131 0022031 0 ustar 00root root 0000000 0000000 SEIArCancelFlag: 0
SEIArNotOptForViewingFlag: 0
SEIArTrueMotionFlag: 0
SEIArOccludedObjsFlag: 0
SEIArPartialObjsFlagPresentFlag: 0
SEIArObjLabelPresentFlag: 1
SEIArObjConfInfoPresentFlag: 1
SEIArObjDetConfLength: 7
SEIArObjLabelLangPresentFlag: 1
SEIArLabelLanguage: ENGLISH
SEIArNumLabelUpdates: 1
SEIArLabelIdc[c]: 2
SEIArLabelCancelFlag[c]: 1
SEIArNumObjUpdates: 2
SEIArObjIdx[c]: 0
SEIArObjCancelFlag[c]: 0
SEIArObjLabelUpdateFlag[c]: 0
SEIArBoundBoxUpdateFlag[c]: 1
SEIArBoundBoxCancelFlag[c]: 0
SEIArObjTop[c]: 30
SEIArObjLeft[c]: 30
SEIArObjWidth[c]: 50
SEIArObjHeight[c]: 50
SEIArObjDetConf[c]: 90
SEIArObjIdx[c]: 4
SEIArObjCancelFlag[c]: 1
HM-HM-18.0/cfg/sei/annotated_regions/anno_reg_4.txt 0000664 0000000 0000000 00000001134 14420260131 0022036 0 ustar 00root root 0000000 0000000 SEIArCancelFlag: 0
SEIArNotOptForViewingFlag: 0
SEIArTrueMotionFlag: 0
SEIArOccludedObjsFlag: 0
SEIArPartialObjsFlagPresentFlag: 0
SEIArObjLabelPresentFlag: 1
SEIArObjConfInfoPresentFlag: 1
SEIArObjDetConfLength: 7
SEIArObjLabelLangPresentFlag: 1
SEIArLabelLanguage: ENGLISH
SEIArNumLabelUpdates: 0
SEIArNumObjUpdates: 2
SEIArObjIdx[c]: 1
SEIArObjCancelFlag[c]: 0
SEIArObjLabelUpdateFlag[c]: 0
SEIArBoundBoxUpdateFlag[c]: 1
SEIArBoundBoxCancelFlag[c]: 0
SEIArObjTop[c]: 180
SEIArObjLeft[c]: 180
SEIArObjWidth[c]: 50
SEIArObjHeight[c]: 50
SEIArObjDetConf[c]: 90
SEIArObjIdx[c]: 3
SEIArObjCancelFlag[c]: 1
HM-HM-18.0/cfg/sei/content_colour_volume.cfg 0000664 0000000 0000000 00000001441 14420260131 0020665 0 ustar 00root root 0000000 0000000 #======== Content Colour Volume SEI message =====================
SEICCVEnabled : 1
SEICCVCancelFlag : 0
SEICCVPersistenceFlag : 1
SEICCVPrimariesPresent : 1
m_ccvSEIPrimariesX0 : 0.300
m_ccvSEIPrimariesY0 : 0.600
m_ccvSEIPrimariesX1 : 0.150
m_ccvSEIPrimariesY1 : 0.060
m_ccvSEIPrimariesX2 : 0.640
m_ccvSEIPrimariesY2 : 0.330
SEICCVMinLuminanceValuePresent : 1
SEICCVMinLuminanceValue : 0.0
SEICCVMaxLuminanceValuePresent : 1
SEICCVMaxLuminanceValue : 0.1
SEICCVAvgLuminanceValuePresent : 1
SEICCVAvgLuminanceValue : 0.01
HM-HM-18.0/cfg/sei/content_light_level.cfg 0000664 0000000 0000000 00000000307 14420260131 0020271 0 ustar 00root root 0000000 0000000 #======== Content Light Level SEI message =====================
SEICLLEnabled : 1
SEICLLMaxContentLightLevel : 4000
SEICLLMaxPicAvgLightLevel : 0
HM-HM-18.0/cfg/sei/equirectangular.cfg 0000664 0000000 0000000 00000000600 14420260131 0017430 0 ustar 00root root 0000000 0000000 #======== Equirectangular Projection SEI message =====================
SEIErpEnabled : 1
SEIErpCancelFlag : 0
SEIErpPersistenceFlag : 1
SEIErpGuardBandFlag : 1
SEIErpGuardBandType : 0
SEIErpLeftGuardBandWidth : 254
SEIErpRightGuardBandWidth : 254
HM-HM-18.0/cfg/sei/film_grain_characteristics_analysis.cfg 0000664 0000000 0000000 00000001051 14420260131 0023503 0 ustar 00root root 0000000 0000000 #======== Film grain characteristics SEI message =====================
SEIFGCEnabled : 1
SEIFGCAnalysisEnabled : 1
SEIFGCCancelFlag : 0
SEIFGCPersistenceFlag : 1
SEIFGCPerPictureSEI : 0
SEIFGCModelID : 0
SEIFGCSepColourDescPresentFlag : 0
SEIFGCBlendingModeID : 0
SEIFGCCompModelPresentComp0 : 1
SEIFGCCompModelPresentComp1 : 0
SEIFGCCompModelPresentComp2 : 0 HM-HM-18.0/cfg/sei/film_grain_characterstics.cfg 0000664 0000000 0000000 00000006634 14420260131 0021443 0 ustar 00root root 0000000 0000000 #======== Film grain characteristics SEI message =====================
SEIFGCEnabled : 1 # enable to use FGC SEI message.
SEIFGCAnalysisEnabled : 0 # enable film grain analysis to estimate grain parameters.
SEIFGCCancelFlag : 0 # for SMPTE-RDD5: the value must be 0
SEIFGCPersistenceFlag : 1 # for SMPTE-RDD5: the value must be 0; When FGC SEI frequency is once per I-period (SEIFGCPerPictureSEI is 0), than SEIFGCPersistenceFlag 1
SEIFGCPerPictureSEI : 0 # for SMPTE-RDD5: the value must be 1 (0: FGC SEI is inserted once per I-period; 1: FGC SEI is inserted once per picture)
SEIFGCModelID : 0 # for SMPTE-RDD5: the value must be 0 (0: frequency filtering; 1: auto-regression; 2-3 are reserved)
SEIFGCSepColourDescPresentFlag : 0 # for SMPTE-RDD5: the value must be 0 (if not 0, need to specify separate colour description (not implemented in current encoder cmd line))
SEIFGCBlendingModeID : 0 # for SMPTE-RDD5: the value must be 0 (0: additive; 1: multipliciative)
SEIFGCLog2ScaleFactor : 2
SEIFGCCompModelPresentComp0 : 1 # if not 0, need to specify model for comp 0; otherwise default parameters will be used.
SEIFGCCompModelPresentComp1 : 1 # if not 0, need to specify model for comp 1; otherwise default parameters will be used.
SEIFGCCompModelPresentComp2 : 1 # if not 0, need to specify model for comp 2; otherwise default parameters will be used.
SEIFGCNumIntensityIntervalMinus1Comp0 : 0 # Number of intensity intervals minus 1 for comp 0
SEIFGCNumIntensityIntervalMinus1Comp1 : 0 # Number of intensity intervals minus 1 for comp 1
SEIFGCNumIntensityIntervalMinus1Comp2 : 0 # Number of intensity intervals minus 1 for comp 2
SEIFGCNumModelValuesMinus1Comp0 : 2 # Number of model values minus 1 for comp 0
SEIFGCNumModelValuesMinus1Comp1 : 2 # Number of model values minus 1 for comp 1
SEIFGCNumModelValuesMinus1Comp2 : 2 # Number of model values minus 1 for comp 2
SEIFGCIntensityIntervalLowerBoundComp0 : 10 # Lower bound of intensity interval for comp 0 (for SMPTE-RDD5, non-overlapping interval)
SEIFGCIntensityIntervalLowerBoundComp1 : 60 # Lower bound of intensity interval for comp 1 (for SMPTE-RDD5, non-overlapping interval)
SEIFGCIntensityIntervalLowerBoundComp2 : 60 # Lower bound of intensity interval for comp 2 (for SMPTE-RDD5, non-overlapping interval)
SEIFGCIntensityIntervalUpperBoundComp0 : 250 # Upper bound of intensity interval for comp 0 (for SMPTE-RDD5, non-overlapping interval)
SEIFGCIntensityIntervalUpperBoundComp1 : 200 # Upper bound of intensity interval for comp 1 (for SMPTE-RDD5, non-overlapping interval)
SEIFGCIntensityIntervalUpperBoundComp2 : 250 # Upper bound of intensity interval for comp 2 (for SMPTE-RDD5, non-overlapping interval)
SEIFGCCompModelValuesComp0 : 16 8 8 # model values for each intensity interval for comp 0 (sigma, h, v (h,v might be inferred based on number of model value))
SEIFGCCompModelValuesComp1 : 24 12 12 # model values for each intensity interval for comp 1 (sigma, h, v (h,v might be inferred based on number of model value))
SEIFGCCompModelValuesComp2 : 40 3 3 # model values for each intensity interval for comp 2 (sigma, h, v (h,v might be inferred based on number of model value)) HM-HM-18.0/cfg/sei/fisheye_video.cfg 0000664 0000000 0000000 00000001641 14420260131 0017065 0 ustar 00root root 0000000 0000000 #======== Fisheye Video Information SEI message =====================
SEIFviEnabled : 1
SEIFviCancelFlag : 0
SEIFviPersistenceFlag : 1
SEIFviViewDimensionIdc : 0
SEIFviNumActiveAreasMinus1 : 1
SEIFviCircularRegionCentreX : 480 1440
SEIFviCircularRegionCentreY : 480 480
SEIFviRectRegionTop : 0 0
SEIFviRectRegionLeft : 0 960
SEIFviRectRegionWidth : 960 960
SEIFviRectRegionHeight : 960 960
SEIFviCircularRegionRadius : 480 480
SEIFviSceneRadius : 460 450
SEIFviCameraCentreAzimuth : 0 -11796480
SEIFviCameraCentreElevation : 0 0
SEIFviCameraCentreTilt : 0 0
SEIFviCameraCentreOffsetX : 0 0
SEIFviCameraCentreOffsetY : 0 0
SEIFviCameraCenterOffsetZ : 0 0
SEIFviFieldOfView : 180 180
SEIFviNumPolynomialCoeffs : 0 0
HM-HM-18.0/cfg/sei/omni_viewport.cfg 0000664 0000000 0000000 00000001123 14420260131 0017137 0 ustar 00root root 0000000 0000000 #======== Omni Viewport SEI message =====================
SEIOmniViewportEnabled : 1
SEIOmniViewportId : 0
SEIOmniViewportCancelFlag : 0
SEIOmniViewportPersistenceFlag : 1
SEIOmniViewportCntMinus1 : 2
SEIOmniViewportAzimuthCentre : -5898240 5898240 0
SEIOmniViewportElevationCentre : -5898240 5898240 0
SEIOmniViewportTiltCentre : -11796480 5898240 0
SEIOmniViewportHorRange : 2949120 2949120 2949120
SEIOmniViewportVerRange : 2949120 2949120 2949120
HM-HM-18.0/cfg/sei/region_wise_packing.cfg 0000664 0000000 0000000 00000002735 14420260131 0020256 0 ustar 00root root 0000000 0000000 #======== Region-wise packing SEI message =====================
SEIRwpEnabled : 1
SEIRwpCancelFlag : 0
SEIRwpPersistenceFlag : 1
SEIRwpConstituentPictureMatchingFlag : 1
SEIRwpNumPackedRegions : 6
SEIRwpProjPictureWidth : 2048
SEIRwpProjPictureHeight : 1024
SEIRwpPackedPictureWidth : 1536
SEIRwpPackedPictureHeight : 768
SEIRwpTransformType : 0 1 2 3 4 5
SEIRwpGuardBandFlag : 1 1 1 1 1 1
SEIRwpProjRegionWidth : 512 512 512 512 512 512
SEIRwpProjRegionHeight : 128 128 128 128 128 128
SEIRwpProjRegionTop : 256 256 256 256 256 256
SEIRwpProjRegionLeft : 0 256 512 768 1024 1280
SEIRwpPackedRegionWidth : 512 512 512 384 384 384
SEIRwpPackedRegionHeight : 128 128 128 192 192 192
SEIRwpPackedRegionTop : 64 64 64 64 64 64
SEIRwpPackedRegionLeft : 32 32 32 32 32 32
SEIRwpLeftGuardBandWidth : 64 64 64 64 64 64
SEIRwpRightGuardBandWidth : 128 128 128 128 128 128
SEIRwpTopGuardBandHeight : 192 192 192 192 192 192
SEIRwpBottomGuardBandHeight : 255 255 255 255 255 255
SEIRwpGuardBandNotUsedForPredFlag : 1 1 1 1 1 1
SEIRwpGuardBandType : 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 0 0 0 0 1 1 1 1
HM-HM-18.0/cfg/sei/rns/ 0000775 0000000 0000000 00000000000 14420260131 0014362 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cfg/sei/rns/rns_0.txt 0000664 0000000 0000000 00000004205 14420260131 0016145 0 ustar 00root root 0000000 0000000 num_seis: 2
num_regions: 2
0 10 10 10 20
1 20 20 30 40
payloadType: 142
colour_remap_id: 0
colour_remap_cancel_flag: 0
colour_remap_persistence_flag: 1
colour_remap_video_signal_info_present_flag: 1
colour_remap_full_range_flag: 0
colour_remap_primaries: 9
colour_remap_transfer_function: 16
colour_remap_matrix_coefficients: 9
colour_remap_input_bit_depth: 10
colour_remap_bit_depth: 10
pre_lut_num_val_minus1[c]: 1
pre_lut_coded_value[c][i]: 64 pre_lut_target_value[c][i]: 64
pre_lut_coded_value[c][i]: 940 pre_lut_target_value[c][i]: 500
pre_lut_num_val_minus1[c]: 1
pre_lut_coded_value[c][i]: 64 pre_lut_target_value[c][i]: 128
pre_lut_coded_value[c][i]: 960 pre_lut_target_value[c][i]: 896
pre_lut_num_val_minus1[c]: 1
pre_lut_coded_value[c][i]: 64 pre_lut_target_value[c][i]: 192
pre_lut_coded_value[c][i]: 960 pre_lut_target_value[c][i]: 832
colour_remap_matrix_present_flag: 0
post_lut_num_val_minus1[c]: 1
post_lut_coded_value[c][i]: 64 post_lut_target_value[c][i]: 64
post_lut_coded_value[c][i]: 500 post_lut_target_value[c][i]: 940
post_lut_num_val_minus1[c]: 1
post_lut_coded_value[c][i]: 128 post_lut_target_value[c][i]: 64
post_lut_coded_value[c][i]: 896 post_lut_target_value[c][i]: 960
post_lut_num_val_minus1[c]: 1
post_lut_coded_value[c][i]: 192 post_lut_target_value[c][i]: 64
post_lut_coded_value[c][i]: 832 post_lut_target_value[c][i]: 960
num_regions: 2
3 10 10 30 20
1 20 20 30 40
payloadType: 149
SEICCVCancelFlag : 0
SEICCVPersistenceFlag : 1
SEICCVPrimariesPresent : 1
m_ccvSEIPrimariesX0 : 0.300
m_ccvSEIPrimariesY0 : 0.600
m_ccvSEIPrimariesX1 : 0.150
m_ccvSEIPrimariesY1 : 0.060
m_ccvSEIPrimariesX2 : 0.640
m_ccvSEIPrimariesY2 : 0.330
SEICCVMinLuminanceValuePresent : 1
SEICCVMinLuminanceValue : 0.0
SEICCVMaxLuminanceValuePresent : 1
SEICCVMaxLuminanceValue : 0.1
SEICCVAvgLuminanceValuePresent : 1
SEICCVAvgLuminanceValue : 0.01
HM-HM-18.0/cfg/sei/rns/rns_2.txt 0000664 0000000 0000000 00000002042 14420260131 0016144 0 ustar 00root root 0000000 0000000 num_seis: 3
num_regions: 2
0 10 10 10 20
1 20 20 30 40
payloadType: 140
SEIChromaResamplingHorizontalFilterType: 0
SEIChromaResamplingVerticalFilterType: 2
num_regions: 2
4 10 10 30 20
1 20 20 30 40
payloadType: 149
SEICCVCancelFlag : 0
SEICCVPersistenceFlag : 1
SEICCVPrimariesPresent : 1
m_ccvSEIPrimariesX0 : 0.300
m_ccvSEIPrimariesY0 : 0.600
m_ccvSEIPrimariesX1 : 0.150
m_ccvSEIPrimariesY1 : 0.060
m_ccvSEIPrimariesX2 : 0.640
m_ccvSEIPrimariesY2 : 0.330
SEICCVMinLuminanceValuePresent : 1
SEICCVMinLuminanceValue : 0.0
SEICCVMaxLuminanceValuePresent : 1
SEICCVMaxLuminanceValue : 0.1
SEICCVAvgLuminanceValuePresent : 1
SEICCVAvgLuminanceValue : 0.01
num_regions: 2
5 10 10 10 20
6 20 20 30 40
payloadType: 140
SEIChromaResamplingHorizontalFilterType: 2
SEIChromaResamplingVerticalFilterType: 2
HM-HM-18.0/cfg/sei/shutter_interval_info.cfg 0000664 0000000 0000000 00000000746 14420260131 0020665 0 ustar 00root root 0000000 0000000 #======== Shutter Interval Info SEI message =====================
SEIShutterIntervalEnabled : 1
SEISiiTimeScale : 27000000
SEISiiInputNumUnitsInShutterInterval : 1080000 # should have at least one entry. if only one entry, the value is assigned to sii_num_units_in_shutter_interval,
# if multiple entries, the values are set to sub_layer_num_units_in_shutter_interval[ ]
HM-HM-18.0/cfg/sei/shutter_interval_info_fix.cfg 0000664 0000000 0000000 00000000662 14420260131 0021530 0 ustar 00root root 0000000 0000000 #======== Shutter Interval Info SEI message =====================
SEIShutterIntervalEnabled : 1
SEISiiTimeScale : 24000000
SEISiiInputNumUnitsInShutterInterval : 200000 # fixed shutter interval: only one entry, the value is assigned to sii_num_units_in_shutter_interval.
# here is one example with frame rate=120fps, encoder derives the actually value based on frame rate.
HM-HM-18.0/cfg/sei/shutter_interval_info_mul.cfg 0000664 0000000 0000000 00000000770 14420260131 0021537 0 ustar 00root root 0000000 0000000 #======== Shutter Interval Info SEI message =====================
SEIShutterIntervalEnabled : 1
SEISiiTimeScale : 24000000
SEISiiInputNumUnitsInShutterInterval : 400000 400000 400000 400000 200000 # multiple shutter intervals: multiple entries, the values are set to sub_layer_num_units_in_shutter_interval[ ].
# here is one example with frame rate=120fps, encoder derives the actually values based on picture frame rate.
HM-HM-18.0/cfg/sei/sphere_rotation.cfg 0000664 0000000 0000000 00000000533 14420260131 0017447 0 ustar 00root root 0000000 0000000 #======== Sphere Rotation SEI message =====================
SEISphereRotationEnabled : 1
SEISphereRotationCancelFlag : 0
SEISphereRotationPersistenceFlag : 1
SEISphereRotationYaw : -5898240
SEISphereRotationPitch : -5898240
SEISphereRotationRoll : -11796480
HM-HM-18.0/cmake/ 0000775 0000000 0000000 00000000000 14420260131 0013321 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/ 0000775 0000000 0000000 00000000000 14420260131 0015261 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/bin/ 0000775 0000000 0000000 00000000000 14420260131 0016031 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/bin/cmake.py 0000775 0000000 0000000 00000000277 14420260131 0017474 0 ustar 00root root 0000000 0000000 #!/usr/bin/python3
#
# cmake.py
#
import pyhhi.build.common.util
import pyhhi.build.app.cmk
app = pyhhi.build.app.cmk.CMakeLauncherApp()
pyhhi.build.common.util.exec_main_default_try(app)
HM-HM-18.0/cmake/CMakeBuild/bin/cmake_docutil.py 0000775 0000000 0000000 00000000322 14420260131 0021206 0 ustar 00root root 0000000 0000000 #!/usr/bin/python3
#
# cmake_docutil.py
#
import pyhhi.build.app.cmkdocapp
import pyhhi.build.common.util
app = pyhhi.build.app.cmkdocapp.CMakeDocUtilApp()
pyhhi.build.common.util.exec_main_default_try(app)
HM-HM-18.0/cmake/CMakeBuild/bin/cmakebuild_update.py 0000775 0000000 0000000 00000000326 14420260131 0022051 0 ustar 00root root 0000000 0000000 #!/usr/bin/python3
#
# cmakebuild_update.py
#
import pyhhi.build.app.cmbldup
import pyhhi.build.common.util
app = pyhhi.build.app.cmbldup.CMakeBuildUpdateApp()
pyhhi.build.common.util.exec_main_default_try(app)
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/ 0000775 0000000 0000000 00000000000 14420260131 0017152 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/__init__.py 0000775 0000000 0000000 00000000000 14420260131 0021254 0 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/ 0000775 0000000 0000000 00000000000 14420260131 0020251 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/__init__.py 0000775 0000000 0000000 00000000000 14420260131 0022353 0 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/app/ 0000775 0000000 0000000 00000000000 14420260131 0021031 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/app/__init__.py 0000664 0000000 0000000 00000000000 14420260131 0023130 0 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/app/cmbldup.py 0000775 0000000 0000000 00000045502 14420260131 0023042 0 ustar 00root root 0000000 0000000
from __future__ import print_function
import argparse
import logging
import os
import re
import subprocess
import sys
import pyhhi.build.common.util as util
import pyhhi.build.common.ver as ver
import pyhhi.build.vcsutil as vcsutil
from pyhhi.build.common.system import SystemInfo
from pyhhi.build.common.error import InvalidInputParameterError
class CMakeBuildUpdateAppParams(object):
def __init__(self):
self.top_dir = None
self.update_prepare = True
self.cmakebuild_repo = 'git@vigitlab.fe.hhi.de:git/CMakeBuildCore.git'
# A CMakeBuild tag of None means latest tag.
self.cmakebuild_tag = None
class CMakeBuildUpdateApp(object):
def __init__(self):
self._logger = logging.getLogger(__name__)
self._sys_info = SystemInfo()
self._prog_name = os.path.basename(sys.argv[0])
self._prog_name_full = os.path.normpath(os.path.abspath(sys.argv[0]))
self._list_summary = True
self._summary_lines = []
self._git_helper = vcsutil.GitHelper()
self._git_executable = self._git_helper.get_git_executable()
# List of python modules this script depends on.
self._py_mod_list = ['pyhhi.build.app.cmbldup',
'pyhhi.build.vcsutil',
'pyhhi.build.common.cmbldver',
'pyhhi.build.common.error',
'pyhhi.build.common.system',
'pyhhi.build.common.util',
'pyhhi.build.common.ver']
self._usage = """
%(prog)s [options] [top_dir]
%(prog)s updates a CMakeBuild Git subtree embedded inside a Git standard workspace.
The update procedure requires a clean Git working directory. Unfinished work must be
saved somehow; e.g. use git stash .. or anything else.
The optional positional argument allows you to update an existing Git workspace out-of-tree.
"""
self._epilog = """
"""
def __call__(self, argv=None):
if argv is None:
self.main(sys.argv[1:])
else:
self.main(argv)
def main(self, argv):
params = self._parse_command_line(argv)
self.cmakebuild_update(params)
def cmakebuild_update(self, params):
initial_work_dir = os.getcwd()
# (Re)create GitHelper in case the log level has been changed.
self._git_helper = vcsutil.GitHelper()
params = self._check_params(params)
if params.top_dir is None:
params.top_dir = util.get_top_dir()
self._summary_lines = []
if params.update_prepare:
print("{}: preparing CMakeBuild update ...".format(self._prog_name))
cmakebuild_version_current = self._get_current_cmakebuild_version(params.top_dir)
if cmakebuild_version_current is None:
print("{}: no existing CMakeBuild version found.".format(params.top_dir))
if not self._is_workspace_clean(params.top_dir):
return
if params.cmakebuild_tag is None:
cmakebuild_tag = self._git_helper.get_latest_cmakebuild_tag(params.cmakebuild_repo)
if cmakebuild_version_current and (ver.version_compare(cmakebuild_version_current, ver.version_tuple_from_str(cmakebuild_tag)) == 0):
print("{}: CMakeBuild is up to date, nothing to be done.".format(params.top_dir))
return
else:
# Validate CMakeBuild tag
cmakebuild_tags = self._git_helper.get_remote_tags(params.cmakebuild_repo)
if params.cmakebuild_tag not in cmakebuild_tags:
raise InvalidInputParameterError("requested tag {0} does not exists in {1}.".format(params.cmakebuild_tag, params.cmakebuild_repo))
cmakebuild_tag = params.cmakebuild_tag
if cmakebuild_version_current and (ver.version_compare(ver.version_tuple_from_str(cmakebuild_tag), cmakebuild_version_current) <= 0):
print("{}: CMakeBuild is up to date, nothing to be done.".format(params.top_dir))
return
install_dir = os.path.join(params.top_dir, 'build', 'cmakebuild_update')
self._install_self(install_dir)
update_script = os.path.join(install_dir, self._prog_name)
# Prepare execv argument vector to call self with different arguments using the current python executable.
if self._sys_info.is_windows():
child_args = [self._sys_info.get_short_path(self._sys_info.get_python_executable())]
else:
child_args = [self._sys_info.get_python_executable()]
child_args.extend([update_script, '--update'])
if cmakebuild_tag:
child_args.extend(['-t', cmakebuild_tag])
if params.cmakebuild_repo:
child_args.extend(['--cmakebuild-repo', params.cmakebuild_repo])
# Add currrent log option to child_args[] to propagate the current log option to the child process.
log_level = self._logger.getEffectiveLevel()
log_level_str = None
if log_level == logging.DEBUG:
log_level_str = 'debug'
elif log_level == logging.INFO:
log_level_str = 'info'
elif log_level == logging.WARNING:
log_level_str = 'warning'
elif log_level == logging.ERROR:
log_level_str = 'error'
elif log_level == logging.CRITICAL:
log_level_str = 'critical'
if log_level_str is not None:
child_args.append('--log={}'.format(log_level_str))
child_args.append(params.top_dir)
os.chdir(params.top_dir)
if self._sys_info.is_windows():
# Unfortunately, there are issues with os.execv() on Windows and therefore a subprocess call is used instead.
util.subproc_check_call_flushed(child_args)
else:
# execv() is preferred as the child is likely to remove python files just being executed
# by the current python process.
os.execv(child_args[0], child_args)
else:
try:
print("{}: updating CMakeBuild in {} to {}".format(self._prog_name, params.top_dir, params.cmakebuild_tag))
os.chdir(params.top_dir)
if not self._is_workspace_clean():
return
self._append_item_to_summary("Git workspace:", params.top_dir)
if self._list_summary:
cmakebuild_version_current = self._get_current_cmakebuild_version(params.top_dir)
if cmakebuild_version_current is not None:
self._append_item_to_summary("Current CMakeBuild version:", "{}-{:d}".format(ver.version_tuple_to_str(cmakebuild_version_current[:3]), cmakebuild_version_current[-1]))
self._append_item_to_summary("New CMakeBuild version:", params.cmakebuild_tag)
# Inventory of CMakeBuild to remember existing directories to be removed later on.
(git_cmakebuild_dirs, cmakebuild_dirs) = self._get_git_cmakebuild_dirs(params.top_dir)
if params.cmakebuild_tag in git_cmakebuild_dirs:
git_cmakebuild_dirs.remove(params.cmakebuild_tag)
if params.cmakebuild_tag in cmakebuild_dirs:
cmakebuild_dirs.remove(params.cmakebuild_tag)
# print("found existing Git CMakeBuild subdirs:", git_cmakebuild_dirs)
# print("found existing CMakeBuild subdirs:", cmakebuild_dirs)
# Add new CMakeBuild subtree
self._add_cmakebuild_to_git_repo(params.cmakebuild_tag, params.cmakebuild_repo)
# Update .svnimportprops in case is does exist.
svnimportprops_file = os.path.join(params.top_dir, '.svnimportprops')
svnimportprops_modified = self._update_svnimportprops(svnimportprops_file, params.cmakebuild_tag)
for dname in git_cmakebuild_dirs:
git_argv = [self._git_executable, 'rm', '-r', os.path.join('CMakeBuild', dname)]
util.subproc_check_call_flushed(git_argv)
if svnimportprops_modified or git_cmakebuild_dirs:
# Need a git commit if '.svnimportprops' has been updated or git rm -r has been launched.
git_comment = []
if git_cmakebuild_dirs:
git_comment.append("rm -r CMakeBuild/{}".format(','.join(git_cmakebuild_dirs)))
if svnimportprops_modified:
git_comment.append("modifying {}".format('.svnimportprops'))
git_argv = [self._git_executable, 'commit', '-am', '{}: {}'.format(self._prog_name, ', '.join(git_comment))]
util.subproc_check_call_flushed(git_argv)
# Check again to get rid of any python cache files
cmakebuild_dirs.extend(git_cmakebuild_dirs)
for dname in cmakebuild_dirs:
dname_path = os.path.join(params.top_dir, 'CMakeBuild', dname)
if os.path.exists(dname_path):
util.rmtree(dname_path)
print("{}: finished updating CMakeBuild in {} to {}".format(self._prog_name, params.top_dir, params.cmakebuild_tag))
if self._list_summary:
print("\n{0:^80}".format("Summary"))
print("{0:^80}".format("======="))
for line in self._summary_lines:
print(line)
finally:
pass
os.chdir(initial_work_dir)
def _parse_command_line(self, argv):
params = CMakeBuildUpdateAppParams()
parser = argparse.ArgumentParser(usage=self._usage, epilog=self._epilog, formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument("top_dir", action="store", nargs='?', default=None,
help="specifies a Git workspace to work on. By default the scripts installation path will be used to deduce the workspace.")
util.app_args_add_log_level(parser)
parser.add_argument("-t", "--tag", action="store", dest="cmakebuild_tag", metavar="TAG",
help="specifies a CMakeBuild tag to be used. If omitted the latest release tag will be used.")
parser.add_argument("--cmakebuild-repo", action="store", dest="cmakebuild_repo", metavar="REPO", default=params.cmakebuild_repo,
help="specifies an alternative CMakeBuild repository overriding %(default)s." )
parser.add_argument("--update", action="store_true", dest="update", default=False,
help="execute cmakebuild update, internal option reserved for the os.execv() machinery.")
args = parser.parse_args(argv)
# configure the python logger
util.app_configure_logging(args.log_level)
if args.top_dir:
params.top_dir = os.path.normpath(os.path.abspath(args.top_dir))
if args.cmakebuild_tag:
params.cmakebuild_tag = args.cmakebuild_tag
if args.cmakebuild_repo:
params.cmakebuild_repo = args.cmakebuild_repo
if args.update:
params.update_prepare = False
return params
def _check_params(self, params):
params.cmakebuild_repo = self._check_git_url(params.cmakebuild_repo)
if params.top_dir:
if not os.path.exists(params.top_dir):
raise InvalidInputParameterError("Git workspace {} does not exist.".format(params.top_dir))
if not os.path.exists(os.path.join(params.top_dir, '.git')):
raise InvalidInputParameterError("Workspace {} does not seem to be a Git workspace.".format(params.top_dir))
return params
def _check_git_url(self, git_url):
vcs_url = vcsutil.VcsUrl(git_url)
proto = vcs_url.get_protocol()
if proto in ['ssh', 'https']:
# Normalize a remote Git URL to end with .git even if specified without the extension.
res_path = vcs_url.get_resource_path()
if not res_path.endswith('.git'):
vcs_url.set_resource_path("{}.git".format(res_path))
else:
raise InvalidInputParameterError("Git URL {0} is not supported yet.".format(git_url))
# Normalize all URLs.
git_url = str(vcs_url)
self._logger.debug("returning url={0}".format(git_url))
return git_url
def _install_self(self, install_dir):
script_installer = self._create_script_installer()
# print("py_mod_list:", self._py_mod_list)
script_installer.install_script(install_dir, self._prog_name_full, self._py_mod_list)
def _create_script_installer(self):
import pyhhi.build.common.bldtools
script_installer = pyhhi.build.common.bldtools.BuildScriptInstaller(verbose=True)
return script_installer
def _get_current_cmakebuild_version(self, top_dir):
assert os.path.exists(top_dir)
cmakebuild_top_dir = os.path.join(top_dir, 'CMakeBuild')
if not os.path.exists(cmakebuild_top_dir):
return None
re_version_dir = re.compile(r'^\d+[0-9.]+-\d+$')
version_list = []
for fname in os.listdir(cmakebuild_top_dir):
if os.path.isdir(os.path.join(cmakebuild_top_dir, fname)):
if re_version_dir.match(fname) and os.path.exists(os.path.join(cmakebuild_top_dir, fname, 'CMakeBuild', 'bin', 'cmake.py')):
version_list.append(ver.version_tuple_from_str(fname))
if not version_list:
return None
if len(version_list) > 1:
raise InvalidInputParameterError("Workspace {} contains multiple CMakeBuild versions, please update manually.".format(top_dir))
self._logger.debug("found CMakeBuild {} in {}".format(ver.version_tuple_to_str(version_list[0]), top_dir))
return version_list[0]
def _get_git_cmakebuild_dirs(self, top_dir):
assert os.path.exists(top_dir)
cmakebuild_top_dir = os.path.join(top_dir, 'CMakeBuild')
if not os.path.exists(cmakebuild_top_dir):
return []
re_version_dir = re.compile(r'^\d+[0-9.]+-\d+$')
git_cmakebuild_version_dirs = []
cmakebuild_version_dirs = []
for fname in os.listdir(cmakebuild_top_dir):
if os.path.isdir(os.path.join(cmakebuild_top_dir, fname)):
if re_version_dir.match(fname):
git_argv = [self._git_executable, 'ls-files', os.path.join('CMakeBuild', fname)]
retv = subprocess.check_output(git_argv, universal_newlines=True)
retv = retv.lstrip().rstrip()
if retv != '':
git_cmakebuild_version_dirs.append(fname)
else:
cmakebuild_version_dirs.append(fname)
return git_cmakebuild_version_dirs, cmakebuild_version_dirs
def _is_workspace_clean(self, top_dir=None):
if top_dir:
initial_work_dir = os.getcwd()
os.chdir(top_dir)
else:
initial_work_dir = None
top_dir = os.getcwd()
git_argv = [self._git_executable, 'status', '-b', '--porcelain']
retv = subprocess.check_output(git_argv, universal_newlines=True)
retv = retv.lstrip().rstrip()
status_lines = retv.splitlines()
if status_lines[0].startswith('## HEAD (no branch)'):
raise InvalidInputParameterError("Git workspace {} has detached HEAD, not upgradable.".format(top_dir))
if len(status_lines) > 1:
raise InvalidInputParameterError("Git workspace {} is not clean, please check.".format(top_dir))
if initial_work_dir:
os.chdir(initial_work_dir)
return True
def _add_cmakebuild_to_git_repo(self, cmakebuild_tag, cmakebuild_repo):
self._logger.info("using CMakeBuild tag {} as subtree.".format(cmakebuild_tag))
#
# Extra annoying step to convince git subtree the working dir is clean
#
git_argv = [self._git_executable, 'checkout']
self._git_helper.trace_git_command(git_argv)
util.subproc_check_call_flushed(git_argv)
subtree_prefix = "CMakeBuild/{0}".format(cmakebuild_tag)
git_argv = [self._git_executable, 'subtree', 'add', '-P', subtree_prefix, '--squash', '-m', "{0}: creates subtree -P {1} tag={2}".format(self._prog_name, subtree_prefix, cmakebuild_tag), cmakebuild_repo, cmakebuild_tag]
util.subproc_check_call_flushed(git_argv)
def _update_svnimportprops(self, svnimportprops_file, cmakebuild_tag, svnimportprops_file_new=None):
svnimportprops_modified = False
if not os.path.exists(svnimportprops_file):
return svnimportprops_modified
svnprop_file_parser = vcsutil.SvnPropFileParser()
svnprops = svnprop_file_parser.parse_property_file(svnimportprops_file)
if not svnprops.has_property('svn:externals'):
svnimportprops_modified = True
svnprops.add_property('svn:externals', ["/svn/svn_CMakeBuild/tags/{}/CMakeBuild CMakeBuild".format(cmakebuild_tag)])
else:
svnprop_externals = svnprops.get_property('svn:externals')
re_external_cmakebuild = re.compile(r'^/svn/svn_CMakeBuild/tags/([^/]+)/CMakeBuild\s+')
svnprop_externals_new = []
for line in svnprop_externals:
if (line == '') or line.isspace():
continue
self._logger.debug("processing line {}".format(line))
re_match = re_external_cmakebuild.match(line)
if re_match:
cmakebuild_tag_existing = re_match.group(1)
self._logger.debug("{}: found CMakeBuild tag {}".format(svnimportprops_file, cmakebuild_tag_existing))
if cmakebuild_tag_existing != cmakebuild_tag:
svnimportprops_modified = True
svnprop_externals_new.append("/svn/svn_CMakeBuild/tags/{}/CMakeBuild CMakeBuild".format(cmakebuild_tag))
else:
svnprop_externals_new.append(line)
else:
svnprop_externals_new.append(line)
if svnimportprops_modified:
svnprops.update_property('svn:externals', svnprop_externals_new)
if svnimportprops_modified:
self._logger.debug("{}: updating changed svn:externals".format(svnimportprops_file))
if svnimportprops_file_new is None:
svnimportprops_file_new = svnimportprops_file
with open(svnimportprops_file_new, 'w') as f:
svnprops_str = str(svnprops)
f.write(svnprops_str)
return svnimportprops_modified
def _append_item_to_summary(self, item, value):
self._summary_lines.append("{0:<30} {1}".format(item, value))
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/app/cmk.py 0000775 0000000 0000000 00000045050 14420260131 0022164 0 ustar 00root root 0000000 0000000
from __future__ import print_function
import argparse
import logging
import os
import re
import shutil
import sys
import pyhhi.build.common.system as system
import pyhhi.build.common.util as util
import pyhhi.build.common.ver as ver
import pyhhi.build.common.bldtools as bldtools
import pyhhi.build.cmksupp as cmksupp
from pyhhi.build.common.bldtools import BuildScriptInstaller
from pyhhi.build.common.error import InvalidCommandLineArgumentError
class CMakeLauncherApp(object):
def __init__(self):
self._logger = logging.getLogger(__name__)
self._sys_info = system.SystemInfo()
self._cmake_launcher = None
self._dict_generator_choice = {'linux': ['umake', 'ninja'],
'macosx': ['xcode', 'umake', 'ninja'],
'windows': ['vs16', 'vs15', 'vs14', 'vs12', 'vs11', 'vs10', 'umake', 'mgwmake', 'ninja']}
self._top_dir = None
self._cmake_mod_list = ['pyhhi.build.app.cmk',
'pyhhi.build.cmkfnd',
'pyhhi.build.cmksupp',
'pyhhi.build.common.bldtools',
'pyhhi.build.common.cmbldver',
'pyhhi.build.common.error',
'pyhhi.build.common.system',
'pyhhi.build.common.util',
'pyhhi.build.common.ver']
def __call__(self):
self.main(sys.argv[1:])
def main(self, argv):
# self._print_env()
(params, cmake_argv) = self._parse_command_line(argv)
if params.install_dir:
top_dir = util.get_top_dir()
os.chdir(top_dir)
script_dir = util.get_script_dir()
# print("sys.path: ", sys.path)
script_installer = BuildScriptInstaller(verbose=True)
script_installer.install_script(params.install_dir, os.path.join(script_dir, 'cmake.py'), self._cmake_mod_list)
elif params.py_cache_dirs:
for dname in params.py_cache_dirs:
if not os.path.exists(dname):
continue
if not os.path.isdir(dname):
continue
self._remove_pycache(dname)
else:
# Apply additional checks on params.
self._check_params(params)
if self._sys_info.is_linux() or self._sys_info.is_macosx():
self._remove_make_env_vars()
# Delayed construction to get the current log level at construction time of CMakeLauncher.
self._cmake_launcher = cmksupp.CMakeLauncher()
self._cmake_launcher.launch(params, cmake_argv)
def _check_params(self, params):
pass
def _print_env(self):
env_var_list = list(os.environ.keys())
env_var_list.sort()
for env_var in env_var_list:
print(env_var, os.environ[env_var])
# print(env_var)
# if env_var.startswith('MAKE') or (env_var == 'MFLAGS'):
# print(env_var)
# sys.exit(0)
def _remove_make_env_vars(self):
make_env_vars = []
for env_var in os.environ.keys():
if env_var.startswith('MAKE') or (env_var == 'MFLAGS'):
make_env_vars.append(env_var)
for env_var in make_env_vars:
self._logger.debug("deleting environment variable: %s", env_var)
del os.environ[env_var]
def _parse_command_line(self, argv):
_usage = """
%(prog)s [options] [variant=debug,release,relwithdebinfo,minsizerel] [link=static,shared] [toolset=] [address-model=32]
%(prog)s is a script front end to cmake to simplify its usage on Linux,
Windows, MacOSX using cmake's generators "Unix Makefiles", "Ninja", "Xcode" and
"Visual Studio 16 - Visual Studio 10" and its compilers.
arguments:
variant: debug if not specified
link: static if not specified
toolset: default c++ compiler if not specified
examples/windows: msvc-19.1x, msvc-19.0, msvc-18.0, msvc-17.0, msvc-16.0, intel, gcc
examples/linux: gcc-4.9, gcc-5, gcc-6, clang, intel
address-model=32: windows: builds 32 bit binaries instead of 64 bit binaries
"""
_epilog = """
usage examples:
# debug build, create the build tree if it does not exist.
%(prog)s -b
# release build, create the build tree if it does not exist.
%(prog)s -b variant=release
# release build using shared libraries, create the build tree if it does not exist.
%(prog)s -b variant=release link=shared
# create a build tree without building anything
%(prog)s
# create a build tree specifying a cmake cache entry without building anything
%(prog)s -DENABLE_SOMETHING=1
"""
parser = argparse.ArgumentParser(usage=_usage, epilog=_epilog, formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument("--cmake-bin-dir", action="store", dest="cmk_bin_dir",
help="specify a directory to search for CMake overriding the default CMake search path.")
parser.add_argument("-g", "-G", action="store", dest="generator", choices=self._dict_generator_choice[self._sys_info.get_platform()],
help="""specify a cmake generator the script has special support for.
Supported generators: ninja, umake, mgwmake, vs16, vs15, vs14, vs12, vs11, vs10, xcode.
The choices accepted are platform and installation dependent. The environment variable
DEFAULT_CMAKE_GENERATOR may be used to override the default value.""")
parser.add_argument("-D", action="append", dest="cache_entries",
help="specify a cmake cache entry. The option will be ignored if a build tree already exists.")
parser.add_argument("-W", action="append", dest="warning_flags", help="specify a cmake warning flag.")
parser.add_argument("-b", action="store_true", dest="build", default=False,
help="""invokes cmake --build to build the default debug configuration unless overridden by additional arguments.
If a build tree does not exist, it will be created.""")
parser.add_argument("-j", action="store", dest="build_jobs", type=int, nargs='?', default=1,
const=str(self._get_optimal_number_cmake_jobs()),
help="""specify the number of parallel build jobs. If you omit the numeric argument,
cmake --build ... will be invoked with -j%(const)s.""")
parser.add_argument("--target", action="store", dest="build_target",
help="specify a build target overriding the default target.")
parser.add_argument("--clean-first", action="store_true", dest="clean_first", default=False,
help="build target clean first, then build the active target.")
parser.add_argument("--verbosity", action="store", dest="build_verbosity", choices=['cmake', 'quiet', 'minimal', 'normal', 'detailed', 'diagnostic'], default='minimal',
help="""specify (ms)build verbosity level [default: %(default)s].
The choice 'cmake' requires cmake 3.14.x or higher to increase build verbosity for Visual Studio and other generators.""")
util.app_args_add_log_level(parser)
g = parser.add_argument_group("advanced options")
g.add_argument("-i", action="store", dest="install_dir", nargs='?', const=os.path.join(self._sys_info.get_home_dir(native=True), 'bin'),
help="install this script and exit. The default destination directory is %(const)s.")
g.add_argument("--py-cache-clean", action="store", dest="py_cache_dirs", nargs='+',
help="search for Python cache files in one or more directory trees, remove them and exit. This special option is intended "
"for cross-platform Makefiles to clean up the source tree as python cache files are stored next to the source and "
"not in the build tree.")
# -j may be followed by a non-numeric argument which the parser is not able to handle.
if '-j' in argv:
i = argv.index('-j')
# If the next argument is all numeric, attach it directly. In all other cases use the optimal number of parallel jobs.
if i < (len(argv) - 1):
if re.match(r'\d+$', argv[i + 1]):
argv_parsed = argv
else:
# make a copy -> don't want to modify sys.argv.
argv_parsed = argv[:]
argv_parsed[i] = '-j' + str(self._get_optimal_number_cmake_jobs())
else:
# make a copy -> don't want to modify sys.argv.
argv_parsed = argv[:]
argv_parsed[i] = '-j' + str(self._get_optimal_number_cmake_jobs())
else:
argv_parsed = argv
(cmake_py_options, args_left) = parser.parse_known_args(argv_parsed)
# configure the python logger asap
util.app_configure_logging(cmake_py_options.log_level)
launcher_params = cmksupp.CMakeLauncherParams()
cmake_args = []
if cmake_py_options.install_dir:
# print("-i found, install dir", cmake_py_options.install_dir)
if os.path.isabs(cmake_py_options.install_dir):
launcher_params.install_dir = cmake_py_options.install_dir
else:
launcher_params.install_dir = os.path.abspath(cmake_py_options.install_dir)
elif cmake_py_options.py_cache_dirs:
launcher_params.py_cache_dirs = []
for dname in cmake_py_options.py_cache_dirs:
launcher_params.py_cache_dirs.append(os.path.normpath(os.path.abspath(dname)))
self._top_dir = os.getcwd()
if cmake_py_options.install_dir or launcher_params.py_cache_dirs:
return launcher_params, cmake_args
# if args_left:
# print("cmake args", args_left)
# Assign cmake.py options to attributes of CMakeLauncherParams.
launcher_params.cmk_bin_dir = cmake_py_options.cmk_bin_dir
launcher_params.cmk_build = cmake_py_options.build
launcher_params.cmk_build_jobs = cmake_py_options.build_jobs
launcher_params.clean_first = cmake_py_options.clean_first
launcher_params.cmk_build_target = cmake_py_options.build_target
launcher_params.cmk_build_verbosity = cmake_py_options.build_verbosity
launcher_params.cmk_generator_alias = cmake_py_options.generator
if cmake_py_options.cache_entries:
launcher_params.cmk_cache_entries = ['-D' + x for x in cmake_py_options.cache_entries]
if cmake_py_options.warning_flags:
launcher_params.cmk_warning_flags = ['-W' + x for x in cmake_py_options.warning_flags]
re_cmake_py_arg = re.compile(r'(toolset|variant|link|address-model)=(\S+)')
for arg in args_left:
# print("processing argument " + arg)
re_match = re_cmake_py_arg.match(arg)
if re_match:
arg_key = re_match.group(1)
arg_value = re_match.group(2)
if arg_key == 'toolset':
if arg_value.endswith('.cmake'):
# A toolset=.cmake expression is supposed to be a toolchain file to enable
# some kind of cross compilation.
if not os.path.exists(arg_value):
raise InvalidCommandLineArgumentError("toolchain file={} does not exist.".format(arg_value))
launcher_params.toolset_str = os.path.abspath(arg_value)
else:
launcher_params.toolset_str = self._normalize_toolset_spec(arg_value)
elif arg_key == 'variant':
build_configs = arg_value.split(',')
for cfg in build_configs:
if cfg not in ['release', 'debug', 'relwithdebinfo', 'minsizerel']:
raise InvalidCommandLineArgumentError("argument {} is not understood.".format(arg))
launcher_params.build_configs = build_configs
elif arg_key == 'link':
link_variants = arg_value.split(',')
for lnk in link_variants:
if lnk not in ['static', 'shared']:
raise InvalidCommandLineArgumentError("argument {} is not understood.".format(arg))
launcher_params.link_variants = link_variants
elif arg_key == 'address-model':
if arg_value == '32':
launcher_params.target_arch = 'x86'
elif arg_value == '64':
launcher_params.target_arch = 'x86_64'
else:
raise InvalidCommandLineArgumentError("argument {} is not understood.".format(arg))
else:
raise Exception("argument {} is not understood.".format(arg))
continue
if arg == '--':
# Semantics seems to be tricky and I haven't seen a convincing use case yet.
# In configuration mode all unknown arguments are passed verbatim to cmake and in build mode
# all unknown arguments are really build tool arguments and are passed verbatim to the build tool.
raise InvalidCommandLineArgumentError("argument '--' encountered, this is not yet supported, please contact the maintainer.")
# all other arguments are passed on to cmake verbatim.
cmake_args.append(arg)
return launcher_params, cmake_args
def _normalize_toolset_spec(self, toolset_spec):
toolset_spec_norm = toolset_spec
if self._sys_info.is_linux():
if toolset_spec.find('-g++') >= 0:
# x86_64-w64-mingw32-g++-posix -> normalized to x86_64-w64-mingw32-gcc-posix
toolset_spec_norm = toolset_spec.replace('-g++', '-gcc')
if toolset_spec_norm.find('-gcc') >= 0:
# looks like a cross compiler specification which requires a toolchain file matching the toolset spec and the linux system.
toolset_spec_norm = self._find_toolchain_file(toolset_spec_norm)
elif self._sys_info.is_windows():
if toolset_spec.startswith('msvc-'):
msvc_registry = bldtools.MsvcRegistry()
if toolset_spec == 'msvc-19.2x':
if msvc_registry.is_version_installed((14, 2)):
cl_version = msvc_registry.get_compiler_version((14, 2))
toolset_spec_norm = "msvc-{0:d}.{1:d}".format(cl_version[0], cl_version[1])
else:
raise InvalidCommandLineArgumentError("toolset={} not available.".format(toolset_spec))
elif toolset_spec == 'msvc-19.1x':
if msvc_registry.is_version_installed((14, 1)):
cl_version = msvc_registry.get_compiler_version((14, 1))
toolset_spec_norm = "msvc-{0:d}.{1:d}".format(cl_version[0], cl_version[1])
else:
raise InvalidCommandLineArgumentError("toolset={} not available.".format(toolset_spec))
else:
# msvc-19.00 -> normalized to 19.0
re_match = re.match(r'msvc-(\d+)\.(\d+)', toolset_spec)
if re_match:
minor_version = int(re_match.group(2))
toolset_spec_norm = "msvc-{0}.{1:d}".format(re_match.group(1), minor_version)
elif self._sys_info.is_macosx():
pass
else:
# unsupported platform -> contact maintainer
assert False
return toolset_spec_norm
def _find_toolchain_file(self, toolset_spec):
toolchain_file = None
toolchains_dir = self._find_toolchains_dir()
if toolchains_dir is not None:
if self._sys_info.is_linux():
toolchain_file_suffix = '-' + self._sys_info.get_os_distro_short()
if self._sys_info.get_os_distro_short() == 'ubuntu':
os_version_str = ver.ubuntu_version_tuple_to_str(self._sys_info.get_os_version())
else:
os_version_str = self._sys_info.get_os_version()
toolchain_file_suffix += os_version_str.replace('.', '') + '.cmake'
if os.path.exists(os.path.join(toolchains_dir, toolset_spec + toolchain_file_suffix)):
toolchain_file = os.path.join(toolchains_dir, toolset_spec + toolchain_file_suffix)
if toolchain_file is None:
msg = "toolset=" + toolset_spec + " cannot be mapped to a default toolchain file automatically. Please use a toolchain file or "
msg += "contact technical support."
raise Exception(msg)
return toolchain_file
def _find_toolchains_dir(self):
toolchains_dir = os.path.join(util.get_script_dir(), '..', 'cmake', 'toolchains')
if not os.path.exists(toolchains_dir):
self._logger.warning("toolchains dir {} does not exist.".format(toolchains_dir))
return None
toolchains_dir = os.path.normpath(toolchains_dir)
return toolchains_dir
def _get_workspace_folder(self):
assert self._top_dir is not None
return self._top_dir
def _get_optimal_number_cmake_jobs(self):
"""Returns the optimal number of cmake jobs."""
cmake_jobs = self._sys_info.get_number_processors()
if 'CMAKE_MAX_JOBS' in os.environ:
cmake_max_jobs = int(os.environ['CMAKE_MAX_JOBS'], 10)
if cmake_jobs > cmake_max_jobs:
cmake_jobs = cmake_max_jobs
assert cmake_jobs >= 1
return cmake_jobs
def _remove_pycache(self, py_dir_root):
os.chdir(py_dir_root)
re_pyc_file = re.compile(r'.+\.pyc$', re.IGNORECASE)
for root, dirs, files in os.walk(py_dir_root):
if '__pycache__' in dirs:
self._logger.info("rm -rf {0}".format(os.path.join(root,'__pycache__')))
shutil.rmtree(os.path.join(root, '__pycache__'))
dirs.remove('__pycache__')
for fname in files:
if re_pyc_file.match(fname):
self._logger.info("rm {0}".format(os.path.join(root, fname)))
os.remove(os.path.join(root, fname))
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/app/cmkdocapp.py 0000775 0000000 0000000 00000007251 14420260131 0023354 0 ustar 00root root 0000000 0000000
from __future__ import print_function
import argparse
import logging
import os.path
import sys
import pyhhi.build.common.util as util
import pyhhi.build.cmkdoc as cmkdoc
from pyhhi.build.common.error import InvalidCommandLineArgumentError, InvalidInputParameterError
class CMakeDocUtilApp(object):
def __init__(self):
self._logger = logging.getLogger(__name__)
def __call__(self):
self.main(sys.argv[1:])
def main(self, argv):
params = self._parse_command_line(argv)
self.update_cmake_manual_docs(params)
def update_cmake_manual_docs(self, params):
self._check_params(params)
cmkdocutil = cmkdoc.CMakeManualRstUtil(dry_run=params.dry_run)
if params.update_action == 'add':
cmkdocutil.add_extension_modules(params.rst_module_filenm, params.extension_module_names,
output_rst_filenm=params.output_rst_filenm, section_title=params.extension_section_title)
elif params.update_action == 'remove':
cmkdocutil.remove_extension_module_section(params.rst_module_filenm, output_rst_filenm=params.output_rst_filenm, section_title=params.extension_section_title)
elif params.update_action == 'remove_all':
cmkdocutil.remove_all_extension_modules(params.rst_module_filenm, output_rst_filenm=params.output_rst_filenm)
else:
assert False
def _check_params(self, params):
assert params.rst_module_filenm is not None
if not os.path.exists(params.rst_module_filenm):
raise InvalidInputParameterError("CMake doc module file {} does not exist.".format(params.rst_module_filenm))
def _parse_command_line(self, argv):
params = cmkdoc.CMakeRstUtilParams()
parser = argparse.ArgumentParser()
parser.add_argument("input", action="store", help="specifies the CMake RST module file to be updated.")
parser.add_argument("-m", action="append", dest="module_names",
help="specifies an extension module name, the option must be repeated for each extension module.")
parser.add_argument("-R", action="store_true", dest="remove_all", default=False,
help="remove all non-standard module sections.")
parser.add_argument("-r", action="store_true", dest="remove", default=False,
help="remove a single non-standard module section.")
parser.add_argument("-o", action="store", dest="output_rst_filenm")
parser.add_argument("-s", action="store", dest="section_title", default=params.extension_section_title,
help="specifies the section to be updated [default: %(default)s]")
parser.add_argument("--dry-run", action="store_true", dest="dry_run", default=False)
util.app_args_add_log_level(parser)
args = parser.parse_args(argv)
# configure the python logger asap
util.app_configure_logging(args.log_level)
params.dry_run = args.dry_run
params.rst_module_filenm = os.path.abspath(args.input)
if args.module_names:
params.update_action = 'add'
params.extension_module_names = args.module_names
elif args.remove_all:
params.update_action = 'remove_all'
elif args.remove:
params.update_action = 'remove'
else:
raise InvalidCommandLineArgumentError("no update action specified, use -m, -R or -r.")
if args.section_title:
params.extension_section_title = args.section_title
if args.output_rst_filenm:
params.output_rst_filenm = os.path.abspath(args.output_rst_filenm)
return params
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/cmkdoc.py 0000775 0000000 0000000 00000045771 14420260131 0022104 0 ustar 00root root 0000000 0000000
from __future__ import print_function
import logging
import re
import os
from pyhhi.build.common.error import InvalidInputParameterError
class CMakeRstUtilParams(object):
def __init__(self):
self.dry_run = False
self.rst_module_filenm = None
self.update_action = 'add'
self.extension_module_names = []
self.extension_section_title = "Extension Modules"
self.output_rst_filenm = None
class RstModuleSection(object):
def __init__(self):
self.section_title = None
self.section_title_marker_line = None
self.section_header = []
self.section_content = []
class CMakeManualRstUtil(object):
def __init__(self, dry_run=False):
self._logger = logging.getLogger(__name__)
self._dry_run = dry_run
self._section_title_cmake_modules_orig = "All Modules"
self._section_title_cmake_modules = "Standard Modules"
self._reserved_section_titles = [self._section_title_cmake_modules, self._section_title_cmake_modules_orig, "Legacy CPack Modules"]
self._section_title_marker = '='
self._is_cmake_source_tree = False
# Location of .rst
self._cmake_help_module_dir = None
# Automatic removal of cmake module wrapper files.
self._autoremove = True
self._re_section_content = re.compile(r'\s+/module/([a-zA-Z0-9_-]+)\s*$')
def is_cmake_source_tree(self):
return self._is_cmake_source_tree
def add_extension_modules(self, rst_module_filenm, extension_module_names, section_title="Extension Modules", output_rst_filenm=None):
if not os.path.exists(rst_module_filenm):
raise InvalidInputParameterError("CMake RST module file {} does not exist.".format(rst_module_filenm))
if output_rst_filenm is None:
# in-place replacement
output_rst_filenm = rst_module_filenm
# Empty sections are not permitted, use one of the remove_xxx() methods to get rid of a section.
assert extension_module_names
self._detect_cmake_source_tree(rst_module_filenm)
self._check_section_title(section_title)
(module_file_header, section_list) = self._parse_rst_module_file(rst_module_filenm)
if len(section_list) > 0:
# CMake's original module file has one or more sections. All extension sections are inserted in front of
# section titled "All Modules" or "Standard Modules". The latter title is used after the first extension section has been inserted.
# Get cmake module names
cmake_module_names_set = self._get_cmake_module_names(section_list)
# Extension module names must not replace existing cmake module names
extension_module_names_set = set(extension_module_names)
if not cmake_module_names_set.isdisjoint(extension_module_names_set):
conflicting_names = cmake_module_names_set.intersection(extension_module_names_set)
msg = "CMake builtin module names cannot be part of an extension section.\n"
msg += "Please check the extension module names: " + " ".join(conflicting_names)
raise Exception(msg)
else:
# Looks like a corrupted cmake-modules.7.rst
assert False
# Get a list of RST extension module wrapper files belonging to section "section_title".
existing_extension_module_names = self._get_extension_module_names(section_list, section_title)
if existing_extension_module_names:
self._logger.debug('existing extensions: %s', ' '.join(existing_extension_module_names))
modified = self._update_section(section_list, section_title, extension_module_names)
if modified:
# print("new content lines:")
# self._dump_section_list(section_list[0:-1])
# Change title of the CMake module section from "All Modules" to "Standard Modules".
for section in section_list:
if section.section_title == self._section_title_cmake_modules_orig:
section.section_title = self._section_title_cmake_modules
section.section_title_marker_line = '{0:=>{width}}'.format(self._section_title_marker, width=len(section.section_title))
break
section_list = self._sort_section_list(section_list)
# Save top-level RST module file
self._save_rst_module_file(output_rst_filenm, module_file_header, section_list)
# Remove RST extension module wrapper files not belonging to this section anymore.
outdated_extension_module_names = []
for mod_nm in existing_extension_module_names:
if mod_nm not in extension_module_names:
outdated_extension_module_names.append(mod_nm)
if outdated_extension_module_names:
self._logger.debug('outdated extensions: %s', ' '.join(outdated_extension_module_names))
# Remove outdated RST extension module wrapper files.
self._remove_rst_extension_module_files(outdated_extension_module_names)
def remove_extension_module_section(self, rst_module_filenm, section_title="Extension Modules", output_rst_filenm=None):
if not os.path.exists(rst_module_filenm):
raise Exception("CMake RST module file " + rst_module_filenm + " does not exist.")
if output_rst_filenm is None:
output_rst_filenm = rst_module_filenm
self._detect_cmake_source_tree(rst_module_filenm)
self._check_section_title(section_title)
(module_file_header, section_list) = self._parse_rst_module_file(rst_module_filenm)
assert len(section_list) > 0
# Get a list of RST extension module wrapper files belonging to section "section_title".
existing_extension_module_names = self._get_extension_module_names(section_list, section_title)
if existing_extension_module_names:
self._logger.debug('existing extensions: %s', ' '.join(existing_extension_module_names))
modified = False
new_section_list = []
for sect in section_list:
if section_title == sect.section_title:
modified = True
else:
new_section_list.append(sect)
assert len(new_section_list) > 0
sect = new_section_list[0]
if sect.section_title == self._section_title_cmake_modules:
modified = True
# Recover the original section title
sect.section_title = self._section_title_cmake_modules_orig
sect.section_title_marker_line = '{0:=>{width}}'.format(self._section_title_marker, width=len(sect.section_title))
if modified:
# Save top-level RST module file
self._save_rst_module_file(output_rst_filenm, module_file_header, new_section_list)
# Remove RST extension module wrapper files belonging to the section just removed.
self._remove_rst_extension_module_files(existing_extension_module_names)
def remove_all_extension_modules(self, rst_module_filenm, output_rst_filenm=None):
if not os.path.exists(rst_module_filenm):
raise Exception("CMake RST module file " + rst_module_filenm + " does not exist.")
if output_rst_filenm is None:
output_rst_filenm = rst_module_filenm
self._detect_cmake_source_tree(rst_module_filenm)
(module_file_header, section_list) = self._parse_rst_module_file(rst_module_filenm)
existing_extension_module_names = self._get_extension_module_names(section_list)
if existing_extension_module_names:
self._logger.debug('existing extensions: %s', ' '.join(existing_extension_module_names))
modified = False
while section_list:
sect = section_list[0]
if sect.section_title == self._section_title_cmake_modules:
# Found first original section
modified = True
sect.section_title = self._section_title_cmake_modules_orig
sect.section_title_marker_line = '{0:=>{width}}'.format(self._section_title_marker, width=len(sect.section_title))
break
elif sect.section_title == self._section_title_cmake_modules_orig:
# Found first original section
break
else:
modified = True
section_list.pop(0)
assert len(section_list) > 0
if modified:
# Save top-level RST module file
self._save_rst_module_file(output_rst_filenm, module_file_header, section_list)
# Remove all RST extension module wrapper files
self._remove_rst_extension_module_files(existing_extension_module_names)
def _detect_cmake_source_tree(self, rst_module_filenm):
rst_manual_dir = os.path.dirname(rst_module_filenm)
rst_module_dir = os.path.join(rst_manual_dir, '..', 'module')
if (os.path.basename(rst_manual_dir) == 'manual') and (os.path.exists(rst_module_dir) and os.path.isdir(rst_module_dir)):
self._is_cmake_source_tree = True
self._cmake_help_module_dir = self._get_rst_module_dir(rst_module_filenm)
assert os.path.exists(self._cmake_help_module_dir) and os.path.isdir(self._cmake_help_module_dir)
else:
self._is_cmake_source_tree = False
self._cmake_help_module_dir = None
def _get_rst_module_dir(self, rst_module_filenm):
rst_manual_dir = os.path.dirname(rst_module_filenm)
rst_module_dir = os.path.join(rst_manual_dir, '..', 'module')
return os.path.normpath(rst_module_dir)
def _check_section_title(self, section_title):
if section_title in self._reserved_section_titles:
raise InvalidInputParameterError("section {} is protected and cannot be modified, please contact technical support.".format(section_title))
def _check_extension_module_names(self, extension_module_names):
if not self.is_cmake_source_tree():
return
for mod_nm in extension_module_names:
rst_module_file = os.path.join(self._cmake_help_module_dir, mod_nm + '.rst')
if not os.path.exists(rst_module_file):
raise Exception("file {} does not exist.".format(rst_module_file))
def _update_section(self, section_list, section_title, extension_module_names):
section = None
modified = False
assert extension_module_names
extension_module_names.sort()
for sec in section_list:
if sec.section_title == section_title:
section = sec
break
if not section:
# add a new section
modified = True
section = RstModuleSection()
section.section_title = section_title
section.section_title_marker_line = '{0:=>{width}}'.format(self._section_title_marker, width=len(section.section_title))
section.section_header.append('')
section.section_header.append('.. toctree::')
section.section_header.append(' :maxdepth: 1')
section.section_header.append('')
section_list.insert(0, section)
else:
# Section already present, update only if section content is different.
existing_extension_module_names = []
# re_section_content = re.compile(r'\s+/module/([a-zA-Z0-9_-]+)\s*$')
for line in section.section_content:
re_match = self._re_section_content.match(line)
if re_match:
existing_extension_module_names.append(re_match.group(1))
existing_extension_module_names.sort()
if len(existing_extension_module_names) != len(extension_module_names):
modified = True
else:
for module_nm in existing_extension_module_names:
if module_nm not in extension_module_names:
modified = True
break
if modified:
# replace the section
section.section_content = []
if modified:
# replace the content of an existing section
for module_nm in extension_module_names:
section.section_content.append(' /module/' + module_nm)
return modified
def _sort_section_list(self, section_list):
"""Sort section list by title and keep CMake's original sections at the end."""
section_list_ext = []
while section_list:
sect = section_list[0]
if sect.section_title in [self._section_title_cmake_modules_orig, self._section_title_cmake_modules]:
break
else:
section_list_ext.append(sect)
section_list.pop(0)
section_title_dict = {}
section_list_sorted = []
for sect in section_list_ext:
section_title_dict[sect.section_title] = sect
title_list = list(section_title_dict.keys())
title_list.sort()
for title in title_list:
section_list_sorted.append(section_title_dict[title])
# and append CMake's original sections.
section_list_sorted.extend(section_list)
return section_list_sorted
def _parse_rst_module_file(self, rst_module_filenm):
module_file_header = []
section_list = []
section = None
previous_line = None
re_empty_line = re.compile(r'^\s*$')
with open(rst_module_filenm) as f:
for line in f:
line = line.rstrip()
if not section_list:
# Processing lines in front of the first section header
if line.startswith(self._section_title_marker):
section = RstModuleSection()
section.section_title = previous_line
section.section_title_marker_line = line
self._logger.debug("found section: {}".format(previous_line))
section_list.append(section)
# Remove the title line from the module header.
module_file_header.pop()
if module_file_header and re_empty_line.match(module_file_header[-1]):
# Remove the last empty line from the module header to simplify saving sections later on.
module_file_header.pop()
else:
module_file_header.append(line)
else:
if section.section_content:
if self._re_section_content.match(line):
section.section_content.append(line)
else:
section = RstModuleSection()
else:
# No section content found yet.
if not section.section_title:
if line.startswith(self._section_title_marker):
section.section_title = previous_line
section.section_title_marker_line = line
section_list.append(section)
self._logger.debug("found section: {}".format(previous_line))
else:
pass
else:
if self._re_section_content.match(line):
section.section_content.append(line)
else:
section.section_header.append(line)
previous_line = line
# self._dump_module_file_header(module_file_header)
# self._dump_section_list(section_list)
return module_file_header, section_list
def _get_extension_module_names(self, section_list, section_title=None):
extension_module_names = []
for sect in section_list:
if sect.section_title in [self._section_title_cmake_modules_orig, self._section_title_cmake_modules]:
continue
if (section_title is None) or (section_title == sect.section_title):
for line in sect.section_content:
re_match = self._re_section_content.match(line)
if re_match:
extension_module_names.append(re_match.group(1))
return extension_module_names
def _get_cmake_module_names(self, section_list):
cmake_module_names = set()
section_all_modules_fnd = False
for sect in section_list:
if not section_all_modules_fnd:
if sect.section_title in [self._section_title_cmake_modules_orig, self._section_title_cmake_modules]:
section_all_modules_fnd = True
else:
# One of the extension sections in front of "All Modules" or "Standard Modules"
continue
for line in sect.section_content:
re_match = self._re_section_content.match(line)
if re_match:
cmake_module_names.add(re_match.group(1))
return cmake_module_names
def _save_rst_module_file(self, output_rst_filenm, module_file_header, section_list):
if self._dry_run:
self._logger.debug("leaving without saving anything to %s", output_rst_filenm)
return
self._logger.debug("saving updated content to %s", output_rst_filenm)
with open(output_rst_filenm, "w") as f:
for line in module_file_header:
f.write(line + '\n')
for sect in section_list:
f.write('\n')
f.write(sect.section_title + '\n')
f.write(sect.section_title_marker_line + '\n')
for line in sect.section_header:
f.write(line + '\n')
for line in sect.section_content:
f.write(line + '\n')
def _remove_rst_extension_module_files(self, extension_module_names):
if not self._autoremove:
return
if not self.is_cmake_source_tree():
return
for mod_nm in extension_module_names:
rst_module_file = os.path.join(self._cmake_help_module_dir, mod_nm + '.rst')
if os.path.exists(rst_module_file):
self._logger.debug("removing %s", rst_module_file)
if not self._dry_run:
os.remove(rst_module_file)
def _dump_module_file_header(self, module_file_header):
for line in module_file_header:
print("file header: " + line)
def _dump_section_list(self, section_list):
print("number of sections: %d" %(len(section_list)))
for section in section_list:
print("section title: " + section.section_title)
print("section title marker: " + section.section_title_marker_line)
for line in section.section_header:
print("section header: " + line)
for line in section.section_content:
print("section content: " + line) HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/cmkfnd.py 0000775 0000000 0000000 00000011436 14420260131 0022075 0 ustar 00root root 0000000 0000000
from __future__ import print_function
import logging
import os
import re
import subprocess
import pyhhi.build.common.util as util
import pyhhi.build.common.ver as ver
from pyhhi.build.common.system import SystemInfo
class CMakeFinder(object):
def __init__(self, sys_info=None):
self._logger = logging.getLogger(__name__)
if sys_info is None:
self._sys_info = SystemInfo()
else:
self._sys_info = sys_info
self._cmake_prog = None
self._cmake_version = None
self._cmake_search_path = self._sys_info.get_path()
if self._sys_info.is_windows():
cmake_dir_list = []
cmake_inst_dir = self._query_winreg_cmake_inst_dir()
if cmake_inst_dir is None:
# cmake 3.6.1 is 64 bit but earlier cmake versions are 32 bit only.
if self._sys_info.get_os_arch() == 'x86_64':
cmake_dir_list.append(os.path.join(self._sys_info.get_program_dir('x86_64'), 'CMake', 'bin'))
cmake_dir_list.append(os.path.join(self._sys_info.get_program_dir('x86'), 'CMake', 'bin'))
for cmake_dir in cmake_dir_list:
if os.path.exists(cmake_dir):
if cmake_dir not in self._cmake_search_path:
self._cmake_search_path.append(cmake_dir)
else:
# Append cmake install directory picked up from the registry (3.8.0 or higher).
self._cmake_search_path.append(cmake_inst_dir)
elif self._sys_info.is_macosx():
# The default installation path is /Applications/CMake.app/Contents/bin on MacOSX.
cmake_dir = os.path.join('/Applications', 'CMake.app', 'Contents', 'bin')
if os.path.exists(cmake_dir):
if cmake_dir not in self._cmake_search_path:
self._cmake_search_path.append(cmake_dir)
elif self._sys_info.is_linux():
pass
else:
assert False
def set_cmake_search_path(self, search_path):
if search_path:
self._cmake_search_path = search_path[:]
self._logger.debug("cmake search path changed to: %s", ';'.join(self._cmake_search_path))
def find_cmake(self):
"""Returns the absolute path of a cmake executable."""
if self._cmake_prog is None:
self._logger.debug("cmake search path: %s", ';'.join(self._cmake_search_path))
self._cmake_prog = util.find_tool_on_path('cmake', must_succeed=True, search_path=self._cmake_search_path)
self._cmake_version = self._query_cmake_version(self._cmake_prog)
return self._cmake_prog
def is_cmake_installed(self):
return self.find_cmake() is not None
def get_cmake_version(self):
assert self._cmake_version is not None
return self._cmake_version
def _query_cmake_version(self, cmake_cmd):
retv = subprocess.check_output([cmake_cmd, '--version'], universal_newlines=True)
return self._parse_cmake_version_retv(retv)
def _parse_cmake_version_retv(self, retv):
version_response = retv.rstrip()
lines = version_response.splitlines()
# Possible version information:
# cmake version 3.7.2
# cmake version 3.8.0-rc2
# cmake3 version 3.6.3 # redhat 7.x cmake3
re_version_match = re.match(r'cmake\d*\s+version\s+([0-9]+\.[0-9]+\.[0-9]+)', lines[0], re.IGNORECASE)
if not re_version_match:
raise Exception("cmake has returned an unsupported version string. Please contact technical support.")
self._logger.debug("cmake version: %s", re_version_match.group(1))
return ver.version_tuple_from_str(re_version_match.group(1))
def _query_winreg_cmake_inst_dir(self):
cmake_install_dir = None
if self._sys_info.is_python3():
import winreg
win_registry = winreg
else:
import _winreg
win_registry = _winreg
reg_section = "SOFTWARE\\Kitware\\CMake"
try:
# rkey must be initialized in case OpenKey() does not return but raises an exception.
rkey = None
rkey = win_registry.OpenKey(win_registry.HKEY_LOCAL_MACHINE, reg_section)
install_dir = win_registry.QueryValueEx(rkey, 'InstallDir')[0]
if os.path.exists(os.path.join(install_dir, 'bin', 'cmake.exe')):
cmake_install_dir = os.path.join(install_dir, 'bin')
except WindowsError:
if rkey is not None:
win_registry.CloseKey(rkey)
if cmake_install_dir:
self._logger.debug("cmake install dir (winreg): %s", cmake_install_dir)
else:
self._logger.debug("cmake install dir (winreg): %s", "not found")
return cmake_install_dir
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/cmksupp.py 0000775 0000000 0000000 00000101006 14420260131 0022306 0 ustar 00root root 0000000 0000000
from __future__ import print_function
import logging
import os
import re
import sys
import pyhhi.build.common.bldtools as bldtools
import pyhhi.build.common.util as util
import pyhhi.build.common.ver as ver
from pyhhi.build.common.system import SystemInfo
from pyhhi.build.cmkfnd import CMakeFinder
class CMakeLauncherParams(object):
def __init__(self):
self.dry_run = False
self.cmk_build = False
self.clean_first = False
# cmk_bin_dir override the default CMake search path.
self.cmk_bin_dir = None
self.cmk_build_jobs = 1
self.cmk_build_target = None
#msbuild: verbosity levels: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]
self.cmk_build_verbosity = 'minimal'
self.cmk_generator_alias = None
self.cmk_warning_flags = []
self.cmk_cache_entries = []
# gcc, gcc-4.9, clang, msvc, msvc-19.0
self.toolset_str = None
self.target_arch = None
# tuple/list of build configurations (debug, release)
self.build_configs = tuple(['debug'])
self.link_variants = tuple(['static'])
# Assigned if the script and its modules are to be installed.
self.install_dir = None
# Python directories to search for cache files/directories.
self.py_cache_dirs = []
class CMakeCompilerInfo(object):
def __init__(self):
# If a toolchain file is given, all other attributes are not used and a cross compiler configuration
# is assumed.
self.cmake_toolchain_file = None
# gcc, clang, msvc
self.compiler_family = None
self.version_major_minor = None
self.target_arch = None
self.cmake_cxx_compiler = None
self.cmake_c_compiler = None
self.mingw = False
def is_cross_compiler(self):
return self.cmake_toolchain_file is not None
def __str__(self):
if self.cmake_toolchain_file:
s = "toolchain file: %s\n" % self.cmake_toolchain_file
else:
s = "compiler family: %s\n" % self.compiler_family
s += "compiler version (major.minor): %s\n" % ver.version_tuple_to_str(self.version_major_minor)
if self.target_arch:
s += "target arch: %s\n" % self.target_arch
if self.cmake_cxx_compiler:
s += "cmake cxx compiler: %s\n" % self.cmake_cxx_compiler
s += "cmake c compiler: %s\n" % self.cmake_c_compiler
return s
class CMakeBuildTreeInfo(object):
def __init__(self, build_root, compiler_info, generator_alias):
self._logger = logging.getLogger(__name__)
self._sys_info = SystemInfo()
self._build_root = build_root
self._generator_alias = generator_alias
self._default_build_configs = ['debug', 'release', 'relwithdebinfo', 'minsizerel']
# key=bld_variant.lnk_variant value=build_dir
self._build_dir_dict = self._create_build_dir_dict(compiler_info, generator_alias, self._default_build_configs)
def get_build_dir(self, bld_config, lnk_variant):
return self._build_dir_dict[bld_config + '.' + lnk_variant]
def is_multi_configuration_generator(self):
return self._generator_alias.startswith('vs') or (self._generator_alias == 'xcode')
def _create_build_dir_dict(self, compiler_info, generator_alias, build_configs):
build_dir_dict = {}
if compiler_info.is_cross_compiler():
assert generator_alias == 'umake'
build_root = self._create_cross_compile_build_dir(self._build_root, compiler_info.cmake_toolchain_file, generator_alias)
print("cross compile build root: " + build_root)
if generator_alias == 'umake':
for cfg in build_configs:
build_dir_dict[cfg + '.' + 'static'] = os.path.join(build_root, cfg)
build_dir_dict[cfg + '.' + 'shared'] = os.path.join(build_root, cfg + '-shared')
else:
target_arch = compiler_info.target_arch
if compiler_info.mingw:
toolset_dir = "{}-mingw-{}".format(compiler_info.compiler_family, ver.version_tuple_to_str(compiler_info.version_major_minor))
else:
toolset_dir = "{}-{}".format(compiler_info.compiler_family, ver.version_tuple_to_str(compiler_info.version_major_minor))
if self.is_multi_configuration_generator():
for cfg in build_configs:
build_dir_dict[cfg + '.' + 'static'] = os.path.join(self._build_root, generator_alias, toolset_dir, target_arch)
build_dir_dict[cfg + '.' + 'shared'] = os.path.join(self._build_root, generator_alias, toolset_dir, target_arch + '-shared')
else:
for cfg in build_configs:
build_dir_dict[cfg + '.' + 'static'] = os.path.join(self._build_root, generator_alias, toolset_dir, target_arch, cfg)
build_dir_dict[cfg + '.' + 'shared'] = os.path.join(self._build_root, generator_alias, toolset_dir, target_arch, cfg + '-shared')
return build_dir_dict
def _create_cross_compile_build_dir(self, build_root, toolchain_file, generator_alias):
assert generator_alias == 'umake'
basenm = os.path.basename(toolchain_file)
re_match = re.match(r'(.+)\.cmake$', basenm)
if re_match:
basenm = re_match.group(1)
if self._sys_info.is_linux():
# Try to strip a distro related suffix.
distro_suffix = self._sys_info.get_os_distro_short()
re_match = re.match('(.+)[-]' + distro_suffix + '([-_.0-9]+)?$', basenm)
if re_match:
basenm = re_match.group(1)
build_dir = os.path.join(build_root, basenm)
return build_dir
class CMakeLauncher(object):
def __init__(self, verbosity=1):
self._logger = logging.getLogger(__name__)
self._sys_info = SystemInfo()
self._verbosity_level = verbosity
self._cmake_finder = CMakeFinder(self._sys_info)
self._top_dir = None
self._build_root = None
self._build_tree_create_if_not_exists = True
self._build_tree_info = None
self._deploy_dir = None
self._script_name = os.path.basename(sys.argv[0])
self._cmk_cache_file = 'CMakeCache.txt'
# cache entries the user cannot override via -Dxxx
self._cmk_reserved_cache_vars = ['BUILD_SHARED_LIBS',
'CMAKE_BUILD_TYPE',
'CMAKE_CONFIGURATION_TYPES',
'CMAKE_CXX_COMPILER',
'CMAKE_C_COMPILER',
'CMAKE_TOOLCHAIN_FILE']
self._dict_to_cmake_generator = {'umake': 'Unix Makefiles',
'mgwmake': 'MinGW Makefiles',
'ninja': 'Ninja',
'xcode': 'Xcode',
'vs16': 'Visual Studio 16 2019',
'vs15': 'Visual Studio 15 2017',
'vs14': 'Visual Studio 14 2015',
'vs12': 'Visual Studio 12 2013',
'vs11': 'Visual Studio 11 2012',
'vs10': 'Visual Studio 10 2010'}
# list of default configuration types for multiconfiguration generators.
self._default_config_types = ['debug', 'release']
# self._default_config_types = ['debug', 'release', 'relwithdebinfo']
self._dict_to_cmake_config = {'debug': 'Debug', 'release': 'Release', 'relwithdebinfo': 'RelWithDebInfo', 'minsizerel': 'MinSizeRel'}
self._dict_to_vs_platform_name = {'x86_64': 'x64', 'x86': 'Win32'}
self._prefer_vs_native_toolsets = True
if self._sys_info.is_windows():
self._msvc_registry = bldtools.MsvcRegistry()
self._dict_to_vs_platform_toolset = {'msvc-19.0': 'v140',
'msvc-18.0': 'v120',
'msvc-17.0': 'v110',
'msvc-16.0': 'v100'}
self._dict_generator_alias_to_msvc_toolsets = {'vs14': ['msvc-19.0', 'msvc-18.0', 'msvc-17.0', 'msvc-16.0'],
'vs12': ['msvc-18.0', 'msvc-17.0', 'msvc-16.0'],
'vs11': ['msvc-17.0', 'msvc-16.0'],
'vs10': ['msvc-16.0']}
# vs15 has not a fixed compiler version and therefore the mapping is generated dynamically.
if self._msvc_registry.is_version_installed((14, 1)):
cl_version = self._msvc_registry.get_compiler_version((14, 1))
msvc_str = 'msvc-' + ver.version_tuple_to_str(cl_version[:2])
if cl_version[1] < 20:
self._dict_to_vs_platform_toolset[msvc_str] = 'v141'
if not self._msvc_registry.is_vs2019_toolset((14, 1)):
self._dict_generator_alias_to_msvc_toolsets['vs15'] = [msvc_str, 'msvc-19.0', 'msvc-18.0', 'msvc-17.0', 'msvc-16.0']
else:
assert False
# vs16 has not a fixed compiler version and therefore the mapping is generated dynamically.
if self._msvc_registry.is_version_installed((14, 2)):
cl_version = self._msvc_registry.get_compiler_version((14, 2))
msvc_str = 'msvc-' + ver.version_tuple_to_str(cl_version[:2])
if cl_version[1] < 30:
self._dict_to_vs_platform_toolset[msvc_str] = 'v142'
msvc_version_list = [msvc_str]
if self._msvc_registry.is_version_installed((14, 1)):
cl_version = self._msvc_registry.get_compiler_version((14, 1))
msvc_version_list.append("msvc-{0:d}.{1:d}".format(cl_version[0], cl_version[1]))
msvc_version_list.extend(['msvc-19.0', 'msvc-18.0', 'msvc-17.0', 'msvc-16.0'])
self._dict_generator_alias_to_msvc_toolsets['vs16'] = msvc_version_list
else:
assert False
def launch(self, params, cmake_argv):
if params.cmk_bin_dir:
self._cmake_finder.set_cmake_search_path([params.cmk_bin_dir])
# Is cmake installed?
if not self._cmake_finder.is_cmake_installed():
return
self._top_dir = os.getcwd()
self._build_root = os.path.join(self._top_dir, 'build')
self._deploy_dir = os.path.join(self._top_dir, 'deploy')
if not os.path.exists(self._build_root):
os.makedirs(self._build_root)
self._check_cmake_params(params)
compiler_info = self._create_compiler_info(params.toolset_str, params.target_arch)
#print(compiler_info)
#return
self._build_tree_info = CMakeBuildTreeInfo(self._build_root, compiler_info, params.cmk_generator_alias)
#print(self._build_tree_info.get_build_dir('release', 'static'))
#print(self._build_tree_info.get_build_dir('release', 'shared'))
#print(self._build_tree_info.get_build_dir('debug', 'static'))
#print(self._build_tree_info.get_build_dir('debug', 'shared'))
# return
if params.cmk_build:
# cmake build
if self._build_tree_create_if_not_exists and (not self._is_build_target_clean(params.cmk_build_target)):
# cleaning a non-existing build tree is really a no-op and does not require a build tree at all.
cmake_argv_config = []
if params.cmk_warning_flags:
cmake_argv_config.extend(params.cmk_warning_flags)
if params.cmk_cache_entries:
cmake_argv_config.extend(params.cmk_cache_entries)
for lnk in params.link_variants:
self._create_default_build_tree(compiler_info, params.cmk_generator_alias, params.build_configs, lnk, cmake_argv_config)
for lnk in params.link_variants:
self.launch_build(params, lnk, cmake_argv)
else:
# cmake build tree create/update
for lnk in params.link_variants:
cmake_argv_config = []
if params.cmk_warning_flags:
cmake_argv_config.extend(params.cmk_warning_flags)
if params.cmk_cache_entries:
cmake_argv_config.extend(params.cmk_cache_entries)
if cmake_argv:
cmake_argv_config.extend(cmake_argv)
# print("warning flags: ", params.cmk_warning_flags)
# print("additional flags: ", cmake_argv_config)
self.launch_config(compiler_info, params.cmk_generator_alias, params.build_configs, lnk, cmake_argv_config)
def launch_config(self, compiler_info, generator_alias, build_configs, lnk_variant, cmake_argv_optional):
cur_dir = os.getcwd()
cmake_argv = []
if self._is_multi_configuration_generator():
tmp_build_configs = [build_configs[0]]
else:
tmp_build_configs = build_configs
for cfg in tmp_build_configs:
b_dir = self._build_tree_info.get_build_dir(cfg, lnk_variant)
if not os.path.exists(b_dir):
os.makedirs(b_dir)
if generator_alias.startswith('vs'):
if compiler_info.compiler_family == 'msvc':
if self._is_vs_64bit_native_toolset_supported(generator_alias):
vs_toolset = self._dict_to_vs_platform_toolset['msvc-' + ver.version_tuple_to_str(compiler_info.version_major_minor)] + ',host=x64'
else:
vs_toolset = self._dict_to_vs_platform_toolset['msvc-' + ver.version_tuple_to_str(compiler_info.version_major_minor)]
elif compiler_info.compiler_family == 'intel':
vs_toolset = "Intel C++ Compiler %d.%d" % (compiler_info.version_major_minor[0], compiler_info.version_major_minor[1])
else:
assert False
cmake_argv = ['-G', self._dict_to_cmake_generator[generator_alias]]
if generator_alias == 'vs16':
if ver.version_compare(compiler_info.version_major_minor, (19, 20)) < 0:
cmake_argv.extend(['-T', self._dict_to_vs_platform_toolset['msvc-' + ver.version_tuple_to_str(compiler_info.version_major_minor)]])
if compiler_info.target_arch != 'x86_64':
cmake_argv.extend(['-A', self._dict_to_vs_platform_name[compiler_info.target_arch]])
else:
cmake_argv.extend(['-T', vs_toolset, '-A', self._dict_to_vs_platform_name[compiler_info.target_arch]])
elif generator_alias == 'xcode':
cmake_argv = ['-G', self._dict_to_cmake_generator[generator_alias]]
elif generator_alias in ['umake', 'mgwmake', 'ninja']:
cmake_argv = ['-G', self._dict_to_cmake_generator[generator_alias],
'-DCMAKE_BUILD_TYPE:STRING=' + self._dict_to_cmake_config[cfg]]
if compiler_info.is_cross_compiler():
cmake_argv.append('-DCMAKE_TOOLCHAIN_FILE:FILEPATH=' + compiler_info.cmake_toolchain_file)
else:
if compiler_info.cmake_cxx_compiler:
cmake_argv.append('-DCMAKE_CXX_COMPILER:FILEPATH=' + compiler_info.cmake_cxx_compiler)
if compiler_info.cmake_c_compiler:
cmake_argv.append('-DCMAKE_C_COMPILER:FILEPATH=' + compiler_info.cmake_c_compiler)
if cmake_argv_optional:
# Add any additional arguments to the cmake command line.
cmake_argv.extend(cmake_argv_optional)
if lnk_variant == 'shared':
cmake_argv.append('-DBUILD_SHARED_LIBS:BOOL=ON')
if self._is_multi_configuration_generator():
cmake_config_types = [self._dict_to_cmake_config[x] for x in self._default_config_types]
for b_cfg in build_configs:
if b_cfg not in self._default_config_types:
cmake_config_types.append(self._dict_to_cmake_config[b_cfg])
cmake_argv.append('-DCMAKE_CONFIGURATION_TYPES:STRING=' + ';'.join(cmake_config_types))
# cmake_argv.append(self._top_dir)
# print("launch_config(): cmake_args", cmake_argv)
# print("build dir:", b_dir)
# print("top dir:", self._top_dir)
if ver.version_compare(self._cmake_finder.get_cmake_version(), (3, 13, 0)) >= 0:
cmake_argv.extend(['-S', self._top_dir, '-B', b_dir])
retv = self.launch_cmake(cmake_argv)
else:
os.chdir(b_dir)
cmake_argv.append(os.path.relpath(self._top_dir))
retv = self.launch_cmake(cmake_argv)
os.chdir(cur_dir)
if retv != 0:
sys.exit(1)
def launch_build(self, params, lnk_variant, cmake_argv_optional):
if self._is_multi_configuration_generator():
# multiple configurations / build directory
b_dir = self._build_tree_info.get_build_dir(params.build_configs[0], lnk_variant)
if self._is_build_target_clean(params.cmk_build_target) and (not os.path.exists(b_dir)):
return
for cfg in params.build_configs:
cmake_argv = ['--build', b_dir, '--config', self._dict_to_cmake_config[cfg]]
self._add_common_cmake_build_options(cmake_argv, params)
self._add_cmake_build_jobs_option(cmake_argv, params.cmk_generator_alias, params.cmk_build_jobs)
self._add_cmake_build_verbosity_option(cmake_argv, params.cmk_generator_alias, params.cmk_build_verbosity)
if params.cmk_generator_alias.startswith('vs'):
# msbuild option to disable node reuse -> jenkins build seems to idle at the end.
self._add_cmake_build_tool_options(cmake_argv, ['/nr:false'])
if cmake_argv_optional:
self._add_cmake_build_tool_options(cmake_argv, cmake_argv_optional)
retv = self.launch_cmake(cmake_argv)
if retv != 0:
sys.exit(1)
else:
# one build directory / configuration
for cfg in params.build_configs:
b_dir = self._build_tree_info.get_build_dir(cfg, lnk_variant)
if self._is_build_target_clean(params.cmk_build_target) and (not os.path.exists(b_dir)):
continue
cmake_argv = ['--build', b_dir]
self._add_common_cmake_build_options(cmake_argv, params)
self._add_cmake_build_jobs_option(cmake_argv, params.cmk_generator_alias, params.cmk_build_jobs)
self._add_cmake_build_verbosity_option(cmake_argv, params.cmk_generator_alias, params.cmk_build_verbosity)
if cmake_argv_optional:
self._add_cmake_build_tool_options(cmake_argv, cmake_argv_optional)
retv = self.launch_cmake(cmake_argv)
if retv != 0:
sys.exit(1)
def launch_cmake(self, cmake_argv):
argv = [self._cmake_finder.find_cmake()]
argv.extend(cmake_argv)
if self._verbosity_level > 0:
# assemble the cmake command line for logging purposes
joiner = ' '
cmd_line = joiner.join(argv)
print("Launching: " + cmd_line)
retv = util.subproc_call_flushed(argv)
if retv < 0:
self._logger.debug("child was terminated by signal: %d", -retv)
else:
self._logger.debug("child returned: %d", retv)
return retv
def _is_build_target_clean(self, target):
return (target is not None) and (target == 'clean')
def _check_cmake_params(self, params):
if params.cmk_generator_alias is None:
if self._sys_info.is_windows_msys() and (params.toolset_str is not None) and (params.toolset_str == 'gcc'):
params.cmk_generator_alias = 'umake'
else:
params.cmk_generator_alias = self._get_default_cmake_generator()
if params.toolset_str is None:
if self._sys_info.get_platform() == 'linux':
params.toolset_str = 'gcc'
elif self._sys_info.get_platform() == 'macosx':
params.toolset_str = 'clang'
elif self._sys_info.get_platform() == 'windows':
if params.cmk_generator_alias in ['mgwmake', 'umake']:
params.toolset_str = 'gcc'
else:
params.toolset_str = self._dict_generator_alias_to_msvc_toolsets[params.cmk_generator_alias][0]
else:
assert False
elif params.toolset_str == 'msvc':
# toolset=msvc means to select the latest msvc version the selected generator supports.
assert self._sys_info.get_platform() == 'windows'
params.toolset_str = self._dict_generator_alias_to_msvc_toolsets[params.cmk_generator_alias][0]
elif params.toolset_str.startswith('msvc-'):
if params.toolset_str not in self._dict_generator_alias_to_msvc_toolsets[params.cmk_generator_alias]:
raise Exception("The selected generator does not support " + params.toolset_str + ", check toolset and generator arguments.")
if params.target_arch is None:
params.target_arch = self._sys_info.get_os_arch()
if params.cmk_cache_entries:
self._check_cmake_user_cache_entries(params.cmk_cache_entries)
def _check_cmake_user_cache_entries(self, user_cache_entries):
# -D:= or -D= provided by the user cannot override any reserved cache entries like BUILD_SHARED_LIBS, ...
re_cache_entry = re.compile(r'-D(\w+)[=:]')
for cache_opt in user_cache_entries:
re_match = re_cache_entry.match(cache_opt)
if re_match:
cache_var = re_match.group(1)
if cache_var in self._cmk_reserved_cache_vars:
raise Exception("CMake cache entry " + cache_var + " is reserved by "
+ self._script_name + " and may not be overridden via -D, please contact technical support.")
else:
# Unexpected -D expression, please investigate.
raise Exception("CMake cache entry expression " + cache_opt + " is unsupported, please contact technical support." )
def _get_default_cmake_generator(self):
if 'DEFAULT_CMAKE_GENERATOR' in os.environ:
generator_alias = os.environ['DEFAULT_CMAKE_GENERATOR']
if generator_alias not in self._dict_to_cmake_generator:
raise Exception("CMake generator " + generator_alias + " defined by environment variable DEFAULT_CMAKE_GENERATOR is unsupported.")
return generator_alias
if self._sys_info.get_platform() == 'linux':
generator_alias = 'umake'
elif self._sys_info.get_platform() == 'macosx':
generator_alias = 'xcode'
elif self._sys_info.get_platform() == 'windows':
# e.g. 14.2, 14.1, 14.0, 12.0 etc.
bb_vs_latest_version = self._msvc_registry.get_latest_version()
if ver.version_compare(bb_vs_latest_version, (14, 2)) == 0:
generator_alias = 'vs16'
elif ver.version_compare(bb_vs_latest_version, (14, 1)) == 0:
generator_alias = 'vs15'
else:
generator_alias = 'vs' + str(bb_vs_latest_version[0])
else:
assert False
return generator_alias
def _is_multi_configuration_generator(self):
return self._build_tree_info.is_multi_configuration_generator()
def _is_vs_64bit_native_toolset_supported(self, generator_alias):
re_vs_generator = re.compile(r'vs(\d+)$')
re_match = re_vs_generator.match(generator_alias)
if not re_match:
return False
if not self._prefer_vs_native_toolsets:
# Visual Studio native 64bit toolchains are disabled
return False
if self._sys_info.get_os_arch() != 'x86_64':
return False
if int(re_match.group(1), 10) < 12:
# Visual Studio 11 2012 or earlier don't have native 64 bit toolchains.
return False
if ver.version_compare(self._cmake_finder.get_cmake_version(), (3, 8, 0)) < 0:
# cmake too old to support vs native toolchains.
return False
return True
def _create_compiler_info(self, toolset_str, target_arch):
if self._sys_info.is_cray():
return self._create_cray_compiler_info(target_arch)
compiler_info = CMakeCompilerInfo()
if toolset_str and (toolset_str.endswith('.cmake')):
# toolchain file specified -> no need to add any furter compiler details
compiler_info.cmake_toolchain_file = toolset_str
return compiler_info
# native compiler selected or assumed, figure out details to create the build tree folder.
compiler_info.target_arch = target_arch
re_msvc_version = re.compile(r'msvc-(\d+\.\d+)$')
re_match = re_msvc_version.match(toolset_str)
if re_match:
compiler_info.compiler_family = 'msvc'
compiler_info.version_major_minor = ver.version_tuple_from_str(re_match.group(1))
return compiler_info
else:
assert not toolset_str.startswith('msvc')
bb_toolset_info = bldtools.Toolset(self._sys_info, toolset_str)
compiler_info.compiler_family = bb_toolset_info.get_toolset()
compiler_info.version_major_minor = bb_toolset_info.get_version()[:2]
# re_toolset_versioned = re.compile('([a-z]+)-(\d+\.\d+)$')
if self._sys_info.get_platform() == 'linux':
if toolset_str != 'gcc':
compiler_info.cmake_cxx_compiler = bb_toolset_info.get_compiler_command()
cxx_basename = os.path.basename(compiler_info.cmake_cxx_compiler)
# print("cxx_basename: ", cxx_basename)
if compiler_info.compiler_family == 'gcc':
gcc_basename = cxx_basename.replace('g++', 'gcc')
compiler_info.cmake_c_compiler = os.path.join(os.path.dirname(compiler_info.cmake_cxx_compiler), gcc_basename)
elif compiler_info.compiler_family == 'clang':
clang_basename = cxx_basename.replace('++', '')
compiler_info.cmake_c_compiler = os.path.join(os.path.dirname(compiler_info.cmake_cxx_compiler), clang_basename)
elif compiler_info.compiler_family == 'intel':
compiler_info.cmake_c_compiler = os.path.join(os.path.dirname(compiler_info.cmake_cxx_compiler), 'icc')
elif self._sys_info.get_platform() == 'macosx':
# assert compiler_info.compiler_family == 'clang'
if compiler_info.compiler_family == 'clang':
pass
elif compiler_info.compiler_family == 'intel':
compiler_info.cmake_cxx_compiler = bb_toolset_info.get_compiler_command()
compiler_info.cmake_c_compiler = os.path.join(os.path.dirname(compiler_info.cmake_cxx_compiler), 'icc')
else:
assert False
elif self._sys_info.get_platform() == 'windows':
if compiler_info.compiler_family == 'msvc':
pass
elif compiler_info.compiler_family == 'gcc':
# MinGW as native compiler: 64 bit and 32 bit default targets are possible.
compiler_info.mingw = bb_toolset_info.is_mingw()
compiler_info.target_arch = bb_toolset_info.get_platform_info(0).get_target_arch(0)
elif compiler_info.compiler_family == 'intel':
compiler_info.target_arch = bb_toolset_info.get_platform_info(0).get_target_arch(0)
else:
assert False
return compiler_info
def _create_cray_compiler_info(self, target):
compiler_info = CMakeCompilerInfo()
compiler_info.target_arch = target
version_str = None
if 'CRAY_PRGENVGNU' in os.environ:
compiler_info.compiler_family = 'gcc'
version_str = os.environ['GCC_VERSION']
elif 'CRAY_PRGENVCRAY' in os.environ:
compiler_info.compiler_family = 'cray'
version_str = os.environ['CRAY_CC_VERSION']
elif 'CRAY_PRGENVINTEL' in os.environ:
compiler_info.compiler_family = 'intel'
version_str = os.environ['INTEL_VERSION']
else:
assert False
version = ver.version_tuple_from_str(version_str)
assert len(version) >= 2
compiler_info.version_major_minor = version[:2]
return compiler_info
def _create_default_build_tree(self, compiler_info, generator_alias, build_configs, lnk_variant, cmake_argv_optional):
if self._is_multi_configuration_generator():
build_dir = self._build_tree_info.get_build_dir(build_configs[0], lnk_variant)
if not self._is_valid_build_tree(build_dir):
self.launch_config(compiler_info, generator_alias, build_configs, lnk_variant, cmake_argv_optional)
else:
for cfg in build_configs:
build_dir = self._build_tree_info.get_build_dir(cfg, lnk_variant)
if not self._is_valid_build_tree(build_dir):
self.launch_config(compiler_info, generator_alias, [cfg], lnk_variant, cmake_argv_optional)
def _is_valid_build_tree(self, build_dir):
if os.path.exists(os.path.join(build_dir, self._cmk_cache_file)):
return True
if os.path.exists(build_dir):
print(self._script_name + ": warning: build directory " + build_dir + " exists, but cmake cache file " + self._cmk_cache_file + " does not.")
return False
def _add_common_cmake_build_options(self, cmake_argv, params):
if params.cmk_build_target:
cmake_argv.extend(['--target', params.cmk_build_target])
if params.clean_first:
cmake_argv.append('--clean-first')
def _add_cmake_build_jobs_option(self, cmake_argv, generator_alias, build_jobs):
cmake_version = self._cmake_finder.get_cmake_version()
if ver.version_compare(cmake_version, (3, 12)) >= 0:
assert len(cmake_argv) >= 2
if build_jobs >= 2:
if generator_alias.startswith('vs'):
self._add_cmake_build_tool_options(cmake_argv, ['/maxcpucount:' + str(build_jobs)])
else:
cmake_argv.insert(2, str(build_jobs))
cmake_argv.insert(2, '--parallel')
elif build_jobs == 0:
# Use the build engine's native number of jobs.
cmake_argv.insert(2, '--parallel')
elif build_jobs >= 2:
if generator_alias in ['umake', 'ninja']:
self._add_cmake_build_tool_options(cmake_argv, ['-j' + str(build_jobs)])
elif generator_alias.startswith('vs'):
self._add_cmake_build_tool_options(cmake_argv, ['/maxcpucount:' + str(build_jobs)])
elif generator_alias == 'xcode':
self._add_cmake_build_tool_options(cmake_argv, ['-parallelizeTargets', '-jobs', str(build_jobs)])
def _add_cmake_build_verbosity_option(self, cmake_argv, generator_alias, verbosity_level):
if verbosity_level == 'cmake':
cmake_version = self._cmake_finder.get_cmake_version()
if ver.version_compare(cmake_version, (3, 14)) >= 0:
# self._add_cmake_build_tool_options(cmake_argv, ['-v'])
# -v is a cmake option and not a build tool option and therefore
# it has to be inserted left of '--'
if '--' in cmake_argv:
index = cmake_argv.index('--')
cmake_argv.insert(index, '-v')
else:
cmake_argv.append('-v')
else:
if generator_alias.startswith('vs'):
self._add_cmake_build_tool_options(cmake_argv, ['/verbosity:' + verbosity_level])
def _add_cmake_build_tool_options(self, cmake_argv, build_tool_options):
if not build_tool_options:
# no options given -> return
return
assert '--' not in build_tool_options
if '--' not in cmake_argv:
cmake_argv.append('--')
cmake_argv.extend(build_tool_options)
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/common/ 0000775 0000000 0000000 00000000000 14420260131 0021541 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/common/__init__.py 0000775 0000000 0000000 00000000000 14420260131 0023643 0 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/common/android.py 0000775 0000000 0000000 00000031763 14420260131 0023550 0 ustar 00root root 0000000 0000000 from __future__ import print_function
import os
import stat
import re
import shutil
import subprocess
import logging
import pyhhi.build.common.system as system
import pyhhi.build.common.util as util
import pyhhi.build.common.ver as ver
class NdkFinder(object):
def __init__(self, use_env=True):
self._logger = logging.getLogger(__name__)
self._sys_info = system.SystemInfo()
self._use_env = use_env # check for ANDROID_NDK_ROOT when searching for NDK.
self._re_ndk_root = re.compile(r'((android-ndk-r\d+([a-z]?))|(ndk-bundle))$')
self._ndksa_root = os.path.join(self._sys_info.get_home_dir(), 'bin', 'ndk-sa')
# set up a platform specific NDK search path
if self._sys_info.is_macosx():
ndk_search_path = [os.path.join(self._sys_info.get_home_dir(), 'Library', 'Android', 'Sdk'),
os.path.join(self._sys_info.get_home_dir(), 'Library'),
self._sys_info.get_home_dir()]
else:
ndk_search_path = [os.path.join(self._sys_info.get_home_dir(), 'Android', 'Sdk'),
self._sys_info.get_home_dir()]
self._ndk_search_path = [d for d in ndk_search_path if os.path.exists(d)]
self._logger.debug("NDK search path: " + ';'.join(self._ndk_search_path))
#
(self._ndk_root, self._ndk_version) = self._find_ndk_root()
self._ndk_platforms = self._query_platforms(self._ndk_root)
self._ndksa_toolchains = {'gnustl': self._query_ndksa_toolchains(self.get_ndksa_root('gnustl')),
'libc++': self._query_ndksa_toolchains(self.get_ndksa_root('libc++'))}
self._ndk_toolchain_dict = {'arm-linux-androideabi':'arm-linux-androideabi',
'aarch64-linux-android':'aarch64-linux-android',
'x86':'i686-linux-android',
'x86_64':'x86_64-linux-android'}
def get_ndk_root(self):
return self._ndk_root
def get_ndk_version(self):
return self._ndk_version
def get_ndksa_root(self, stl='gnustl'):
if stl:
return os.path.join(self._ndksa_root, stl)
else:
return self._ndksa_root
def get_ndksa_toolchains(self, stl='gnustl'):
return self._ndksa_toolchains[stl]
def get_ndk_platforms(self):
return self._ndk_platforms
def get_api_level_from_platform(self, platform):
# platform := android-21, etc
re_match = re.match(r'android-(\d+)$', platform)
if re_match:
return int(re_match.group(1))
else:
raise Exception("Unsupported android platform specification encountered: " + platform)
def create_ndksa_toolchain(self, ndk_toolchain, api_level=None, unified_headers=False, ndk_stl='gnustl', ndk_llvm_version=None, inst_dir=None):
# whether bash scripts have proper hash bang lines or not.
hash_bang_missing = False
if ver.version_compare(self._ndk_version, (11,0)) < 0:
hash_bang_missing = True
# ndk_toolchain := arm-linux-androideabi-4.9, arm-linux-androideabi-clang3.6, arm-linux-androideabi
# := arm-linux-androideabi-4.9 aarch64-linux-android-4.9 x86-4.9 x86_64-4.9
ndk_toolchain_parts = ndk_toolchain.split('-')
if re.match('(clang)?[0-9.]+$', ndk_toolchain_parts[-1]):
joiner = '-'
ndk_toolchain_prefix = joiner.join(ndk_toolchain_parts[:-1])
else:
ndk_toolchain_prefix = ndk_toolchain
if ndk_toolchain_prefix in self._ndk_toolchain_dict:
if inst_dir is None:
ndksa_inst_dir = os.path.join(self.get_ndksa_root(ndk_stl), self._ndk_toolchain_dict[ndk_toolchain_prefix])
else:
ndksa_inst_dir = os.path.join(inst_dir, ndk_stl, self._ndk_toolchain_dict[ndk_toolchain_prefix])
else:
raise Exception("The NDK toolchain " + ndk_toolchain + " is not supported.")
# Create a possibly patched version of the original script which can be invoked from python.
mk_toolchain_script = self._create_mk_toolchain_script(self._ndk_root, hash_bang_missing)
# build the argument vector
mk_toolchain_args = [mk_toolchain_script]
if api_level is None:
api_level = self.get_api_level_from_platform(self._ndk_platforms[-1])
if (ver.version_compare(self._ndk_version, (14, 0)) >= 0) and (ver.version_compare(self._ndk_version, (16, 0)) < 0):
if unified_headers:
mk_toolchain_args.append('--unified-headers')
if ver.version_compare(self._ndk_version, (12,0)) >= 0:
# NDK 12 comes with a new python script expecting different command line options
if ndk_toolchain_parts[0] == 'aarch64':
ndk_arch = 'arm64'
else:
ndk_arch = ndk_toolchain_parts[0]
mk_toolchain_args.append('--arch=' + ndk_arch)
mk_toolchain_args.append('--api=' + str(api_level))
# --force -> remove destination directory if it exists.
mk_toolchain_args.append('--force')
else:
ndk_platform = 'android-%d' % api_level
mk_toolchain_args.append('--platform=' + ndk_platform)
mk_toolchain_args.append('--toolchain=' + ndk_toolchain)
if ver.version_compare(self._ndk_version, (11,0)) < 0:
if ndk_llvm_version is not None:
mk_toolchain_args.append('--llvm-version=' + ndk_llvm_version)
else:
# enable clang by default
mk_toolchain_args.append('--use-llvm')
if ndk_stl is not None:
mk_toolchain_args.append('--stl=' + ndk_stl)
mk_toolchain_args.append('--install-dir=' + ndksa_inst_dir)
#print("create_ndksa_toolchain:", mk_toolchain_args)
#return
# prepare the destination directory
if os.path.exists(ndksa_inst_dir):
shutil.rmtree(ndksa_inst_dir)
if not os.path.exists(self._ndksa_root):
os.makedirs(self._ndksa_root)
print("Launching: " + ' '.join(mk_toolchain_args))
# and launch the script to create the new toolchain
util.subproc_check_call_flushed(mk_toolchain_args)
if hash_bang_missing:
if os.path.exists(mk_toolchain_script):
os.remove(mk_toolchain_script)
# patch the clang++ shell wrapper to have a hash bang
self._patch_clang_shell_script(os.path.join(ndksa_inst_dir, 'bin', self._ndk_toolchain_dict[ndk_toolchain_prefix] + '-clang++'))
self._patch_clang_shell_script(os.path.join(ndksa_inst_dir, 'bin', self._ndk_toolchain_dict[ndk_toolchain_prefix] + '-clang'))
# update the list of available toolchains.
self._ndksa_toolchains[ndk_stl] = self._query_ndksa_toolchains(os.path.join(ndksa_inst_dir, '..'))
def _find_ndk_root(self):
self._logger.debug("entering: use_env=" + str(self._use_env))
if self._use_env and ('ANDROID_NDK_ROOT' in os.environ):
self._logger.debug("using environment variable ANDROID_NDK_ROOT")
ndk_root = util.normalize_path(os.path.expandvars('$ANDROID_NDK_ROOT'))
if not os.path.exists(ndk_root):
raise Exception("environment variable ANDROID_NDK_ROOT points to a non-existing directory, please fix it or remove it.")
ndk_version = self._query_ndk_version(ndk_root)
else:
# self._logger.warn("The environment variable NDK is not defined.")
(ndk_root, ndk_version) = self._find_ndk_root_default(self._ndk_search_path)
return ndk_root, ndk_version
def _find_ndk_root_default(self, ndk_search_path):
self._logger.debug("entering: ndk_search_path=" + ";".join(ndk_search_path))
# Search for android-ndk-r10d, android-ndk-r10, or similar and select the latest release. If the regular expressions matches,
# there are always two groups but the second group is empty if no patch level is given.
ndk_version_list = []
ndk_dir_map = {}
for ndk_super_root in ndk_search_path:
for d in os.listdir(ndk_super_root):
re_match = self._re_ndk_root.match(d)
if re_match:
# the map associates a numeric version tuple with the NDK directory because the version sorter works on lists of numeric version tuples.
ndk_root = os.path.join(ndk_super_root, d)
ndk_version = self._query_ndk_version(ndk_root)
if ndk_version not in ndk_dir_map:
ndk_dir_map[ndk_version] = ndk_root
ndk_version_list.append(ndk_version)
self._logger.debug("find NDK " + ndk_root)
else:
self._logger.debug("duplicate NDK version encountered: " + ndk_root + " -> ignoring")
if not ndk_version_list:
raise Exception("The Android NDK installation directory cannot be found automatically, please contact technical support.")
ndk_version_list = ver.version_list_sort(ndk_version_list)
ndk_version = ndk_version_list[-1]
ndk_root = ndk_dir_map[ndk_version]
self._logger.debug("leaving, ndk_root=" + ndk_root)
return ndk_root, ndk_version
def _query_ndk_version(self, ndk_root):
version_file = os.path.join(ndk_root, 'source.properties')
if not os.path.exists(version_file):
raise Exception("Android NDK version file " + version_file + " is missing, please contact technical support.")
# Pkg.Revision = 11.2.2725575
re_ndk_version = re.compile(r'Pkg\.Revision\s*=\s*([0-9.]+)', re.IGNORECASE)
with open(version_file) as vf:
for line in vf:
re_match = re_ndk_version.match(line)
if re_match:
ndk_version = ver.version_tuple_from_str(re_match.group(1))
return ndk_version
raise Exception("Android NDK " + ndk_root + ": version information is missing. Please contact technical support.")
def _query_platforms(self, ndk_root):
platforms_dir = os.path.join(ndk_root, 'platforms')
assert os.path.exists(platforms_dir)
re_platform = re.compile('android-(\d+)$')
# enumerate installed platforms in ascending order.
version_list = [ver.version_tuple_from_str(re_platform.match(d).group(1)) for d in os.listdir(platforms_dir) if re_platform.match(d)]
if version_list:
version_list = ver.version_list_sort(version_list)
ndk_platforms = ['android-' + ver.version_tuple_to_str(version) for version in version_list]
return ndk_platforms
else:
assert False
def _query_ndksa_toolchains(self, ndksa_root):
ndksa_toolchains = []
if os.path.exists(ndksa_root):
ndksa_toolchains = [d for d in os.listdir(ndksa_root) if os.path.isdir(os.path.join(ndksa_root, d))]
return ndksa_toolchains
def _create_mk_toolchain_script(self, ndk_root, hash_bang_missing):
if ver.version_compare(self._ndk_version, (12, 0)) >= 0:
mk_toolchain_script_basename = 'make_standalone_toolchain.py'
else:
mk_toolchain_script_basename = 'make-standalone-toolchain.sh'
mk_toolchain_script = os.path.join(ndk_root, 'build', 'tools', mk_toolchain_script_basename)
# print("mk_toolchain_script: " + mk_toolchain_script)
assert os.path.exists(mk_toolchain_script)
if hash_bang_missing:
mk_toolchain_script_tmp = os.path.join(ndk_root, 'build', 'tools', 'make-standalone-toolchain.bash')
self._add_bash_hash_bang(mk_toolchain_script, mk_toolchain_script_tmp)
else:
mk_toolchain_script_tmp = mk_toolchain_script
return mk_toolchain_script_tmp
def _patch_clang_shell_script(self, clang_script):
if not os.path.exists(clang_script):
return
script_tmp = clang_script + '.tmp'
self._add_bash_hash_bang(clang_script, script_tmp)
assert os.path.exists(script_tmp)
os.remove(clang_script)
os.rename(script_tmp, clang_script)
def _add_bash_hash_bang(self, script_old, script_new):
if not os.path.exists(script_old):
raise Exception("The script " + script_old + " does not exist.")
# read the content of the original script
input_lines = []
with open(script_old) as fin:
for line in fin:
input_lines.append(line.rstrip())
# create a new script with a hash bang
if os.path.exists(script_new):
os.remove(script_new)
with open(script_new, "w") as fout:
if not re.match(r'#!\s*/[a-zA-Z]+', input_lines[0]):
fout.write("#!/bin/bash\n")
for line in input_lines:
fout.write(line + "\n")
# make the script executable
st = os.stat(script_new)
os.chmod(script_new, st.st_mode | stat.S_IXUSR)
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/common/bldtools.py 0000775 0000000 0000000 00000216722 14420260131 0023752 0 ustar 00root root 0000000 0000000 from __future__ import print_function
import glob
import logging
import os
import platform
import re
import shutil
import subprocess
import sys
import tempfile
import textwrap
import pyhhi.build.common.system as system
import pyhhi.build.common.util as util
import pyhhi.build.common.ver as ver
class MsvcRegistry(object):
class __MsvcRegistry(object):
def __init__(self):
self._logger = logging.getLogger(__name__)
self._sys_info = system.SystemInfo()
self._supported_msvc_versions = ['14.2', '14.1', '14.0', '12.0', '11.0', '10.0']
program_dir = self._sys_info.get_program_dir('x86')
# VS2019, VS2017 come with a locator tool vswhere to search for the installation directory.
# The dictionary _msvc_install_dir_dict will be augmented with keys 14.2 and 14.1 by method _do_inventory_vc14x().
self._msvc_install_dir_dict = {'14.0': [os.path.join(program_dir, "Microsoft Visual Studio 14.0", 'VC')],
'12.0': [os.path.join(program_dir, "Microsoft Visual Studio 12.0", 'VC')],
'11.0': [os.path.join(program_dir, "Microsoft Visual Studio 11.0", 'VC')],
'10.0': [os.path.join(program_dir, "Microsoft Visual Studio 10.0", 'VC')]}
# a list of sorted version tuples identifying the installed MSVC products
self._installed_msvc_versions = []
# key = msvc_version, value = full path of vcvarsall.bat
self._compiler_command_dict = {}
# key = msvc_version, value = options to be passed to the setup command; e.g. -vcvars_ver=14.0, -vcvars_ver=14.1x
self._compiler_command_option_dict = {}
# key = msvc_version, value = vc version
self._compiler_version_dict = {}
# key = msvc_version, value = True/False
self._is_vs2017_toolset_dict = {}
# key = msvc_version, value = True/False; e.g. '14.1' -> True indicates 14.1 is an alternative toolset installed with vs2019.
self._is_vs2019_toolset_dict = {}
# clear information on alternative toolset upfront
for version in self._supported_msvc_versions:
self._is_vs2017_toolset_dict[version] = False
self._is_vs2019_toolset_dict[version] = False
if self._logger.isEnabledFor(logging.DEBUG):
self._logger.debug("performing in-depth VS inventory for debugging.")
self._do_inventory_winreg()
vswhere = self._find_vswhere()
if vswhere:
# Update VS2019 installation paths via vswhere.exe
self._do_inventory_vc14x('14.2', vswhere)
# Update VS2017 installation paths via vswhere.exe
self._do_inventory_vc14x('14.1', vswhere)
else:
pass
self._do_inventory()
self._dump_inventory()
def _dump_inventory(self):
if self._logger.isEnabledFor(logging.DEBUG):
for version in self._installed_msvc_versions:
version_str = ver.version_tuple_to_str(version)
cl_version_str = ver.version_tuple_to_str(self._compiler_version_dict[version_str])
self._logger.debug("found MSVC version {}, CL version {}, setup={}".format(version_str, cl_version_str, self._compiler_command_dict[version_str]))
def get_compiler_command(self, version=None):
if version is None:
version = self.get_latest_version()
return self._compiler_command_dict[ver.version_tuple_to_str(version)]
def get_compiler_version(self, version=None):
if version is None:
version = self.get_latest_version()
return self._compiler_version_dict[ver.version_tuple_to_str(version)]
def get_latest_version(self, max_version=None):
if not self._installed_msvc_versions:
raise Exception("No supported Microsoft Visual C++ version found, please check your installation or contact technical support.")
if max_version is None:
max_version = ver.version_tuple_from_str(self._supported_msvc_versions[0])
for version in self._installed_msvc_versions:
if ver.version_compare(max_version, version) >= 0:
return version
raise Exception("No suitable Microsoft Visual C++ version found, please check your installation or contact technical support.")
def is_version_installed(self, version):
if (ver.version_compare(version, ver.version_tuple_from_str(self._supported_msvc_versions[0])) > 0) or (ver.version_compare(version, ver.version_tuple_from_str(self._supported_msvc_versions[-1])) < 0):
raise Exception("Microsoft Visual C++ toolset msvc-" + ver.version_tuple_to_str(version) + " is not supported.")
for v in self._installed_msvc_versions:
if ver.version_compare(v, version) == 0:
return True
return False
def is_vs2017_toolset(self, version):
if not self.is_version_installed(version):
return False
version_str = ver.version_tuple_to_str(version)
if version_str in self._is_vs2017_toolset_dict:
return self._is_vs2017_toolset_dict[version_str]
return False
def is_vs2019_toolset(self, version):
if not self.is_version_installed(version):
return False
version_str = ver.version_tuple_to_str(version)
if version_str in self._is_vs2019_toolset_dict:
return self._is_vs2019_toolset_dict[version_str]
return False
def _do_inventory(self):
for version in self._supported_msvc_versions:
if version not in self._msvc_install_dir_dict:
continue
setup_cmd = None
for vc_dir in self._msvc_install_dir_dict[version]:
self._logger.debug("trying VC install dir %s", vc_dir)
# multiple vc install directories per version are possible to support community and professional/enterprise editions.
cl_cmd = self._find_cl_cmd(vc_dir, version)
if cl_cmd:
self._logger.debug("found VC compiler %s", cl_cmd)
if version in ['14.2', '14.1']:
setup_cmd = os.path.normpath(os.path.join(os.path.dirname(cl_cmd), '..', '..', '..', '..', '..', '..', 'Auxiliary', 'Build', 'vcvarsall.bat'))
elif version in ['14.0']:
if os.path.exists(os.path.join(vc_dir, '..', 'Common7', 'IDE', 'devenv.exe')):
self._logger.debug("found VS 2015 IDE installed.")
setup_cmd = os.path.join(vc_dir, 'vcvarsall.bat')
elif '14.2' in self._compiler_command_dict:
# We've got 14.0 as an alternative VS 2019 toolset.
self._logger.debug("found msvc-14.0 installed as an alternative VS 2019 toolset.")
setup_cmd = self._compiler_command_dict['14.2']
self._is_vs2019_toolset_dict[version] = True
self._compiler_command_option_dict[version] = '-vcvars_ver=14.0'
elif '14.1' in self._compiler_command_dict:
# We've got 14.0 as an alternative VS 2017 toolset.
self._logger.debug("found msvc-14.0 installed as an alternative VS 2017 toolset.")
setup_cmd = self._compiler_command_dict['14.1']
self._is_vs2017_toolset_dict[version] = True
self._compiler_command_option_dict[version] = '-vcvars_ver=14.0'
else:
setup_cmd = os.path.join(vc_dir, 'vcvarsall.bat')
break
if (setup_cmd is not None) and os.path.exists(setup_cmd):
assert cl_cmd is not None
cl_version = self._query_msvc_compiler_version(cl_cmd)
self._compiler_command_dict[version] = setup_cmd
self._compiler_version_dict[version] = cl_version
if (version == '14.2') and ('14.1' not in self._msvc_install_dir_dict):
# Search for alternative toolset vc141 installed with vs2019
self._logger.debug("searching for alternative VS2019 toolset vc141.")
vc_dir in self._msvc_install_dir_dict[version][0]
setup_cmd = self._compiler_command_dict['14.2']
cl_cmd = self._find_cl_cmd(vc_dir, '14.1')
if cl_cmd:
self._logger.debug("found alternative VC compiler {}".format(cl_cmd))
cl_version = self._query_msvc_compiler_version(cl_cmd)
self._compiler_command_dict['14.1'] = setup_cmd
self._compiler_version_dict['14.1'] = cl_version
self._compiler_command_option_dict['14.1'] = '-vcvars_ver=14.1x'
self._is_vs2019_toolset_dict['14.1'] = True
msvc_version_list = []
for version in self._compiler_version_dict:
msvc_version_list.append(ver.version_tuple_from_str(version))
if msvc_version_list:
self._installed_msvc_versions = ver.version_list_sort(msvc_version_list)
self._installed_msvc_versions.reverse()
# print("sorted msvc versions: ", self._installed_msvc_versions)
def _find_cl_cmd(self, vc_inst_dir, version_str):
cl_cmd = None
if version_str in ['14.2', '14.1']:
msvc_dir = os.path.join(vc_inst_dir, 'Tools', 'MSVC')
if os.path.exists(msvc_dir):
version_dir_list = [ver.version_tuple_from_str(x) for x in os.listdir(msvc_dir) if re.match(r'[0-9.]+$', x)]
if version_dir_list:
version_dir_list = ver.version_list_sort(version_dir_list)
version_dir_list.reverse()
# VS2019 installs toolset v141 side-by-side in a folder named '14.16.27023', toolset v142 is
# installed in a folder named '14.20.27508'.
for version in version_dir_list:
if (version_str == '14.2') and (version[1] >= 30):
self._logger.debug("ignoring cl installation folder: {}".format(os.path.join(msvc_dir, ver.version_tuple_to_str(version))))
continue
if (version_str == '14.1') and (version[1] >= 20):
self._logger.debug("ignoring cl installation folder: {}".format(os.path.join(msvc_dir, ver.version_tuple_to_str(version))))
continue
cl_cmd = os.path.join(msvc_dir, ver.version_tuple_to_str(version), 'bin', 'HostX64', 'x64', 'cl.exe')
if os.path.exists(cl_cmd):
break
else:
cl_cmd = None
else:
cl_cmd = os.path.join(vc_inst_dir, 'bin', 'amd64', 'cl.exe')
if not os.path.exists(cl_cmd):
cl_cmd = None
if cl_cmd:
self._logger.debug("found cl: {}".format(cl_cmd))
return cl_cmd
def _query_msvc_compiler_version(self, cl_cmd):
version_file_dir = tempfile.mkdtemp()
version_file = os.path.join(version_file_dir, 'vc_version_peek.h')
with open(version_file, "w") as versionf:
versionf.write(textwrap.dedent("""\
#pragma message(_MSC_FULL_VER _MSC_BUILD)
""".format()))
retv = subprocess.check_output([cl_cmd, '/EP', version_file], stderr=self._sys_info.get_subprocess_devnull(), universal_newlines=True).lstrip()
# print("_query_msvc_compiler_versionf(): retv=" + retv)
re_match = re.match(r'#pragma\s+message\(([0-9][0-9])([0-9][0-9])([0-9]+)\s+([0-9]+)\)', retv)
if re_match:
cl_version_str = "%s.%s.%s.%s" % (re_match.group(1), re_match.group(2), re_match.group(3), re_match.group(4))
# print("_query_msvc_compiler_cpp(): cl version: " + cl_version_str)
cl_version = ver.version_tuple_from_str(cl_version_str)
else:
raise Exception("Failed to parse compiler version from " + version_file + ". Please contact technical support.")
if os.path.exists(version_file):
# print("temp. version file=" + version_file)
shutil.rmtree(version_file_dir)
return cl_version
def _do_inventory_winreg(self):
if int(platform.python_version_tuple()[0]) >= 3:
import winreg
win_registry = winreg
else:
import _winreg
win_registry = _winreg
msvc_registry_sections = ['Microsoft', 'Wow6432Node\\Microsoft']
reg_key_joiner = "\\"
vc_install_dir_dict = {}
for version in self._supported_msvc_versions:
for section in msvc_registry_sections:
try:
sub_key = reg_key_joiner.join(['Software', section, 'VisualStudio', version, 'Setup', 'VC' ])
#print("_find_latest_msvc(): trying registry key:" + sub_key)
rkey = win_registry.OpenKey(win_registry.HKEY_LOCAL_MACHINE, sub_key)
#print("_find_latest_msvc(): found registry key:" + sub_key)
vc_product_dir = win_registry.QueryValueEx(rkey, 'ProductDir')[0]
vc_product_dir = util.normalize_path(vc_product_dir)
if os.path.exists(os.path.join(vc_product_dir, 'vcvarsall.bat')):
# check for vcvarsall.bat won't work as its existence won't indicate a complete installation of the development product.
cl_cmd = self._find_cl_cmd(vc_product_dir, version)
if (cl_cmd is not None) and os.path.exists(cl_cmd):
vc_install_dir_dict[version] = util.normalize_path(vc_product_dir)
self._logger.debug("found VC install dir %s", vc_install_dir_dict[version])
win_registry.CloseKey(rkey)
except WindowsError:
continue
return vc_install_dir_dict
def _do_inventory_vc14x(self, msvc_version_str, vswhere=None):
if msvc_version_str == '14.2':
vswhere_version_expr = '[16.0,17.0)'
vs_alias_str = 'VS2019'
elif msvc_version_str == '14.1':
vswhere_version_expr = '[15.0,16.0)'
vs_alias_str = 'VS2017'
else:
assert False
if vswhere is None:
vswhere = self._find_vswhere()
if vswhere is None:
self._logger.debug("{0} locator vswhere.exe not found, {0} detection disabled.".format(vs_alias_str))
return
else:
self._logger.debug("found {} locator: {}".format(vs_alias_str, vswhere))
vc_dir_fnd = False
try:
vswhere_argv = [vswhere, '-latest']
# vswhere_argv.extend(['-products', 'Enterprise'])
# vswhere_argv.extend(['-products', 'Professional'])
# vswhere_argv.extend(['-products', 'Community'])
vswhere_argv.extend(['-products', '*'])
vswhere_argv.extend(['-requires', 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64'])
vswhere_argv.extend(['-property', 'installationPath'])
vswhere_argv.extend(['-version', vswhere_version_expr])
retv = subprocess.check_output(vswhere_argv, universal_newlines=True).rstrip()
if retv != '':
self._logger.debug("{} install path: {}".format(vs_alias_str, retv))
vc_dir = os.path.join(retv, 'VC')
if os.path.exists(vc_dir):
self._logger.debug("{} VC install path: {}".format(vs_alias_str, vc_dir))
self._msvc_install_dir_dict[msvc_version_str] = [vc_dir]
vc_dir_fnd = True
else:
self._logger.debug("{} install path: ".format(vs_alias_str))
except subprocess.CalledProcessError:
self._logger.debug("{} vswhere locator call failed for some reason.".format(vs_alias_str))
if not vc_dir_fnd:
self._logger.debug("{0} VC not found, {0} detection disabled.".format(vs_alias_str))
def _find_vswhere(self):
vswhere_prog = None
prog_dirs = [self._sys_info.get_program_dir('x86_64'), self._sys_info.get_program_dir('x86')]
for d in prog_dirs:
vswhere_dir = os.path.join(d, 'Microsoft Visual Studio', 'Installer')
if os.path.exists(os.path.join(vswhere_dir, 'vswhere.exe')):
vswhere_prog = os.path.join(vswhere_dir, 'vswhere.exe')
break
return vswhere_prog
# the singleton as a class attribute
instance = None
def __init__(self):
self._logger = logging.getLogger(__name__)
if MsvcRegistry.instance is None:
MsvcRegistry.instance = MsvcRegistry.__MsvcRegistry()
def __getattr__(self, item):
return getattr(MsvcRegistry.instance, item)
class Toolset(object):
class PlatformInfo(object):
def __init__(self, target_os, api_level=None):
# e.g. windows, linux, macosx, android, iphone, iphonesimulator
self._target_os = target_os
self._target_os_version = None
self._api_level = api_level
self._isysroot = None
# The sdk_version attribute is only available on MacOSX.
self._sdk_version = None
self._target_archs = []
# Some compilers require extra flags to emit object code complying with a specific ABI or platform
# specific SDK.
self._target_cflags_dict = {}
self._target_runtime_lib_dict = {}
def get_target_os(self):
return self._target_os
def get_target_os_version(self):
return self._target_os_version
def set_target_os_version(self, version):
self._target_os_version = version
self.set_sdk_version(version)
def get_sdk_version(self):
return self._sdk_version
def set_sdk_version(self, version):
self._sdk_version = version
def get_api_level(self):
return self._api_level
def set_api_level(self, api_level):
self._api_level = api_level
def get_isysroot(self):
return self._isysroot
def set_isysroot(self, isysroot):
self._isysroot = isysroot
def get_target_arch(self, index=None):
if index is None:
return self._target_archs
else:
return self._target_archs[index]
def set_target_archs(self, target_archs):
self._target_archs = target_archs
def get_target_cflags(self, target_arch):
if target_arch in self._target_cflags_dict:
return self._target_cflags_dict[target_arch]
else:
return tuple()
def set_target_cflags(self, target_arch, target_cflags):
self._target_cflags_dict[target_arch] = target_cflags
def get_target_runtime_libs(self, target_arch):
if target_arch in self._target_runtime_lib_dict:
return self._target_runtime_lib_dict[target_arch]
else:
return tuple()
def set_target_runtime_libs(self, target_arch, target_runtime_libs):
self._target_runtime_lib_dict[target_arch] = target_runtime_libs
def __init__(self, sys_info, toolset=None, stl='default'):
self._logger = logging.getLogger(__name__)
self._sys_info = sys_info
if stl == 'default':
# only relevant for Android toolchains.
stl = 'gnustl'
if sys_info.is_windows():
self._msvc_registry = MsvcRegistry()
self._toolset = None
self._toolset_versioned = None
self._toolset_info_short = None
self._is_mingw = False
# The ndk_finder attribute helps to qualify an Android toolset and will be created on first use.
self._ndk_finder = None
self._version = None
self._internal_version = None # msvc only: version number reported by cl /?
# A list of Platform objects
self._platform_info = []
self._compiler_cmd = None
self._compiler_prefix = None
self._compiler_tag = None
self._boost_compiler_tag = None
self._lib_debug_tag = 'd'
self._lib_prefix_shared = 'lib'
self._lib_prefix_static = 'lib'
self._intel_search_path = []
if sys_info.is_linux():
self._lib_ext_shared = ('.so', '.so')
self._lib_ext_static = '.a'
# Add Intel compiler search path
if os.path.exists(os.path.join('/opt', 'intel', 'bin')):
self._intel_search_path.append(os.path.join('/opt', 'intel', 'bin'))
elif sys_info.is_macosx():
self._lib_ext_shared = ('.dylib', '.dylib')
self._lib_ext_static = '.a'
# Add Intel compiler search path
self._intel_search_path.append(os.path.join('/usr', 'local', 'bin'))
if os.path.exists(os.path.join('/opt', 'intel', 'bin')):
self._intel_search_path.append(os.path.join('/opt', 'intel', 'bin'))
elif sys_info.is_windows():
# Assume msvc naming convention as the default on windows
self._lib_prefix_shared = ''
self._lib_prefix_static = 'lib'
self._lib_ext_shared = ('.dll', '.lib')
self._lib_ext_static = '.lib'
# Add Intel compiler search path
intel_inst_root = os.path.join(self._sys_info.get_program_dir('x86'), 'IntelSWTools', 'compilers_and_libraries', 'windows', 'bin')
if os.path.exists(os.path.join(intel_inst_root, 'intel64')):
self._intel_search_path.append(os.path.join(intel_inst_root, 'intel64'))
else:
assert False
# and set the toolset attributes with real values
self._qualify_toolset(sys_info, toolset, stl)
self._toolset_info_short = self._create_toolset_info_short()
def __str__(self):
s = "toolset: %s\n" % self._toolset
s += "toolset versioned: %s\n" % self._toolset_versioned
if self._internal_version:
s += "version: %s [%s]\n" % (ver.version_tuple_to_str(self._version),ver.version_tuple_to_str(self._internal_version))
else:
s += "version: %s\n" % ver.version_tuple_to_str(self._version)
if self._toolset.startswith('msvc'):
if self._msvc_registry.is_vs2017_toolset(self._version):
s += "VS 2017 toolset!\n"
if self._msvc_registry.is_vs2019_toolset(self._version):
s += "VS 2019 toolset!\n"
s += "platform(s):\n"
for platform_info in self._platform_info:
s += " target os: %s\n" % platform_info.get_target_os()
target_os_version = platform_info.get_target_os_version()
if target_os_version:
s += " target os version: %s\n" % ver.version_tuple_to_str(target_os_version)
sdk_version = platform_info.get_sdk_version()
if sdk_version:
s += " sdk version: %s\n" % ver.version_tuple_to_str(sdk_version)
s += " target arch: %s\n" % platform_info.get_target_arch()
for target in platform_info.get_target_arch():
cflags_tuple = platform_info.get_target_cflags(target)
if cflags_tuple:
cflags = ' '.join(cflags_tuple)
s += " " + target + " => cflags: " + cflags + "\n"
runtime_libs = platform_info.get_target_runtime_libs(target)
for lib in runtime_libs:
s += " rtl(" + target + "): " + lib + "\n"
isysroot = platform_info.get_isysroot()
if isysroot:
s += " isysroot: %s\n" % isysroot
s += "mingw?: %s\n" % self._is_mingw
s += "compiler prefix: %s\n" % self._compiler_prefix
s += "compiler command: %s\n" % self._compiler_cmd
s += "compiler tag: %s\n" % self._compiler_tag
s += "boost compiler tag: %s\n" % self._boost_compiler_tag
s += "lib debug tag: %s\n" % self._lib_debug_tag
s += "lib prefix shared: %s\n" % self._lib_prefix_shared
s += "lib prefix static: %s\n" % self._lib_prefix_static
s += "lib extension shared: %s %s\n" % self._lib_ext_shared
s += "lib extension static: %s\n" % self._lib_ext_static
return s
def get_toolset_info_short(self, target_arch=None):
"""Returns a short description of the toolset."""
str = self._toolset_info_short
# get the default platform
platform_info = self.get_platform_info(0)
if target_arch is None:
target_arch = platform_info.get_target_arch(0)
cflags_tuple = platform_info.get_target_cflags(target_arch)
if cflags_tuple:
str += '; '
str += 'toolset flags: ' + ' '.join(cflags_tuple)
return str
def get_toolset(self):
"""Returns the toolset string as understood by BoostBuild without a version suffix.
The following toolsets are supported: msvc, gcc, clang."""
return self._toolset
def get_version(self):
return self._version
def get_internal_version(self):
return self._internal_version
def get_toolset_versioned(self):
"""Returns the toolset string as understood by b2 with a version suffix.
Example: msvc-11.0 or gcc-4.8"""
return self._toolset_versioned
def get_platform_info(self, index=None):
"""Returns a list of PlatformInfo objects or a single PlatformInfo object consisting of
platform specific attributes.
Example: clang may support platforms macosx, iphone and iphonesimulator."""
if index is None:
return self._platform_info
else:
return self._platform_info[index]
def is_mingw(self):
return self._is_mingw
def get_compiler_prefix(self):
return self._compiler_prefix
def get_compiler_command(self):
"""Returns the absolute path of the c++ compiler."""
return self._compiler_cmd
def get_compiler_tag(self):
return self._compiler_tag
def get_boost_compiler_tag(self):
return self._boost_compiler_tag
def get_lib_debug_tag(self):
return self._lib_debug_tag
def get_lib_prefix_shared(self):
return self._lib_prefix_shared
def get_lib_prefix_static(self):
return self._lib_prefix_static
def get_lib_ext_shared(self):
return self._lib_ext_shared
def get_lib_ext_static(self):
return self._lib_ext_static
def _qualify_toolset(self, sys_info, toolset, stl='gnustl'):
# toolset is either
# 1) a toolset specification supported by Boost.Build: gcc-4.6, gcc, clang, msvc, msvc-x.y, darwin
# 2) a relative compiler command: clang++, g++, g++-4.9, g++-5
# 3) an absolute compiler command
if toolset is None:
toolset = self._get_default_toolset(sys_info)
# The relative compiler commands clang++, clang++-3.6, g++, g++-4.9 will be translated into the corresponding
# Boost.Build toolset specifications.
toolset = self._normalize_toolset_spec(toolset)
if self._qualify_android_toolset(sys_info, toolset, stl):
pass
else:
# Initialize the platform_info attributes for a native toolset.
platform_info = self.PlatformInfo(sys_info.get_platform())
platform_info.set_target_archs([sys_info.get_os_arch()])
# Handle msvc upfront to simplify the logic. The msvc toolset implies desktop windows for the time
# being. Portable platforms supported by msvc are not covered yet.
if toolset.find('msvc') >= 0:
self._toolset = 'msvc'
if toolset == 'msvc':
self._toolset_versioned = 'msvc-' + ver.version_tuple_to_str(self._msvc_registry.get_latest_version())
else:
self._toolset_versioned = toolset
re_match = re.match(r'msvc-([0-9.]+)$', self._toolset_versioned)
if re_match:
# make sure this version is installed
if not self._msvc_registry.is_version_installed(ver.version_tuple_from_str(re_match.group(1))):
raise Exception("Microsoft Visual C++ toolset msvc-" + re_match.group(1) + " is not installed.")
# found a full product version, assume 32 and 64 bit compilers are available
self._version = ver.version_tuple_from_str(re_match.group(1))
self._compiler_cmd = self._msvc_registry.get_compiler_command(self._version)
if sys_info.get_os_arch() == 'x86_64':
platform_info.set_target_archs(['x86', 'x86_64'])
else:
platform_info.set_target_archs(['x86'])
self._platform_info.append(platform_info)
# extract msvc/cl's internal version; e.g. 18.0.40629
self._internal_version = self._msvc_registry.get_compiler_version(self._version)
else:
raise Exception("The toolset " + toolset + " is not supported, please contact technical support.")
else:
if os.path.isabs(toolset):
self._compiler_cmd = toolset
else:
if sys_info.is_macosx():
if toolset == 'clang':
# Assume an Xcode toolchain, /usr/bin/clang++ will be ignored to support side-by-side installations of different Xcode toolchains.
self._compiler_cmd = self._find_xcode_clang()
elif toolset == 'darwin':
self._compiler_cmd = util.find_tool_on_path('g++', True)
elif toolset == 'intel':
self._compiler_cmd = self._find_intel()
else:
raise Exception("The toolset " + toolset + " is not supported on MacOSX, please contact technical support.")
else:
# check for gcc-x.y and clang-x.y
re_match = re.match(r'(gcc|clang)-([0-9.]+)$', toolset)
if re_match:
# self._toolset_versioned = toolset
if re_match.group(1) == 'gcc':
self._compiler_cmd = self._find_versioned_compiler('g++', ver.version_tuple_from_str(re_match.group(2)))
elif re_match.group(1) == 'clang':
self._compiler_cmd = self._find_versioned_compiler('clang++', ver.version_tuple_from_str(re_match.group(2)))
else:
assert False
elif toolset == 'gcc':
self._compiler_cmd = util.find_tool_on_path('g++', True)
elif toolset == 'clang':
self._compiler_cmd = self._find_clang()
elif toolset == 'intel':
self._compiler_cmd = self._find_intel()
else:
# toolset is supposed to be a c++ compiler command like g++-4.7, clang++-4.5 or some prefixed cross compiler.
self._compiler_cmd = util.find_tool_on_path(toolset, True)
# now guess the toolset category given the compiler command
self._toolset = self._get_toolset_category(self._compiler_cmd)
if self._toolset == 'clang':
self._version = self._get_clang_version(self._compiler_cmd)
elif self._toolset in ['gcc', 'darwin']:
self._version = self._get_gcc_version(self._compiler_cmd)
elif self._toolset == 'intel':
self._version = self._get_intel_version(self._compiler_cmd)
else:
assert False
# This does not work if /usr/bin/clang++ is linked to clang somewhere in the
# filesystem.
#if sys_info.is_linux() or sys_info.is_macosx():
# self._compiler_cmd = os.path.realpath(self._compiler_cmd)
if self._toolset == 'darwin':
self._platform_info.append(platform_info)
elif self._toolset == 'clang':
if sys_info.is_macosx():
(sdk_path, sdk_version) = self._discover_macosx_sdk(platform_info.get_target_os())
platform_info.set_isysroot(sdk_path)
platform_info.set_target_os_version(sdk_version)
self._platform_info.append(platform_info)
# Add iphone platform information
platform_info = self.PlatformInfo('iphone')
platform_info.set_target_archs(['combined', 'armv7', 'arm64'])
(sdk_path, sdk_version) = self._discover_macosx_sdk(platform_info.get_target_os())
platform_info.set_isysroot(sdk_path)
platform_info.set_target_os_version(sdk_version)
self._platform_info.append(platform_info)
# Add iphonesimulator platform information
platform_info = self.PlatformInfo('iphonesimulator')
platform_info.set_target_archs(['combined', 'x86_64', 'x86'])
(sdk_path, sdk_version) = self._discover_macosx_sdk(platform_info.get_target_os())
platform_info.set_isysroot(sdk_path)
platform_info.set_target_os_version(sdk_version)
self._platform_info.append(platform_info)
elif sys_info.is_linux():
self._platform_info.append(platform_info)
else:
assert False
elif self._toolset == 'gcc':
# find out the compiler prefix if any.
self._compiler_prefix = self._get_compiler_prefix(self._compiler_cmd)
gcc_machine = self._get_machine(self._compiler_cmd)
# analyze the compiler's machine string to understand what kind of cross compiler we've got.
# e.g. ubuntu: x86_64-w64-mingw32 or i686-w64-mingw32
# windows: x86_64-w64-mingw32
# mingw32: mingw32
if re.search('mingw', gcc_machine):
self._is_mingw = True
platform_info = self.PlatformInfo('windows')
if re.match('x86_64-', gcc_machine):
if sys_info.is_windows():
# assume the 64 bit compiler can do 32 bit as well.
platform_info.set_target_archs(['x86_64', 'x86'])
else:
platform_info.set_target_archs(['x86_64'])
else:
platform_info.set_target_archs(['x86'])
elif re.match('arm-', gcc_machine):
platform_info.set_target_archs(['arm'])
elif re.match('aarch64-', gcc_machine):
platform_info.set_target_archs(['aarch64'])
self._platform_info.append(platform_info)
elif self._toolset == 'intel':
if sys_info.is_linux():
self._platform_info.append(platform_info)
elif sys_info.is_macosx():
(sdk_path, sdk_version) = self._discover_macosx_sdk(platform_info.get_target_os())
platform_info.set_isysroot(sdk_path)
platform_info.set_target_os_version(sdk_version)
self._platform_info.append(platform_info)
elif sys_info.is_windows():
#platform_info.set_target_archs(['x86_64', 'x86'])
self._platform_info.append(platform_info)
else:
raise Exception("The toolset " + self._toolset + " is not supported on this platform yet, please contact technical support.")
else:
assert False
# fill in the compiler taqs
if self._toolset == 'msvc':
self._compiler_tag = self._toolset_versioned
self._boost_compiler_tag = 'vc' + str(self._version[0]) + str(self._version[1])
self._lib_debug_tag = 'gd'
elif self._toolset == 'darwin':
self._compiler_tag = 'gcc-' + ver.version_tuple_to_str(self._version[:2])
self._boost_compiler_tag = 'xgcc' + str(self._version[0]) + str(self._version[1])
elif self._toolset == 'clang':
self._compiler_tag = 'clang-' + ver.version_tuple_to_str(self._version[:2])
if sys_info.is_macosx():
# The boost libraries are tagged with the version of the gcc backend and not the
# clang version.
gcc_version = self._get_gcc_version(self._compiler_cmd)
self._boost_compiler_tag = 'clang-darwin' + str(gcc_version[0]) + str(gcc_version[1])
elif sys_info.is_linux():
self._boost_compiler_tag = 'clang' + str(self._version[0]) + str(self._version[1])
else:
assert False
elif self._toolset == 'gcc':
if self._is_mingw:
self._compiler_tag = 'gcc-mingw-' + ver.version_tuple_to_str(self._version[:2])
self._boost_compiler_tag = 'mgw' + str(self._version[0]) + str(self._version[1])
self._lib_prefix_shared = 'lib'
self._lib_prefix_static = 'lib'
self._lib_ext_shared = ('.dll', '.dll.a')
self._lib_ext_static = '.a'
self._add_mingw_runtime_lib_info(sys_info)
else:
self._compiler_tag = 'gcc-' + ver.version_tuple_to_str(self._version[:2])
self._boost_compiler_tag = 'gcc' + str(self._version[0]) + str(self._version[1])
elif self._toolset == 'intel':
self._compiler_tag = 'intel-' + ver.version_tuple_to_str(self._version[:2])
if sys_info.is_linux() or sys_info.is_macosx():
self._boost_compiler_tag = 'il' + str(self._version[0]) + str(self._version[1])
elif sys_info.is_windows():
self._lib_debug_tag = 'gd'
self._boost_compiler_tag = 'iw'
else:
assert False
else:
assert False
def _normalize_toolset_spec(self, toolset):
self._logger.debug("entering toolset=%s", toolset)
# normalize a toolset specification like g++-4.9 to gcc-4.9 as understood by Boost.Build.
if self._sys_info.is_macosx():
# deals with cmake which seems to detect c++ rather than clang++ on macosx. For some reason /usr/bin/c++ is linked to clang++
# and the same is true for the Xcode path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++.
re_match = re.match(r'(clang|[cg])\+\+(-[0-9.]+)?', toolset, re.IGNORECASE)
else:
re_match = re.match(r'(clang|g)\+\+(-[0-9.]+)?', toolset, re.IGNORECASE)
if re_match:
toolset_norm = re_match.group(1)
if toolset_norm == 'g':
toolset_norm = 'gcc'
elif toolset_norm == 'c':
toolset_norm = 'clang'
if re_match.group(2):
toolset_norm += re_match.group(2)
else:
toolset_norm = toolset
self._logger.debug("returning toolset=%s", toolset_norm)
return toolset_norm
def _get_toolset_category(self, compiler_cmd):
assert os.path.isabs(compiler_cmd)
basename = os.path.basename(compiler_cmd)
if (basename.find('clang') >= 0) or (self._sys_info.is_macosx() and (basename == 'c++')):
# deals with cmake which seems to detect c++ rather than clang++ on macosx.
toolset_category = 'clang'
elif (basename == 'icpc') or (basename == 'icl.exe'):
toolset_category = 'intel'
else:
if self._sys_info.is_macosx():
if basename in ['g++', 'gcc']:
toolset_category = 'darwin'
else:
toolset_category = 'gcc'
else:
toolset_category = 'gcc'
return toolset_category
def _add_mingw_runtime_lib_info(self, sys_info):
if not sys_info.is_linux():
return
# The LINUX mingw compilers are configured to link to the shared runtime by default, which has to be deployed to
# the target system.
if os.path.dirname(self.get_compiler_command()) != '/usr/bin':
# Ignore this mingw compiler, it might be user private.
return
platform_info = self.get_platform_info(0)
target_arch = platform_info.get_target_arch(0)
compiler_prefix = self.get_compiler_prefix()
compiler_version = ver.version_tuple_to_str(self.get_version()[:2])
re_dll_names = re.compile(r'((libstdc.*)|(libgcc_s_.*)|(libwinpthread.*))\.dll$', re.IGNORECASE)
dir_list = []
if sys_info.get_os_distro() == 'ubuntu':
# Ubuntu 15.04
# /usr/lib/gcc/x86_64-w64-mingw32/4.9-posix/libstdc++-6.dll
# /usr/lib/gcc/x86_64-w64-mingw32/4.9-posix/libgcc_s_seh-1.dll
# /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll
#
# Ubuntu 14.04
# /usr/lib/gcc/x86_64-w64-mingw32/4.8/libstdc++-6.dll
# /usr/lib/gcc/x86_64-w64-mingw32/4.8/libgcc_s_sjlj-1.dll
# /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll
#
thread_model = self._get_gcc_thread_model(self.get_compiler_command())
if thread_model == 'win32':
# Assume thread model win32 without a dependency on libwinpthread.
dir_list = [os.path.join('/usr/lib/gcc', compiler_prefix, compiler_version + '-win32')]
else:
# Assume thread model posix.
dir_list = [os.path.join('/usr/lib/gcc', compiler_prefix, compiler_version),
os.path.join('/usr/lib/gcc', compiler_prefix, compiler_version + '-posix'),
os.path.join('/usr', compiler_prefix, 'lib')]
elif sys_info.is_redhat():
retv = subprocess.check_output([self.get_compiler_command(), '-print-sysroot'], universal_newlines=True)
sys_root = retv.lstrip().rstrip()
if (len(sys_root) > 0) and os.path.exists(sys_root):
dir_list = [os.path.join(sys_root, 'mingw', 'bin')]
dll_list = []
for dir in dir_list:
if os.path.exists(dir):
file_list = [os.path.join(dir, f) for f in os.listdir(dir) if re_dll_names.match(f)]
if file_list:
dll_list.extend(file_list)
if dll_list:
#print('_add_mingw_runtime_lib_info', dll_list)
platform_info.set_target_runtime_libs(target_arch, tuple(dll_list))
def _get_default_toolset(self, sys_info):
toolset = None
if 'BJAM_TOOLSET' in os.environ:
# A power users can override the platform dependent default toolset via his environment.
#
# e.g. macosx: BJAM_TOOLSET=clang
# windows: BJAM_TOOLSET=msvc-10.0
#
toolset = os.environ['BJAM_TOOLSET']
else:
if sys_info.is_linux():
toolset = 'gcc'
elif sys_info.is_macosx():
#toolset = 'darwin'
toolset = 'clang'
elif sys_info.is_windows():
# the default toolset is the latest msvc.
toolset = 'msvc-' + ver.version_tuple_to_str(self._msvc_registry.get_latest_version())
else:
assert False
return toolset
def _get_gcc_version(self, gcc_cmd):
# gcc -dumpversion may just emit the major version (g++-7/ubuntu 17.10)
retv = subprocess.check_output([gcc_cmd, '-E', '-dM', '-x', 'c++', os.devnull], universal_newlines=True)
lines = retv.splitlines()
gcc_version_list = [0, 0, 0]
re_gcc_version = re.compile(r'#define\s+(__GNUC__|__GNUC_MINOR__|__GNUC_PATCHLEVEL__)\s+(\d+)')
for l in lines:
re_match = re_gcc_version.match(l)
if re_match:
if re_match.group(1) == '__GNUC__':
gcc_version_list[0] = int(re_match.group(2), 10)
self._logger.debug("found gcc major %d", gcc_version_list[0])
elif re_match.group(1) == '__GNUC_MINOR__':
gcc_version_list[1] = int(re_match.group(2), 10)
self._logger.debug("found gcc minor %d", gcc_version_list[1])
elif re_match.group(1) == '__GNUC_PATCHLEVEL__':
gcc_version_list[2] = int(re_match.group(2), 10)
self._logger.debug("found gcc patch level %d", gcc_version_list[2])
version = tuple(gcc_version_list)
return version
def _get_gcc_thread_model(self, gcc_cmd):
thread_model = 'posix'
retv = subprocess.check_output([gcc_cmd, '-v'], stderr=subprocess.STDOUT, universal_newlines=True)
lines = retv.splitlines()
re_thread_model = re.compile(r'Thread model:\s*(\S+)', re.IGNORECASE)
for l in lines:
re_match = re_thread_model.match(l)
if re_match:
thread_model = re_match.group(1)
return thread_model
def _get_clang_version(self, clang_cmd):
# ubuntu: Ubuntu clang version 3.0-6ubuntu3 (tags/RELEASE_30/final) (based on LLVM 3.0)
# macosx:
retv = subprocess.check_output([clang_cmd, '--version'], universal_newlines=True)
version_response = retv.rstrip()
lines = version_response.splitlines()
re_version_match = re.search(r'\s+version\s+([0-9]+\.[0-9]+)', lines[0], re.IGNORECASE)
if not re_version_match:
raise Exception("The clang compiler has returned an unsupported version string. Please contact technical support.")
return ver.version_tuple_from_str(re_version_match.group(1))
def _get_intel_version(self, icpc_cmd):
if self._sys_info.is_windows():
re_version_match = None
# stderr=subprocess.STDOUT:
retv = subprocess.check_output([icpc_cmd, '/?'], stderr=subprocess.STDOUT, universal_newlines=True)
version_response = retv.rstrip()
lines = version_response.splitlines()
re_version_match = re.search(r'\s+Version\s+([0-9.]+)', lines[0], re.IGNORECASE)
else:
retv = subprocess.check_output([icpc_cmd, '--version'], universal_newlines=True)
version_response = retv.rstrip()
lines = version_response.splitlines()
re_version_match = re.match(r'^icpc\s+[^0-9.]+\s+([0-9.]+)', lines[0], re.IGNORECASE)
if not re_version_match:
raise Exception("The intel compiler has returned an unsupported version string. Please contact technical support.")
return ver.version_tuple_from_str(re_version_match.group(1))
def _get_machine(self, gcc_cmd):
retv = subprocess.check_output([gcc_cmd, '-dumpmachine'], universal_newlines=True)
return retv.lower()
def _get_compiler_prefix(self, compiler_cmd):
# same for gcc and clang
if os.path.isabs(compiler_cmd):
compiler_cmd = os.path.basename(compiler_cmd)
# arm-linux-gnueabihf-g++-4.8
# arm-linux-gnueabihf-g++
# arm-linux-androideabi-g++
# arm-linux-androideabi-g++-4.9
# i686-w64-mingw32-gcc-4.8
# i686-w64-mingw32-gcc
# arm-linux-androideabi-clang
compiler_cmd_parts = compiler_cmd.split('-')
if len(compiler_cmd_parts) < 4:
return None
else:
return '-'.join(compiler_cmd_parts[:3])
def _create_toolset_info_short(self):
toolset_info = None
if self._toolset == 'msvc':
toolset_info = self._toolset + '-' + ver.version_tuple_to_str(self._version)
if self._internal_version:
toolset_info += ' [' + ver.version_tuple_to_str(self._internal_version) + ']'
elif self._toolset in ['clang', 'darwin']:
toolset_info = self._toolset + ' ' + ver.version_tuple_to_str(self._version)
elif self._toolset == 'gcc':
toolset_info = 'gcc ' + ver.version_tuple_to_str(self._version)
if self._compiler_cmd != 'g++':
toolset_info += ' using ' + self._compiler_cmd
elif self._toolset == 'intel':
toolset_info = 'intel ' + ver.version_tuple_to_str(self._version)
else:
assert False
return toolset_info
def _find_xcode_clang(self):
retv = subprocess.check_output(['xcrun', '--sdk', 'macosx', '--find', 'clang++'], universal_newlines=True)
clang_cmd = retv.lstrip().rstrip()
if not os.path.exists(clang_cmd):
raise Exception("Discovery of Xcode clang failed, please contact technical support.")
return clang_cmd
def _find_clang(self):
if self._sys_info.is_linux():
clang_cmd = util.find_tool_on_path('clang++')
if clang_cmd is None:
# Try /usr/bin/clang++-x.y as a fallback, ubuntu clang packages may not add a link to the default version.
clang_cmds = glob.glob('/usr/bin/clang++-[0-9]*')
if clang_cmds:
# select the highest version.
re_clang_version = re.compile(r'.*\+\+-([0-9.]+)$')
version_list = []
for clang in clang_cmds:
re_match = re_clang_version.match(clang)
if re_match:
version_list.append(ver.version_tuple_from_str(re_match.group(1)))
version_list = ver.version_list_sort(version_list)
clang_cmd = '/usr/bin/clang++-' + ver.version_tuple_to_str(version_list[-1])
else:
clang_cmd = util.find_tool_on_path('clang++')
if clang_cmd is None:
raise Exception("Discovery of clang++ failed, please check your installation or contact technical support.")
return clang_cmd
def _find_intel(self):
icpc_cmd = None
if self._intel_search_path:
if self._sys_info.is_linux() or self._sys_info.is_macosx():
icpc_cmd = util.find_tool_on_path('icpc', search_path=self._intel_search_path)
elif self._sys_info.is_windows():
icpc_cmd = util.find_tool_on_path('icl.exe', search_path=self._intel_search_path)
else:
assert False
if icpc_cmd is None:
raise Exception("Discovery of Intel compiler failed, please check your installation or contact technical support.")
return icpc_cmd
def _find_versioned_compiler(self, compiler_prog, toolset_version):
"""Find versioned compiler on the path."""
self._logger.debug("entering: compiler=%s %s", compiler_prog, ver.version_tuple_to_str(toolset_version))
compiler_cmd = util.find_tool_on_path(compiler_prog + '-' + ver.version_tuple_to_str(toolset_version))
if compiler_cmd:
self._logger.debug("returning: %s", compiler_cmd)
return compiler_cmd
# Starting with g++ 5.x ubuntu systems use g++-5 instead of g++-..
compiler_cmd = util.find_tool_on_path(compiler_prog + '-' + str(toolset_version[0]))
if compiler_cmd is None:
# Search for the compiler without a version suffix but make sure its version matches the toolset version
compiler_cmd = util.find_tool_on_path(compiler_prog, True)
self._logger.debug("con't validating version of %s, expected: %s", compiler_cmd, ver.version_tuple_to_str(toolset_version))
version = None
if compiler_prog.startswith('g++'):
version = self._get_gcc_version(compiler_cmd)
elif compiler_prog.startswith('clang++'):
version = self._get_clang_version(compiler_cmd)
else:
assert False
if version:
assert len(version) >= 2
if ver.version_compare(version[:2], toolset_version) != 0:
raise Exception("Search for compiler command " + compiler_prog + " version " + ver.version_tuple_to_str(toolset_version) + " failed, please contact technical support.")
self._logger.debug("returning: %s", compiler_cmd)
return compiler_cmd
def _discover_macosx_sdk(self, target_os):
sdk_version = None
if target_os == 'macosx':
sdk = target_os
elif target_os == 'iphone':
sdk = 'iphoneos'
elif target_os == 'iphonesimulator':
sdk = target_os
else:
assert False
retv = subprocess.check_output(['xcrun', '--sdk', sdk, '--show-sdk-path'], universal_newlines=True)
sdk_path = retv.lstrip().rstrip()
if not os.path.exists(sdk_path):
raise Exception("The location of the platform SDK cannot be discovered, please contact technical support.")
sdk_basename = os.path.basename(sdk_path)
re_match = re.match(r'[^0-9]+(\d+\.\d+)\.sdk$', sdk_basename, re.IGNORECASE)
if re_match:
sdk_version = ver.version_tuple_from_str(re_match.group(1))
return (sdk_path, sdk_version)
def _qualify_android_toolset(self, sys_info, toolset, stl='gnustl'):
if sys_info.is_windows():
# No Android support on windows yet.
return False
# All android cross compilers are supposed to be named '[path]*android*'.
if os.path.isabs(toolset):
toolset_cmd = os.path.basename(toolset)
else:
toolset_cmd = toolset
if toolset_cmd.find('android') < 0:
return False
if os.path.isabs(toolset):
toolset_cmd = toolset
else:
# toolset is supposed to be a prefixed g++ or possibly clang++ command.
toolset_cmd = util.find_tool_on_path(toolset)
if toolset_cmd is None:
# analyze toolset and search for -android or -androideabi
toolset_prefix_list = toolset.split('-')
if len(toolset_prefix_list) < 4:
return False
if re.match('android', toolset_prefix_list[2]):
# android or androideabi
toolchain_prefix = '-'.join(toolset_prefix_list[:3])
ndk_finder = self._get_ndk_finder()
toolset_cmd = os.path.join(ndk_finder.get_ndksa_root(stl), toolchain_prefix, 'bin', toolset)
assert os.path.exists(toolset_cmd)
else:
return False
toolset_machine = self._get_machine(toolset_cmd)
if re.search('-android', toolset_machine):
toolset_machine_parts = toolset_machine.split('-')
if len(toolset_machine_parts) < 3:
return False
# Looks like this toolset is really a supported Android toolset, initialize all attributes.
self._compiler_cmd = toolset_cmd
self._compiler_prefix = self._get_compiler_prefix(toolset_cmd)
if re.match(r'.*((clang)|(clang\+\+))$', toolset_cmd):
self._toolset = 'clang'
else:
self._toolset = 'gcc'
platform_info = self.PlatformInfo('android', self._get_android_api_level(toolset_cmd))
if re.match('(armv5te)|(armv7a)|(arm)$', toolset_machine_parts[0]):
#armeabi armeabi-v7a armeabi-v7a-hard
platform_info.set_target_archs(['armeabi-v7a', 'armeabi'])
platform_info.set_target_cflags('armeabi-v7a', tuple(['-march=armv7-a', '-mfloat-abi=softfp', '-mfpu=vfpv3-d16']))
elif toolset_machine_parts[0] == 'aarch64':
platform_info.set_target_archs(['arm64-v8a'])
elif toolset_machine_parts[0] == 'i686':
platform_info.set_target_archs(['x86'])
elif toolset_machine_parts[0] == 'x86_64':
platform_info.set_target_archs(['x86_64'])
else:
assert False
self._platform_info.append(platform_info)
if self._toolset == 'gcc':
self._version = self._get_gcc_version(toolset_cmd)
self._compiler_tag = 'gcc-' + ver.version_tuple_to_str(self._version[:2])
self._boost_compiler_tag = 'gcc' + str(self._version[0]) + str(self._version[1])
elif self._toolset == 'clang':
self._version = self._get_clang_version(toolset_cmd)
self._compiler_tag = 'clang-' + ver.version_tuple_to_str(self._version[:2])
if sys_info.is_macosx():
# The boost libraries are tagged with the version of the gcc backend and not the
# clang version.
gcc_version = self._get_gcc_version(self._compiler_cmd)
self._boost_compiler_tag = 'clang-darwin' + str(gcc_version[0]) + str(gcc_version[1])
else:
self._boost_compiler_tag = 'clang' + str(self._version[0]) + str(self._version[1])
else:
assert False
return True
else:
assert False
def _get_ndk_finder(self):
if self._ndk_finder is None:
import pyhhi.build.common.android
self._ndk_finder = pyhhi.build.common.android.NdkFinder()
return self._ndk_finder
def _get_android_api_level(self, toolset_cmd):
# toolset_cmd is supposed to be an absolute path to be able to support different API levels and
# architectures. If the toolset command refers to a standalone toolchain, there is a single api-level header and
# the API level can be extracted unless unified headers are used.
# If the toolset command refers to the NDK compiler (->QtCreator), the latest API level will be
# taken as default.
api_level_header = os.path.join(os.path.dirname(toolset_cmd), '..', 'sysroot', 'usr', 'include', 'android', 'api-level.h')
if os.path.exists(api_level_header):
# This looks like a standalone toolchain installation.
# #define __ANDROID_API__ 21
re_api_define = re.compile(r'^#define\s+__ANDROID_API__\s+(\d+)')
with open(api_level_header) as fin:
for line in fin:
re_match = re_api_define.match(line)
if re_match:
api_level = int(re_match.group(1), 10)
return api_level
# Most likely NDK r15 with unified headers, the API level is now defined in arm-linux-androideabi-clang++.
ndk_finder = self._get_ndk_finder()
ndk_version = ndk_finder.get_ndk_version()
if ver.version_compare(ndk_version, (15, 0)) >= 0:
return self._get_android_api_level_unified(toolset_cmd)
raise Exception("The Android API level cannot be extracted from " + api_level_header + ". Please contact technical support.")
else:
# Assume the original NDK toolchain with multiple platform/API level support
ndk_finder = self._get_ndk_finder()
ndk_platforms = ndk_finder.get_ndk_platforms()
re_match = re.match(r'android-(\d+)', ndk_platforms[-1])
if re_match:
api_level = int(re_match.group(1), 10)
else:
raise Exception("The Android API level cannot be determined, please contact technical support.")
return api_level
def _get_android_api_level_unified(self, toolset_cmd):
if toolset_cmd.endswith('clang++') or toolset_cmd.endswith('clang'):
# -D__ANDROID_API__=26
re_api_level_def = re.compile(r'\s+-D__ANDROID_API__=(\d+)')
with open(toolset_cmd) as fin:
for line in fin:
re_match = re_api_level_def.search(line)
if re_match:
api_level = int(re_match.group(1), 10)
return api_level
raise Exception("The Android API level cannot be determined. Please contact technical support.")
class FatBinaryTool(object):
def __init__(self):
# search for lipo and raise an Exception if the command cannot be found.
self._lipo_cmd = util.find_tool_on_path('lipo', True)
def createLibs(self, src_lib_dirs, dst_lib_dir, incremental=True):
if len(src_lib_dirs) < 2:
raise Exception("A universal library requires at least two different input formats.")
for d in src_lib_dirs:
if not os.path.exists(d):
raise Exception("The directory " + d + " does not exist.")
if not os.path.exists(dst_lib_dir):
os.makedirs(dst_lib_dir)
lib_dir = src_lib_dirs[0]
lib_names = [d for d in os.listdir(lib_dir) if (d.endswith('.a') or d.endswith('.dylib'))]
for lib in lib_names:
src_mtime = 0
src_libs = []
for d in src_lib_dirs:
src_lib = os.path.join(d, lib)
if os.path.exists(src_lib):
mtime = os.path.getmtime(src_lib)
if mtime > src_mtime:
src_mtime = mtime
src_libs.append(src_lib)
if len(src_libs) >= 2:
lipo_argv = [self._lipo_cmd, '-create']
lipo_argv.extend(src_libs)
dst_lib = os.path.join(dst_lib_dir, lib)
lipo_argv.extend(['-output', dst_lib])
build_universal = True
if os.path.exists(dst_lib):
mtime = os.path.getmtime(dst_lib)
if incremental and (mtime > src_mtime):
build_universal = False
if build_universal:
# and launch lipo to create the universal binary file.
cmd_line = ' '.join(lipo_argv)
print("Launching: " + cmd_line)
retv = util.subproc_call_flushed(lipo_argv)
if retv != 0:
raise Exception("Creating a universal file failed -> " + cmd_line)
else:
raise Exception("error: creating a univeral file requires at least two input files, check " + lib)
class DyLibInstallNameInfo(object):
def __init__(self, dylib):
assert os.path.exists(dylib)
self.basename = os.path.basename(dylib)
self.inst_dir = os.path.dirname(dylib)
self.inst_name = None
self.depends_list = []
self.rpath_list = []
class DyLibInstallNameInfoInspector(object):
def __init__(self, ignore_system_libs=True):
self._ignore_system_libs = ignore_system_libs
self._inst_name_info_cache = {}
def create_install_name_info(self, dylib):
assert os.path.exists(dylib)
if not os.path.isabs(dylib):
dylib = os.path.abspath(dylib)
if dylib not in self._inst_name_info_cache:
inst_name_info = DyLibInstallNameInfo(dylib)
inst_name_info.inst_name = self.get_install_name(dylib)
(depends_list, rpath_list) = self.get_depends_list(dylib)
inst_name_info.depends_list = depends_list
inst_name_info.rpath_list = rpath_list
self._inst_name_info_cache[dylib] = inst_name_info
else:
inst_name_info = self._inst_name_info_cache[dylib]
return inst_name_info
def get_install_name(self, dylib):
assert os.path.exists(dylib)
lines = subprocess.check_output(['otool', '-D', dylib], universal_newlines=True).rstrip().splitlines()
return lines[1]
def get_depends_list(self, dylib):
assert os.path.exists(dylib)
depends_list = []
rpath_list = []
load_cmd_lines = subprocess.check_output(['otool', '-l', dylib], universal_newlines=True).rstrip().splitlines()
re_depends_path = re.compile(r'\s*name\s+([^ ]+)')
re_rpath = re.compile(r'\s*path\s+([^ ]+)')
# otool -L dylib ->
# lib/clang-4.2/x86_64/plugins/debug/codec/libmpg4nulldec_plugin.dylib:
# libmpg4nulldec_plugin.dylib (compatibility version 0.0.0, current version 0.0.0)
# @loader_path/lib/libvlccore.5.dylib (compatibility version 7.0.0, current version 7.0.0)
# /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
# /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
#
# --
# otool -l dylib ->
# cmd LC_RPATH
# cmdsize 80
# path /Users/rauthenberg/projects/VlcPluginSampleLib/lib/clang-6.1/x86_64 (offset 12)
#
# cmd LC_LOAD_DYLIB
# cmdsize 48
# name /usr/lib/libc++.1.dylib (offset 24)
#
re_lc_rpath = re.compile(r'\s*cmd\s+LC_RPATH')
re_lc_load_dylib = re.compile(r'\s*cmd\s+LC_LOAD_DYLIB')
line_cnt = 0
while line_cnt < len(load_cmd_lines):
line = load_cmd_lines[line_cnt].lstrip()
if re_lc_rpath.match(line):
re_match = re_rpath.match(load_cmd_lines[line_cnt + 2])
if re_match:
rpath_list.append(re_match.group(1))
line_cnt += 3
elif re_lc_load_dylib.match(line):
re_match = re_depends_path.match(load_cmd_lines[line_cnt + 2])
if re_match:
depends_path = re_match.group(1)
if self._ignore_system_libs:
if not depends_path.startswith(('/System/', '/Library/', '/usr/lib/')):
depends_list.append(depends_path)
else:
depends_list.append(depends_path)
line_cnt += 3
else:
line_cnt += 1
return (depends_list, rpath_list)
def modify_depends(self, dylib, depends_dict):
argv = ['install_name_tool']
for key in depends_dict:
argv.append('-change')
argv.append(key)
argv.append(depends_dict[key])
argv.append(dylib)
#print("modify_depends(): ", argv)
util.subproc_check_call_flushed(argv)
def change_rpaths(self, dylib, rpaths_dict):
argv = ['install_name_tool']
for key in rpaths_dict:
argv.append('-rpath')
argv.append(key)
argv.append(rpaths_dict[key])
argv.append(dylib)
#print("change_rpaths(): ", argv)
util.subproc_check_call_flushed(argv)
def delete_rpaths(self, dylib, rpath_list):
argv = ['install_name_tool']
for rpath in rpath_list:
argv.append('-delete_rpath')
argv.append(rpath)
argv.append(dylib)
#print("change_rpaths(): ", argv)
util.subproc_check_call_flushed(argv)
def modify_install_name(self, dylib, install_name):
argv = ['install_name_tool', '-id', install_name, dylib]
util.subproc_check_call_flushed(argv)
class BuildScriptInstaller(object):
def __init__(self, verbose=False):
self._logger = logging.getLogger(__name__)
# print("BuildScriptInstaller.__init__(): __name__=" + __name__)
self._verbose = verbose
def set_verbose(self, verbose):
self._verbose = verbose
def install_script(self, inst_dir, script, modules):
assert inst_dir is not None
script = os.path.abspath(script)
module_flist = []
package_dir_set = set()
# python modules are specified in import syntax like ".".
for pymod in modules:
pymod_elem = pymod.split('.')
rel_path = os.path.sep.join(pymod_elem)
module_flist.append(rel_path + '.py')
if len(pymod_elem) > 1:
# module is part of a python package
pkg_list = list(pymod_elem[:-1])
#print("processing python package dir list", pkg_list)
while len(pkg_list) > 0:
pkg_dir = os.path.sep.join(pkg_list)
#print("processing pkg dir", pkg_dir)
if pkg_dir not in package_dir_set:
package_dir_set.add(pkg_dir)
pkg_list.pop()
for pkg_dir in package_dir_set:
#print("processing pkg dir", pkg_dir)
module_flist.append(os.path.join(pkg_dir, '__init__.py'))
#print("install_script: modules:", module_flist)
# make sure all files exist before trying to copy anything.
if not os.path.exists(script):
raise Exception("file " + script + " does not exist.")
# key = module_file_path, value = file system path
# e.g. pyhhi/build/common/ver.py must be mapped to a directory listed by sys.path.
module_flist_src_dict = {}
for f in module_flist:
for pth in sys.path:
fpath = os.path.join(pth, f)
if os.path.exists(fpath):
module_flist_src_dict[f] = fpath
break
else:
fpath = None
if fpath is None:
raise Exception("module file {0} not found.".format(fpath))
# create destination directory
if not os.path.exists(inst_dir):
os.makedirs(inst_dir)
for f in module_flist:
assert f in module_flist_src_dict
fpath_src = module_flist_src_dict[f]
dname = os.path.dirname(f)
dst_dir = os.path.join(inst_dir, dname)
#print("cp " + fpath_src + " -> " + os.path.join(dst_dir, dname))
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
#print("creating directory " + dst_dir)
if self._verbose:
print("copying %-15s %s" % (os.path.basename(fpath_src), dst_dir))
shutil.copy(fpath_src, dst_dir)
# copy the script to
if self._verbose:
print("copying %-15s %s" % (os.path.basename(script), inst_dir))
shutil.copy(script, inst_dir)
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/common/cmbldver.py 0000775 0000000 0000000 00000000267 14420260131 0023721 0 ustar 00root root 0000000 0000000
#-- WARNING --
# This file is automatically generated by CMake.
# Any manual changes here will be overridden by the next build.
#-------------
CMAKE_BUILD_VERSION_STR = "3.14.4.4"
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/common/error.py 0000775 0000000 0000000 00000001574 14420260131 0023256 0 ustar 00root root 0000000 0000000
class BaseError(Exception):
"""Base exception with a hint whether to list traceback information or not.
Attributes:
msg -- explanation of the error
list_traceback -- hint to an application level exception handler whether to list traceback information or not.
"""
def __init__(self, msg, list_traceback=True):
self.msg = msg
self.list_traceback = list_traceback
def __str__(self):
return self.msg
class InvalidInputParameterError(BaseError):
"""Exception raised for invalid input parameters."""
def __init__(self, msg, list_traceback=False):
BaseError.__init__(self, msg, list_traceback)
class InvalidCommandLineArgumentError(BaseError):
"""Exception raised for invalid command line arguments."""
def __init__(self, msg, list_traceback=False):
BaseError.__init__(self, msg, list_traceback)
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/common/system.py 0000775 0000000 0000000 00000053022 14420260131 0023444 0 ustar 00root root 0000000 0000000
from __future__ import print_function
import multiprocessing
import logging
import platform
import os
import sys
import re
import shutil
import tempfile
import textwrap
import subprocess
import pyhhi.build.common.ver as ver
import pyhhi.build.common.util as util
class SystemInfo(object):
class __SystemInfo(object):
def __init__(self):
self._logger = logging.getLogger(__name__)
# print("Constructing a new SystemInfo object")
# check python version: it has to be 2.7 or higher
self._python_version = ver.get_python_version(True)
# create all attributes with default values which will be overwritten in platform specific sections later on
self._python_launcher = None
self._python_arch = 'x86_64'
self._python_implementation = platform.python_implementation()
self._os_distro = platform.platform()
# self._os_distro_short = platform.platform()
self._win32api_installed = False
self._windows_msys = False
self._redhat_system = False
self._debian_system = False
self._suse_system = False
self._pkg_fmt = None
self._pkg_arch = None
self._os_codename = 'unknown'
self._os_arch = 'x86_64'
self._os_version = (0, 0, 0)
self._num_processors = multiprocessing.cpu_count()
platform_system = platform.system().lower()
self._platform_system = platform_system
self._desktop_dir = None
self._default_proj_home_dir = None
if platform_system == 'linux':
# e.g. x86_64 or i686
platform_machine = platform.machine().lower()
if platform_machine != 'x86_64':
assert re.match(r'i[6543]86', platform_machine, re.IGNORECASE)
platform_machine = 'x86'
self._os_arch = platform_machine
self._python_arch = platform_machine
# there's no portable way in python to obtain the linux version.
self._query_linux_distro_info()
if self.is_debian():
self._pkg_fmt = 'deb'
self._pkg_arch = subprocess.check_output(['dpkg', '--print-architecture'], universal_newlines=True).rstrip()
elif self.is_redhat() or self.is_suse():
self._pkg_fmt = 'rpm'
self._pkg_arch = subprocess.check_output(['rpm', '--eval', '%_arch'], universal_newlines=True).rstrip()
else:
# unknown linux system, no logic available to figure out the package format or package architecture yet.
self._pkg_fmt = 'unknown'
self._pkg_arch = subprocess.check_output(['uname', '-m'], universal_newlines=True).rstrip()
if self._pkg_arch == 'x86_64':
self._pkg_arch = 'amd64'
elif platform_system == 'windows':
self._programx86_dir = None
self._program_dir = None
self._program_data_dir = None
if 'MSYSTEM' in os.environ:
self._windows_msys = True
# obtain additional version information
# windows 7: ('7', '6.1.7601', 'SP1', 'Multiprocessor Free')
self._os_version = ver.version_tuple_from_str(platform.win32_ver()[1])
# Hm, win32api not installed/available -> system detection may not by accurate and includes some guessing.
if platform.architecture()[0] != '64bit':
self._python_arch = 'x86'
self._os_arch = 'x86'
if ('PROCESSOR_ARCHITEW6432' in os.environ) and (os.getenv('PROCESSOR_ARCHITEW6432') == 'AMD64'):
# 32 bit python interpreter and 64 bit windows
self._os_arch = 'x86_64'
if self._os_arch == 'x86_64':
if self._python_arch == 'x86':
self._program_dir = os.path.normpath(os.getenv('PROGRAMW6432'))
self._programx86_dir = os.path.normpath(os.getenv('PROGRAMFILES'))
else:
self._program_dir = os.path.normpath(os.getenv('PROGRAMFILES'))
self._programx86_dir = os.path.normpath(os.getenv('PROGRAMFILES(X86)'))
assert self._programx86_dir is not None
elif self._os_arch == 'x86':
self._program_dir = os.path.normpath(os.getenv('PROGRAMFILES'))
else:
assert False
assert self._program_dir is not None
self._program_data_dir = os.path.normpath(os.getenv('PROGRAMDATA'))
if self._windows_msys:
pass
elif os.path.exists(os.path.join(r'C:\Windows', 'py.exe')):
self._python_launcher = os.path.join(r'C:\Windows', 'py.exe')
# probe the registry to ensure the shell will pass additional arguments to the
# registered python interpreter.
# if pywin_check:
# self.check_pywin_registry()
elif platform_system == 'darwin':
# create a dictionary to simplify the mapping between minor version ID and codenames
codename_dict = {'10.4': 'tiger',
'10.5': 'leopard',
'10.6': 'snow leopard',
'10.7': 'lion',
'10.8': 'mountain lion',
'10.9': 'mavericks',
'10.10': 'yosemite',
'10.11': 'el capitan',
'10.12': 'sierra',
'10.13': 'high sierra',
'10.14': 'mojave'}
# replace darwin by macosx
self._platform_system = 'macosx'
# e.g. ('10.7.4', ('', '', ''), 'x86_64')
mac_ver = platform.mac_ver()
# save the macosx version as a tuple of integers
self._os_version = ver.version_tuple_from_str(mac_ver[0])
# analyze the version tuple to derive the codename: lion, mountain lion, etc
major_minor_ver = str(self._os_version[0]) + '.' + str(self._os_version[1])
if major_minor_ver in codename_dict:
self._os_codename = codename_dict[major_minor_ver]
#e.g. x86_64
self._os_arch = mac_ver[2]
# python architecture is the same as the macosx architecture
self._python_arch = self._os_arch
else:
raise Exception('unsupported platform detected: ' + platform_system)
self._query_home_dir()
self._query_default_proj_home_dir()
self._query_desktop_dir()
self._query_search_path()
def get_python_version(self):
return self._python_version
def get_python_executable(self):
return sys.executable
def get_python_launcher(self):
return self._python_launcher
def is_python3(self):
return ver.version_compare(self._python_version, (3, 0)) >= 0
def get_script_ext(self):
if self.is_python3():
script_ext = '3.py'
else:
script_ext = '.py'
return script_ext
def get_python_implementation(self):
return self._python_implementation
def get_python_arch(self):
return self._python_arch
def get_platform(self):
return self._platform_system
def get_platform_long(self):
return platform.platform()
def is_linux(self):
return self._platform_system == 'linux'
def get_pkg_fmt(self):
assert self._pkg_fmt is not None
return self._pkg_fmt
def get_pkg_arch(self):
assert self._pkg_arch is not None
return self._pkg_arch
def is_redhat(self):
return self._redhat_system
def is_debian(self):
return self._debian_system
def is_suse(self):
return self._suse_system
def is_cray(self):
if self._os_distro is None:
return False
return self._os_distro == 'cray'
def is_windows(self):
return self._platform_system == 'windows'
def is_windows8(self):
return self.is_windows() and (self._os_version[0] == 6) and (self._os_version[1] == 2)
def is_windows_msys(self):
return self._windows_msys
def check_pywin_registry(self):
assert self.is_windows()
# Create a temporary script and invoke it to see whether argument passing works or not.
# The test must go through the windows shell to be meaningful.
tmp_dir = tempfile.mkdtemp()
probe_script_name = os.path.join(tmp_dir, 'pywin_test.py')
tmp_file = open(probe_script_name, "w")
# create a simple script to echo the command arguments separated by a single space
if self.is_python3():
tmp_file.write("#!/usr/bin/env python3\n")
else:
tmp_file.write("#!/usr/bin/env python\n")
tmp_file.write("from __future__ import print_function\n")
tmp_file.write("import sys\n")
tmp_file.write("if len(sys.argv) > 1:\n")
tmp_file.write(" joiner = ' '\n")
tmp_file.write(" print(joiner.join(sys.argv[1:]))\n")
tmp_file.close()
# invoke the script through the windows shell and check the output
retv = subprocess.check_output([probe_script_name, "probe"], shell=True, universal_newlines=True).rstrip()
shutil.rmtree(tmp_dir)
# print("check_pywin_registry: '" + retv + "'")
if retv != "probe":
msg = "\nThe python installation is broken, the shell does not pass on any command line arguments to the python script.\n"
msg += "The following steps are most likely to fix the problem, for further assistance contact technical support.\n"
msg += " - Deinstall all versions of python and reboot the system.\n"
msg += " - Download the latest 64 bit version of python from www.python.org and install it, the build system will work with python 2.7.x or python 3.x.\n"
raise Exception(msg)
return True
def check_os_detection(self, todo_list):
if (self._os_version[0] == 0) and self.is_linux():
if not os.path.exists('/usr/bin/lsb_release'):
todo_list.append("The system identification depends on lsb_release which does not seem to be available.")
if self.is_redhat():
todo_list.append("On redhat 6.x/7.x and compatible systems, you may need to install redhat-lsb-core.")
todo_list.append("")
def is_macosx(self):
return self._platform_system == 'macosx'
def get_os_distro(self):
return self._os_distro
def get_os_distro_short(self):
return self._os_distro
def get_os_codename(self):
return self._os_codename
def get_os_arch(self):
return self._os_arch
def get_os_version(self):
return self._os_version
def get_number_processors(self):
return self._num_processors
def get_system_info_full_str(self):
"""Return a string consisting of colon separated fields intended for the Boost.Build script interface."""
str_list = []
str_list.append(self.get_platform())
str_list.append(self.get_os_arch())
str_list.append(str(self.get_number_processors()))
# should be a single lowercase word as it may be used to make up a package filename
str_list.append(self.get_os_distro_short())
str_list.append(self.get_os_codename())
# create a version string given the version tuple
joiner = '.'
str_list.append(joiner.join([str(x) for x in self.get_os_version()]))
# no sure it's really needed somewhere in Boost.Build
str_list.append(self._python_arch)
if self.is_linux():
if self.is_debian():
str_list.append('debian')
elif self.is_redhat():
str_list.append('redhat')
elif self.is_suse():
str_list.append('suse')
else:
str_list.append('unknown_linux_flavor')
else:
str_list.append('none')
str_list.append(self.get_home_dir())
return ';'.join(str_list)
def get_path(self):
return self._search_path
def get_home_dir(self, native=False):
if self.is_windows_msys() and native:
home_dir = os.path.normpath(os.path.expandvars('$USERPROFILE'))
else:
home_dir = self._home_dir
return home_dir
def get_default_proj_home_dir(self):
return self._default_proj_home_dir
def get_desktop_dir(self):
return self._desktop_dir
def get_program_dir(self, target_arch):
if not self.is_windows():
raise Exception("The method get_program_dir is only supported on the windows platform.")
if (self.get_os_arch() == 'x86_64') and (target_arch == 'x86'):
program_dir = self._programx86_dir
else:
program_dir = self._program_dir
assert os.path.exists(program_dir)
return program_dir
def get_program_data_dir(self):
return self._program_data_dir
def get_short_path(self, fpath):
if self.is_windows():
fpath = os.path.normpath(self.get_short_path_win(fpath))
return fpath
def get_short_path_win(self, fpath):
# need to go through the shell to get the short path name
tempdir = tempfile.gettempdir()
get_short_path_script = os.path.join(tempdir, 'pyhhi_get_short_path.cmd')
if not os.path.exists(get_short_path_script):
# create a shell command script to do the path conversion
with open(get_short_path_script, "w") as script_file:
script_file.write(textwrap.dedent("""\
@ECHO OFF
echo %~s1
"""))
# invoke the script through the windows shell.
short_path = subprocess.check_output([get_short_path_script, fpath], shell=True, universal_newlines=True).rstrip()
return short_path
def check_comspec(self):
comspec = os.getenv('COMSPEC')
if (comspec is None) or (not os.path.exists(comspec)):
raise Exception("The environment variable COMSPEC must be fixed, please contact technical support.")
def get_subprocess_devnull(self):
if ver.version_compare(self._python_version, (3,3)) >= 0:
devnull = subprocess.DEVNULL
else:
self._logger.debug("attribute subprocess.DEVNULL not available (python < 3.3), using os.devnull instead")
devnull = self._get_devnull()
return devnull
def _get_devnull(self):
if not hasattr(self, '_devnull'):
self._devnull = os.open(os.devnull, os.O_RDWR)
return self._devnull
def _query_linux_distro_info(self):
if 'CRAYOS_VERSION' in os.environ:
self._os_distro = 'cray'
self._os_version = ver.version_tuple_from_str(os.environ['CRAYOS_VERSION'])
else:
lsb_release = '/usr/bin/lsb_release'
if os.path.exists(lsb_release):
# use lsb_release if available and assume all options are supported and return
# sensible values.
# obtain a human readable description of the distribution. This should be a single word as it
# may be used to generate package filenames.
retv = subprocess.check_output([lsb_release, '-is'], universal_newlines=True)
self._os_distro = retv.rstrip().lower()
retv = subprocess.check_output([lsb_release, '-rs'], universal_newlines=True)
version_str = retv.rstrip()
# version_str = "4"
# version_str = "4.0-rolling"
# version_str = "rolling"
re_match = re.match(r'([0-9.,_-]+\d+)|(\d+)', version_str)
if re_match:
self._os_version = ver.version_tuple_from_str(re_match.group(0))
retv = subprocess.check_output([lsb_release, '-cs'], universal_newlines=True)
self._os_codename = retv.rstrip().lower()
if self._os_codename == 'n/a':
self._os_codename = 'none'
else:
# lsb_release not found -> try to guess the distro but don't try to parse the
# proprietary files to figure out the remaining system info bits.
if os.path.exists('/etc/fedora-release'):
self._os_distro = 'fedora'
elif os.path.exists('/etc/redhat-release'):
self._os_distro = 'redhat'
elif os.path.exists('/etc/SuSE-release'):
self._os_distro = 'suse'
elif os.path.exists('/etc/debian_version'):
self._os_distro = 'debian'
else:
self._os_distro = 'unknown'
# make sure os_distro and os_codename do not contain any spaces as they may become part of a
# package filename.
if self._os_distro is not None:
self._os_distro = self._os_distro.replace(' ', '-')
if self._os_codename is not None:
self._os_codename = self._os_codename.replace(' ', '-')
# determine the general flavor of the linux system: redhat, debian or suse
if os.path.exists('/etc/redhat-release'):
self._redhat_system = True
elif os.path.exists('/etc/debian_version'):
self._debian_system = True
else:
# not sure how to do this for suse, revert back to regex
if re.match(r'(suse)|(opensuse)', self._os_distro):
self._suse_system = True
def _query_home_dir(self):
home_dir = os.path.expanduser('~')
# make sure the user's home directory exists
if not os.path.exists(home_dir):
raise Exception('home directory "' + home_dir + '" does not exist.')
self._home_dir = os.path.normpath(home_dir)
def _query_default_proj_home_dir(self):
if 'PROJ_HOME' in os.environ:
proj_home_dir = os.path.normpath(os.path.expandvars('$PROJ_HOME'))
else:
proj_home_dir = os.path.join(self.get_home_dir(native=True), 'projects')
if os.path.exists(proj_home_dir):
self._default_proj_home_dir = proj_home_dir
else:
self._default_proj_home_dir = None
def _query_search_path(self):
self._search_path = []
env_path = os.getenv('PATH')
for dir in env_path.split(os.path.pathsep):
self._search_path.append(util.normalize_path(dir))
def _query_desktop_dir(self):
# MSYS has its own environment but Desktop comes from the native windows home.
home_dir = self.get_home_dir(native=True)
desktop_dir = os.path.join(home_dir, 'Desktop')
if os.path.exists(desktop_dir):
self._desktop_dir = desktop_dir
else:
self._desktop_dir = None
# the singleton as a class attribute
instance = None
def __init__(self, pywin_check=False):
self._logger = logging.getLogger(__name__)
if SystemInfo.instance is None:
SystemInfo.instance = SystemInfo.__SystemInfo()
if SystemInfo.instance.is_windows() and pywin_check:
# The caller requested the additional windows registry check.
# SystemInfo.instance.check_pywin_registry()
# One more addtional check to catch a corrupted COMSPEC setting which yields to subsequent failures of
# subprocess calls if shell=True is used.
SystemInfo.instance.check_comspec()
if SystemInfo.instance.get_os_arch() == 'x86':
msg = "\nThe build system requires windows 64 bit but the platform seems to be windows 32 bit.\n"
msg += "Please contact technical support for further assistance.\n"
raise Exception(msg)
elif (SystemInfo.instance.get_os_arch() == 'x86_64') and (SystemInfo.instance.get_python_arch() == 'x86'):
msg = "\nPython 32 bit is not supported on windows 64 bit, please use python 64 bit."
raise Exception(msg)
def __getattr__(self, item):
return getattr(SystemInfo.instance, item)
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/common/util.py 0000775 0000000 0000000 00000025003 14420260131 0023073 0 ustar 00root root 0000000 0000000 from __future__ import print_function
import inspect
import logging
import os
import platform
import re
import shutil
import stat
import subprocess
import sys
import traceback
# imports a base exception with an attribute to enable or disable traceback information.
from pyhhi.build.common.error import BaseError
def exec_main_default_try(main_fnc, sys_exit_err=1, finally_action=None):
"""Execute main_fnc inside a try block and dump the callstack in case of exceptions."""
exit_error = False
prog_name = os.path.basename(sys.argv[0])
try:
main_fnc()
# except (InvalidInputParameterError, InvalidCommandLineArgumentError) BaseError as e:
except BaseError as e:
exit_error = True
if e.list_traceback:
exc_type, exc_value, exc_traceback = sys.exc_info()
lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
for line in lines[:-1]:
print(line.rstrip())
print('-----')
print("{0}: error: {1}".format(prog_name, e.msg))
except KeyboardInterrupt:
exit_error = True
#print("Keyboard interrupt signaled")
except Exception:
exit_error = True
exc_type, exc_value, exc_traceback = sys.exc_info()
lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
for line in lines[:-1]:
print(line.rstrip())
print('-----')
print(lines[-1])
finally:
if finally_action:
finally_action()
if exit_error:
# some exception thrown, exit with error code to inform the shell something went wrong.
sys.exit(sys_exit_err)
return 0
def app_args_add_log_level(parser):
parser.add_argument("--log-level", action="store", dest="log_level", choices=['warning', 'info', 'debug'], default="warning",
help="configure the log level [default: %(default)s]")
def app_configure_logging(log_level):
# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log-level=DEBUG or --log-level=debug
numeric_level = getattr(logging, log_level.upper(), None)
if not isinstance(numeric_level, int):
raise ValueError('Invalid log level: %s' % log_level)
# FORMAT = "py-trace %(module)s.%(funcName)s: %(lineno)d: %(message)s"
FORMAT = "%(module)s.%(funcName)s: %(lineno)d: %(message)s"
logging.basicConfig(format=FORMAT, level=numeric_level)
def normalize_path(fpath):
# remove leading and trailing spaces
fpath = fpath.lstrip().rstrip()
if platform.system().lower() == 'windows':
# ensure drive letters are in uppercase which os.path.normpath() does not seem to enforce.
re_drive_letter = re.compile(r'([a-z]):', re.IGNORECASE)
re_match = re_drive_letter.match(fpath)
if re_match:
fpath = re_match.group(1).upper() + fpath[1:]
return os.path.normpath(fpath)
def to_posix_path(fpath):
fpath = normalize_path(fpath)
if platform.system().lower() == 'windows':
fpath = fpath.replace('\\', '/')
return fpath
def find_tool_on_path(tool, must_succeed=False, search_path=None):
"""Find a tool on the search path and return the full path."""
if os.path.isabs(tool):
if platform.system().lower() == 'windows':
tool_basename = os.path.basename(tool)
if not re.search(r'\.\S+$', tool_basename):
tool = os.path.join(os.path.dirname(tool), tool_basename + '.exe')
if os.path.exists(tool):
return tool
else:
if platform.system().lower() == 'windows':
# special fix for windows to qualify tool with .exe if tool does not have an extension.
if not re.search(r'\.\S+$', tool):
tool += '.exe'
if search_path is None:
search_path = os.path.expandvars('$PATH')
search_path = search_path.split(os.path.pathsep)
for d in search_path:
if d == '.':
continue
prog = os.path.join(d, tool)
if os.path.exists(prog) and (not os.path.isdir(prog)):
# Always return an absolute path in case the current working directory will be changed later on.
prog = os.path.abspath(prog)
return prog
if must_succeed:
if os.path.isabs(tool):
raise Exception("The command '" + tool + "' does not exist.")
else:
if search_path:
raise Exception("The command " + tool + " cannot be found on PATH=" + ';'.join(search_path))
else:
raise Exception("The command " + tool + " cannot be found on PATH.")
return None
def get_tool_dir(tool):
if platform.system().lower() == 'windows':
# some folks use slashes on windows or combination of slashes and backslashes
re_pathsep = re.compile(r'[\\/:]+')
else:
# assume a linux path
re_pathsep = re.compile(r'[/]+')
if re_pathsep.search(tool):
tool_path = normalize_path(os.path.abspath(tool))
else:
tool_path = find_tool_on_path(tool)
# Resolve any symbolic links to get the real location; e.g.
# bjam.py is a symbolic link and points to $HOME/bin/bjam.py. The real location of bjam.py is writeable but
# the location of the symbolic link may not.
tool_path = os.path.realpath(tool_path)
tool_dir = os.path.dirname(tool_path)
return tool_dir
def get_top_dir():
# 1st check: try current working directory
top_dir = os.getcwd()
if is_top_dir(top_dir):
return top_dir
# 2nd check: try to deduce top from the script directory; e.g. /CMakeBuild/bin or /BoostBuild/bin
top_dir = os.path.normpath(os.path.join(get_script_dir(), '..', '..'))
if not is_top_dir(top_dir):
raise Exception(os.path.basename(sys.argv[0]) + " failed to find its parent workspace, please contact technical support.")
return top_dir
def is_top_dir(top_dir):
if not os.path.exists(top_dir):
return False
# Path check returns true if CMakeBuild is a top-level SVN external or Git submodule.
if not os.path.exists(os.path.join(top_dir, 'CMakeBuild')):
return False
if os.path.exists(os.path.join(top_dir, 'CMakeBuild', 'bin', 'cmake.py')) or os.path.exists(os.path.join(top_dir, 'CMakeBuild', 'CMakeBuild', 'bin', 'cmake.py')):
return True
# Check for CMakeBuild versioned subtree
cmakebuild_dir = os.path.join(top_dir, 'CMakeBuild')
for fname in os.listdir(cmakebuild_dir):
if os.path.isdir(os.path.join(cmakebuild_dir, fname)):
if os.path.exists(os.path.join(cmakebuild_dir, fname, 'CMakeBuild', 'bin', 'cmake.py')):
return True
return False
def get_script_dir():
py_util_fname = inspect.getfile(get_script_dir)
# /CMakeBuild/bin/pyhhi/build/common/util.py
script_dir = os.path.normpath(os.path.join(os.path.dirname(py_util_fname), '..', '..', '..'))
return script_dir
def get_boost_build_dir(top_dir):
# Assume the standard SVN layout without a submodules folder holding the externals.
boost_build_dir = os.path.join(top_dir, 'BoostBuild')
if not os.path.exists(boost_build_dir):
raise Exception("The directory '" + top_dir + "' does not seem to be a workspace directory with a BoostBuild folder, please contact technical support.")
return boost_build_dir
def find_repo_path_from_src_path(src_path):
src_path = os.path.abspath(src_path.rstrip(os.path.sep))
is_windows = platform.system().lower() == 'windows'
# split the path
if is_windows:
drive_path_comps = os.path.splitdrive(src_path)
src_path = drive_path_comps[1]
dir_list = src_path.lstrip(os.path.sep).split(os.path.sep)
joiner = os.path.sep
while dir_list:
# walk the tree until 'src' is found. The parent of src is supposed to be the name of the repository.
dir = dir_list.pop()
if len(dir_list) < 2:
break
if dir.lower() == 'src':
if is_windows:
jamroot_dir = os.path.join(drive_path_comps[0], os.path.sep, joiner.join(dir_list[:-1]))
repo_path = os.path.join(drive_path_comps[0], os.path.sep, joiner.join(dir_list))
else:
# repo_path: /home/rauthenberg/projects/BoostBuild/BoostBuild
jamroot_dir = os.path.join(os.path.sep, joiner.join(dir_list[:-1]))
repo_path = os.path.join(os.path.sep, joiner.join(dir_list))
if os.path.isfile(os.path.join(jamroot_dir, 'Jamroot')):
return repo_path
raise Exception("The repository path cannot be deduced from '" + src_path + "'")
def find_repo_name_from_src_path(src_path):
repo_path = find_repo_path_from_src_path(src_path)
if platform.system().lower() == 'windows':
drive_path_comps = os.path.splitdrive(repo_path)
repo_path = drive_path_comps[1]
return repo_path.lstrip(os.path.sep).split(os.path.sep)[-1]
def subproc_call_flushed(*popenargs, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
sys.stdout.flush()
return subprocess.call(*popenargs, **kwargs)
def subproc_check_call_flushed(*popenargs, **kwargs):
"""Run command with arguments. Wait for command to complete. If
the exit code was zero then return, otherwise raise
CalledProcessError. The CalledProcessError object will have the
return code in the returncode attribute.
The arguments are the same as for the call function. Example:
check_call(["ls", "-l"])
"""
sys.stdout.flush()
return subprocess.check_call(*popenargs, **kwargs)
def rmtree(directory):
"""On Windows invokes rmtree_readonly() and on other platforms shutil.rmtree().
This convenience function may be used as an replacement of shutil.rmtree(directory)
to be able to remove directory trees on Windows containing some readonly files.
"""
if sys.platform.startswith('win'):
rmtree_readonly(directory)
else:
shutil.rmtree(directory)
def rmtree_readonly(directory):
"""Remove a directory tree on Windows where some files are readonly."""
def remove_readonly(func, path, _excinfo):
"Clear the readonly bit and reattempt the removal"
os.chmod(path, stat.S_IWRITE)
func(path)
shutil.rmtree(directory, onerror=remove_readonly)
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/common/ver.py 0000775 0000000 0000000 00000021244 14420260131 0022715 0 ustar 00root root 0000000 0000000
from __future__ import print_function
import platform
import re
import os.path
import plistlib
import subprocess
import functools
import pyhhi.build.common.util as util
import pyhhi.build.common.cmbldver as cmbldver
def get_cmake_build_version():
return version_tuple_from_str(cmbldver.CMAKE_BUILD_VERSION_STR)
def _get_python_version_numeric():
re_number = re.compile(r'(\d+).*')
version_list = []
# extra logic to deal with python on ubuntu 11.10: 2.7.2+
for x in platform.python_version_tuple():
re_match = re_number.match(x)
if re_match:
version_list.append(int(re_match.group(1), 10))
else:
version_list.append(0)
return tuple(version_list)
def check_python_version(version_tuple=None):
"""Checks the python version and throws an exception if the version is not supported."""
if version_tuple is None:
version_tuple = _get_python_version_numeric()
if version_compare(version_tuple, (2, 7)) < 0:
raise Exception('python ' + platform.python_version() + ' is not supported. Please update to 2.7 or higher.')
def get_python_version(check_version=False):
version_tuple = _get_python_version_numeric()
if check_version:
check_python_version(version_tuple)
return version_tuple
def version_tuple_from_str(version, nelem=None):
"""Split a version string using '.' and '-' as separators and return a tuple of integers."""
re_match = re.match(r'([0-9.,_-]+\d+)|(\d+)', version)
if re_match:
version_list = re.split('[.,_-]', re_match.group(0))
if nelem is not None:
# adjust the list to contain exactly the specified number of elements.
while len(version_list) < nelem:
version_list.append('0')
return tuple([int(x, 10) for x in version_list[:nelem]])
else:
return tuple([int(x, 10) for x in version_list])
else:
raise Exception("The version string '" + version + "' is not supported, no leading numeric digits found.")
def get_boost_version_str(version_str):
re_match = re.match(r'([0-9.]+\d+)', version_str)
if not re_match:
raise Exception("The version string '" + version_str + "' cannot be converted into a boost compliant version string.")
boost_version_str = re.sub(r'\.', '_', re_match.group(1))
return boost_version_str
def version_tuple_to_str(version, sep='.'):
"""Join the version components using '.' and return the string."""
return sep.join([str(x) for x in version])
def version_list_to_str(version_list):
return ' '.join([version_tuple_to_str(x) for x in version_list])
def ubuntu_version_tuple_to_str(version):
"""Join the first two version components of an ubuntu release number and return the string."""
assert len(version) >= 2
version_str = '%d.%02d' % (version[0], version[1])
return version_str
def version_compare(version1, version2):
"""Compare two version iterables consisting of arbitrary number of numeric elements."""
len_version1 = len(version1)
len_version2 = len(version2)
if len_version1 == len_version2:
# Both version objects have the same number of components, compare them left to right
for i in range(len_version1):
if version1[i] > version2[i]: return 1
elif version1[i] < version2[i]: return -1
# version objects compare equal
return 0
elif len_version1 > len_version2:
version2_tmp = list(version2)
while len(version2_tmp) < len_version1: version2_tmp.append(0)
return version_compare(version1, version2_tmp)
else:
version1_tmp = list(version1)
while len(version1_tmp) < len_version2: version1_tmp.append(0)
return version_compare(version1_tmp, version2)
def version_list_sort(version_list):
# Written for Python 2.7 and 3.x: functools.cmp_to_key() requires 2.7 or higher.
# Notes: python 2.x supports a second argument cmp to specify the comparision function but
# python 3.x does not.
return sorted(version_list, key=functools.cmp_to_key(version_compare))
def version_str_to_rpm_version_tuple(version):
re_match = re.match(r'([^-]+)-(\S+)', version)
if re_match:
return re_match.group(1), re_match.group(2)
else:
re_match = re.match(r'([\d.-]+)[-.](\d+)', version)
if re_match:
return re_match.group(1), re_match.group(2)
raise Exception("The version string '" + version + "' is not a valid RPM version string.")
def get_default_version_filename(src_filename):
"""Returns the default version filename given a source filename."""
repo_name = util.find_repo_name_from_src_path(src_filename)
repo_path = util.find_repo_path_from_src_path(src_filename)
return os.path.join(repo_path, 'include', repo_name, 'version.h')
def parse_version_file(version_file, verbatim=False):
"""Parse standard version file and return the version ID as a numeric tuple or verbatim."""
if not os.path.exists(version_file):
raise Exception("version file '" + version_file + "' does not exist.")
# look at the extension to determine the file type: header file or plist file.
(root, ext) = os.path.splitext(version_file)
if ext == '.plist':
return _parse_version_plist_file(version_file, verbatim)
else:
return _parse_version_h_file(version_file, verbatim)
def _parse_version_h_file(version_file, verbatim=False):
"""Parse standard version file and return the version ID as a numeric tuple or verbatim."""
if not os.path.exists(version_file):
raise Exception("version file '" + version_file + "' does not exist.")
re_version_expr = re.compile(r'(^#if\s+![ ]*defined\(.*)|(^#\s*define\s+\S+_VERSION\s+)')
re_version_tag_expr = re.compile(r'^#if\s+!\s*defined\(\s*([a-zA-Z0-9_]+)\s*\)')
version_tag = None
with open(version_file) as f:
for line in f:
re_match = re_version_expr.match(line)
if not re_match:
continue
# print("version.h: found cpp line: {}".format(line))
if version_tag is None:
re_match = re_version_tag_expr.match(line)
if re_match:
version_tag = re_match.group(1)
# print("found version tag: {}".format(version_tag))
re_version_str = re.compile(r'^#define\s+{}\s+"([^"]+)'.format(version_tag))
re_version_str2 = re.compile(r'^#define\s+{}\s+(\d+)'.format(version_tag))
continue
else:
# print("checking cpp line: {}".format(line))
# version tag found
re_match = re_version_str.match(line)
if not re_match:
re_match = re_version_str2.match(line)
if re_match:
if verbatim:
return re_match.group(1)
else:
return version_tuple_from_str(re_match.group(1))
raise Exception("No version ID found in file '" + version_file + "'.")
def _parse_version_plist_file(plist_file, verbatim=False):
"""Parse Info.plist file and return the version ID as a numeric tuple or verbatim."""
if not os.path.exists(plist_file):
raise Exception("version file '" + plist_file + "' does not exist.")
version_str = None
if (platform.system().lower() == 'darwin') and _is_binary_plist_file(plist_file):
# On MacOSX there are two different plist formats supported: the older xml format and on more recent releases
# the binary format. The latter is not supported by Python's plistlib directly.
retv = subprocess.check_output(['/usr/bin/plutil', '-convert', 'xml1', '-o', '-', plist_file], universal_newlines=True)
pl_dict = plistlib.readPlistFromString(retv)
else:
pl_dict = plistlib.readPlist(plist_file)
# An Info.plist file is expected to contain at least one of the following version keys: CFBundleVersion and CFBundleShortVersionString.
if 'CFBundleShortVersionString' in pl_dict:
version_str = pl_dict['CFBundleShortVersionString']
elif 'CFBundleVersion' in pl_dict:
version_str = pl_dict['CFBundleVersion']
else:
raise Exception("No version ID found in file '" + plist_file + "'.")
if verbatim:
return version_str
else:
return version_tuple_from_str(version_str)
def _is_binary_plist_file(plist_file):
if not os.path.exists(plist_file):
raise Exception("file '" + plist_file + "' does not exist.")
retv = subprocess.check_output(['/usr/bin/file', plist_file], universal_newlines=True)
if re.search('binary property list', retv):
return True
else:
return False
HM-HM-18.0/cmake/CMakeBuild/bin/pyhhi/build/vcsutil.py 0000775 0000000 0000000 00000106620 14420260131 0022324 0 ustar 00root root 0000000 0000000
from __future__ import print_function
import logging
import os
import posixpath
import re
import shutil
import subprocess
import sys
import tempfile
import pyhhi.build.common.ver as ver
import pyhhi.build.common.util as util
from pyhhi.build.common.system import SystemInfo
class VcsCommandTracer(object):
def __init__(self, enable_command_history=True):
self._logger = logging.getLogger(__name__)
if self._logger.isEnabledFor(logging.DEBUG):
self._verbosity_level = 1
else:
self._verbosity_level = 0
self._prog_name = os.path.basename(sys.argv[0])
self._command_history = []
self._enable_command_history = enable_command_history
def add_to_command_history(self, cmd_argv):
if self._enable_command_history:
self._command_history.append(' '.join(cmd_argv))
def get_command_history(self):
return self._command_history
def clear_command_history(self):
self._command_history = []
def trace_command(self, cmd_argv):
if self._verbosity_level > 0:
print("Launching: %s" % ' '.join(cmd_argv))
self.add_to_command_history(cmd_argv)
class VcsUrl(object):
def __init__(self, url_str=None):
self._sys_info = SystemInfo()
self._proto = None
self._username = None
self._host = None
self._resource_path = None
self._re_scp_url = re.compile(r'^([^@/\\:]+)@([^:]+):([^/].+)$')
if url_str:
(self._proto, self._username, self._host, self._resource_path) = self.parse_from_string(url_str)
def get_protocol(self):
return self._proto
def get_hostname(self):
return self._host
def get_username(self):
return self._username
def get_resource_path(self, native=False):
if self._resource_path:
if native and (self._proto is not None) and (self._proto == 'file') and self._sys_info.is_windows():
# Convert the resource path to a native file system path.
if self._resource_path.startswith('/'):
assert len(self._resource_path) > 1
return os.path.normpath(self._resource_path[1:])
elif re.match(r'^[a-zA-Z]:', self._resource_path):
assert len(self._resource_path) > 2
return os.path.normpath(self._resource_path)
return self._resource_path
def set_resource_path(self, res_path):
self._resource_path = res_path
def parse_from_string(self, url_str):
proto = None
username = None
host = None
resource_path = None
re_match = self._re_scp_url.match(url_str)
if re_match:
# Split scp URL
proto = 'ssh'
username = re_match.group(1)
host = re_match.group(2)
resource_path = re_match.group(3)
else:
# Check for proto://
re_match = re.match(r'^([a-z][^:/]+)://(.+)$', url_str)
if re_match:
proto = re_match.group(1)
if proto == 'file':
# A relative path will be converted into an absolute path.
resource_path = re_match.group(2)
if self._sys_info.is_windows():
fs_path_native = os.path.abspath(os.path.normpath(resource_path))
resource_path = util.to_posix_path(fs_path_native)
else:
resource_path = os.path.abspath(resource_path)
else:
host_res_path = re_match.group(2)
re_match = re.match(r'^([^/]+)/(.+)$', host_res_path)
if re_match:
host_part = re_match.group(1)
host = host_part
resource_path = re_match.group(2)
if proto == 'ssh':
# Analyze the host_part
re_match = re.match(r'([^@]+)@([^@]+)$', host_part)
if re_match:
username = re_match.group(1)
host = re_match.group(2)
else:
# Unsupported URL
raise Exception("Unsupported URL: {0}".format(url_str))
else:
# Assume a native file system path.
proto = 'file'
fpath_abs = os.path.abspath(url_str)
# On windows backslashes are converted to slashes.
resource_path = util.to_posix_path(fpath_abs)
self._proto = proto
self._username = username
self._host = host
if resource_path is None:
self._resource_path = resource_path
else:
if proto != 'file':
# Windows file URLs start with a driver letter and are not supported by posixpath.
# Example file://C:/Users/user -> resource path C:/Users/user.
resource_path = posixpath.normpath(resource_path)
self._resource_path = resource_path
return proto, username, host, resource_path
def __str__(self):
if self._proto == 'file':
s = "{0}://{1}".format(self._proto, self._resource_path)
elif (self._proto == 'ssh') and (self._username is not None):
s = "{0}://{1}@{2}/{3}".format(self._proto, self._username, self._host, self._resource_path)
else:
s = "{0}://{1}/{2}".format(self._proto, self._host, self._resource_path)
return s
class VcsUtil(object):
def __init__(self, cmd_tracer=None):
self._logger = logging.getLogger(__name__)
self._sys_info = SystemInfo()
self._remove_tmp_files = True
if self._logger.isEnabledFor(logging.DEBUG):
self._remove_tmp_files = False
self._re_empty_line = re.compile(r'^\s*$')
self._prog_name = os.path.basename(sys.argv[0])
if cmd_tracer is None:
self._cmd_tracer = VcsCommandTracer()
else:
self._cmd_tracer = cmd_tracer
def get_subprocess_devnull(self):
return self._sys_info.get_subprocess_devnull()
def strip_empty_comment_lines(self, comment_lines):
"""Strip empty lines at the beginning and from the end of comment lines passed and return them."""
if not comment_lines:
return comment_lines
while len(comment_lines) > 0:
if self._re_empty_line.match(comment_lines[0]):
comment_lines.pop(0)
else:
break
while len(comment_lines) > 0:
if self._re_empty_line.match(comment_lines[-1]):
comment_lines.pop()
else:
break
return comment_lines
def save_comment_lines_tmpf(self, comment_lines, add_final_newline=True):
assert len(comment_lines) > 0
(tmp_fh, tmp_fname) = tempfile.mkstemp(text=True)
tmp_file = os.fdopen(tmp_fh, 'w')
tmp_file.write('\n'.join(comment_lines))
if add_final_newline:
# and one newline to terminate the last line.
tmp_file.write('\n')
tmp_file.close()
return tmp_fname
def remove_tmp_file(self, fname):
if not os.path.exists(fname):
return
if self._remove_tmp_files:
os.remove(fname)
else:
print("Keeping temporary file: ", fname)
class GitHelper(VcsUtil):
def __init__(self, cmd_tracer=None):
VcsUtil.__init__(self, cmd_tracer)
self._logger = logging.getLogger(__name__)
# git-svn-id: https://visvn.fe.hhi.de/svn/svn_CMakeBuild/tags/3.11.2-1@791 a315372b-2729-4e68-a986-494f0c48443b
self._re_svn_import_id = re.compile(r'^(git-svn-id|svntogit-id):\s*([^@]+)@([0-9]+)\s+(\S+)')
# Attribute _git_executable reserved for future extensions.
self._git_executable = util.find_tool_on_path('git', must_succeed=True)
self._git_version = self._discover_git_version()
def _discover_git_version(self):
git_argv = [self._git_executable, '--version']
retv = subprocess.check_output(git_argv, universal_newlines=True)
lines = retv.splitlines()
re_match = re.search(r'[0-9.]+\.\d+', lines[0])
if re_match:
git_version = ver.version_tuple_from_str(re_match.group(0))
return git_version
else:
raise Exception("git --version returned: '{0}' - version expression not understood.".format(retv))
def get_git_executable(self):
return self._git_executable
def get_git_version(self):
return self._git_version
def get_command_history(self):
return self._cmd_tracer.get_command_history()
def clear_command_history(self):
self._cmd_tracer.clear_command_history()
def is_empty_repo(self, repo_dir=None):
git_argv = [self._git_executable, 'show-ref', '-q']
# Save initial current working directory
cur_dir = os.getcwd()
if repo_dir is None:
assert os.path.exists(os.path.join(cur_dir, '.git'))
self.trace_git_command(git_argv)
retv = util.subproc_call_flushed(git_argv)
else:
assert os.path.exists(os.path.join(repo_dir, '.git'))
os.chdir(repo_dir)
self.trace_git_command(git_argv)
retv = util.subproc_call_flushed(git_argv)
# Recover initial current working directory
os.chdir(cur_dir)
return retv != 0
def get_local_branches(self):
local_branches = []
git_argv = [self._git_executable, 'branch']
self.trace_git_command(git_argv)
retv = subprocess.check_output(git_argv, universal_newlines=True)
re_expr = re.compile(r'^\*?\s+(\S+)')
for line in retv.splitlines():
l = line.rstrip()
re_match = re_expr.match(l)
if re_match:
local_branches.append(re_match.group(1))
return local_branches
def get_remote_branches(self, repo='origin'):
remote_branches = []
git_argv = [self._git_executable, 'ls-remote', '--heads', repo]
self.trace_git_command(git_argv)
retv = subprocess.check_output(git_argv, universal_newlines=True)
re_expr = re.compile(r'\S+\s+refs/heads/(\S+)')
for line in retv.splitlines():
l = line.rstrip().lstrip()
re_match = re_expr.match(l)
if re_match:
remote_branches.append(re_match.group(1))
return remote_branches
def get_local_tags(self):
local_tags = []
git_argv = [self._git_executable, 'tag']
self.trace_git_command(git_argv)
retv = subprocess.check_output(git_argv, universal_newlines=True)
for line in retv.splitlines():
l = line.rstrip().lstrip()
if re.match(r'^\S+', l):
local_tags.append(l)
return local_tags
def get_remote_tags(self, repo='origin'):
remote_tags = []
git_argv = [self._git_executable, 'ls-remote', '--tags', '--refs', repo]
self.trace_git_command(git_argv)
retv = subprocess.check_output(git_argv, universal_newlines=True)
# 5acba4bba0159c921d3e9de82a450d0e48092d1f refs/tags/3.10.1-1
re_expr = re.compile(r'\S+\s+refs/tags/(\S+)')
for line in retv.splitlines():
l = line.rstrip().lstrip()
re_match = re_expr.match(l)
if re_match:
remote_tags.append(re_match.group(1))
return remote_tags
def get_submodule_paths(self):
submd_paths = []
if not os.path.exists('.gitmodules'):
# If .gitmodules does not exist, we don't have any submodules.
# If it does exist, we may have some provided the file is not empty.
return submd_paths
elif os.stat('.gitmodules').st_size == 0:
# Check for empty .gitmodules
return submd_paths
if ver.version_compare(self._git_version, (2, 7)) < 0:
raise Exception("git version {0} is too old, please update to 2.7 or higher".format(ver.version_tuple_to_str(self._git_version)))
git_argv = [self._git_executable, 'submodule--helper', 'list']
self.trace_git_command(git_argv)
retv = subprocess.check_output(git_argv, universal_newlines=True)
for line in retv.splitlines():
if self._re_empty_line.match(line):
continue
l = line.rstrip().lstrip()
fields = l.split()
if fields:
self._logger.debug("found submodule path {0}".format(fields[-1]))
submd_paths.append(fields[-1])
return submd_paths
def get_tag_log(self, tag, strip_git_svn_id=False, strip_empty_lines=True):
tag_log = []
git_argv = [self._git_executable, 'tag', '-l', '--format=%(contents)', tag]
self.trace_git_command(git_argv)
retv = subprocess.check_output(git_argv, universal_newlines=True)
log_lines = retv.splitlines()
for line in log_lines:
if strip_git_svn_id and (line.startswith('git-svn-id:') or line.startswith('svntogit-id:')):
continue
tag_log.append(line)
if strip_empty_lines:
tag_log = self.strip_empty_comment_lines(tag_log)
return tag_log
def get_commit_hash(self, tag=None):
git_argv = [self._git_executable, 'rev-list', '-n', '1']
if tag is None:
git_argv.append('HEAD')
else:
git_argv.append(tag)
self.trace_git_command(git_argv)
retv = subprocess.check_output(git_argv, universal_newlines=True)
return retv.lstrip().rstrip()
def parse_svn_import_id(self, comment_lines):
for line in comment_lines:
re_match = self._re_svn_import_id.match(line)
if re_match:
svn_url = re_match.group(2)
svn_rev = int(re_match.group(3))
svn_repo_uuid = re_match.group(4)
return svn_url, svn_rev, svn_repo_uuid
return None
def get_wc_commit_log(self, strip_git_svn_id=True, strip_empty_lines=True):
commit_log = []
# List commit message preserving newlines.
git_argv = [self._git_executable, 'log', '--pretty=tformat:%B', '-n', '1']
self.trace_git_command(git_argv)
retv = subprocess.check_output(git_argv, universal_newlines=True)
log_lines = retv.splitlines()
for line in log_lines:
if strip_git_svn_id and line.startswith('git-svn-id:'):
continue
commit_log.append(line)
if strip_empty_lines:
# Strip leading and trailing empty lines
commit_log = self.strip_empty_comment_lines(commit_log)
return commit_log
def trace_git_command(self, git_argv):
self._cmd_tracer.trace_command(git_argv)
def get_latest_cmakebuild_tag(self, cmakebuild_repo):
cmakebuild_tags = self.get_remote_tags(cmakebuild_repo)
cmakebuild_version_list = []
cmakebuild_release_tag_map = {}
re_expr_release_tag = re.compile(r'^[0-9.-]+$')
for tag in cmakebuild_tags:
if re_expr_release_tag.match(tag):
# Release tag found
cmakebuild_version = ver.version_tuple_from_str(tag)
cmakebuild_version_list.append(cmakebuild_version)
cmakebuild_version_str = ver.version_tuple_to_str(cmakebuild_version)
# Adds a mapping from a normalized version string to the tag: e.g. 3.12.3.4 -> 3.12.3-4
cmakebuild_release_tag_map[cmakebuild_version_str] = tag
else:
self._logger.info("ignoring CMakeBuild tag {} - it does not match the release pattern.".format(tag))
if not cmakebuild_version_list:
raise Exception("No CMakeBuild release tag found.")
cmakebuild_version_list = ver.version_list_sort(cmakebuild_version_list)
cmakebuild_version = cmakebuild_version_list[-1]
cmakebuild_tag = cmakebuild_release_tag_map[ver.version_tuple_to_str(cmakebuild_version)]
self._logger.info("selecting CMakeBuild tag {}".format(cmakebuild_tag))
return cmakebuild_tag
class SvnProperties(object):
def __init__(self):
self._svn_prop_list = []
# key = svn property, value = list of property values
self._svn_prop_value_dict = {}
def is_empty(self):
return len(self._svn_prop_list) == 0
def clear(self):
self._svn_prop_list = []
self._svn_prop_value_dict = {}
def add_property(self, prop, prop_values):
# Each property must have at least one associated value.
assert len(prop_values) >= 1
self._svn_prop_list.append(prop)
self._svn_prop_value_dict[prop] = prop_values
def update_property(self, prop, prop_values):
# Each property must have at least one associated value.
assert len(prop_values) >= 1
assert self.has_property(prop)
self._svn_prop_value_dict[prop] = prop_values
def get_property_list(self):
return self._svn_prop_list
def has_property(self, prop):
if prop in self._svn_prop_value_dict:
return True
else:
return False
def get_property(self, prop):
return self._svn_prop_value_dict[prop]
def remove_property(self, prop):
if not self.has_property(prop):
return
self._svn_prop_list.remove(prop)
self._svn_prop_value_dict.pop(prop)
def __str__(self):
if self.is_empty():
return ''
lines = []
for prop in self._svn_prop_list:
# lines.append("{0:>2}{1}".format(' ', prop))
lines.append(prop)
for prop_value in self._svn_prop_value_dict[prop]:
# lines.append("{0:>4}{1}".format(' ', prop_value))
lines.append("{0:>2}{1}".format(' ', prop_value))
# SVN seems to be in favor of a newline terminating multivalue properties
if len(self._svn_prop_value_dict[prop]) > 1:
lines.append('\n')
# Serialize svn properties into a single string and avoid a duplicate newline after
# a multivalue property; e.g.
props_str = ''
for ln in lines:
if ln != '\n':
props_str += "{}\n".format(ln)
else:
# a newline value must not be duplicated.
props_str += ln
return props_str
class SvnPropFileParser(object):
def __init__(self):
self._logger = logging.getLogger(__name__)
def parse_property_file(self, filenm):
if not os.path.exists(filenm):
raise Exception("SVN property file {0} does not exist.".format(filenm))
svn_prop_lines = []
with open(filenm) as svnpropf:
for line in svnpropf:
l = line.rstrip()
svn_prop_lines.append(l)
svn_prop = self.parse_property_file_content(svn_prop_lines)
return svn_prop
def parse_gitignore_file(self, filenm):
if not os.path.exists(filenm):
raise Exception("gitignore file {0} does not exist.".format(filenm))
gitignore_lines = []
with open(filenm) as svnpropf:
for line in svnpropf:
l = line.rstrip()
gitignore_lines.append(l)
svn_prop = self.parse_gitignore_file_content(gitignore_lines)
return svn_prop
def parse_property_file_content(self, svn_prop_lines):
svn_prop = SvnProperties()
prop_name = None
prop_value_list = []
re_prop_name = re.compile(r'^(\s*)(\S+)')
re_discard_line = re.compile(r'(^\s*$)|(^#.*$)|(^Properties on.*$)')
line_cnt = 1
while len(svn_prop_lines) > 0:
line = svn_prop_lines[0]
if not re_discard_line.match(line):
# print(line)
if prop_name is None:
# This line is supposed to contain a property like svn:ignore, leading ws is supported.
re_match = re_prop_name.match(line)
if re_match:
leading_ws_prop_name = re_match.group(1)
prop_name = re_match.group(2)
prop_value_list = []
else:
raise Exception("SVN property parsing error at line {0:d}: {1}".format(line_cnt, line))
else:
# Next property value or next property name?
if line.startswith(' ' + leading_ws_prop_name):
prop_value = line.lstrip()
prop_value_list.append(prop_value)
else:
if prop_value_list:
svn_prop.add_property(prop_name, prop_value_list)
else:
self._logger.debug("ignoring empty SVN property: {0}".format(prop_name))
# print("new property: {0} -> {1}".format(prop_name, ' '.join(prop_value_list)))
prop_name = None
prop_value_list = []
# This line must be reparsed, it's the next property.
continue
else:
self._logger.debug("ignoring line: {0}".format(line))
svn_prop_lines.pop(0)
line_cnt = line_cnt + 1
if prop_name is not None:
if prop_value_list:
svn_prop.add_property(prop_name, prop_value_list)
# print("new property: {0} -> {1}".format(prop_name, ' '.join(prop_value_list)))
#if not svn_prop.is_empty():
# print(svn_prop)
return svn_prop
def parse_gitignore_file_content(self, gitignore_lines, svn_prop=None):
svn_ignores = []
re_discard_line = re.compile(r'(^\s*$)|(^#.*$)')
re_top_folder = re.compile(r'^/([^/]+)/$')
re_folder = re.compile(r'^([^/]+)/$')
for line in gitignore_lines:
if re_discard_line.match(line):
continue
ln_trimmed = line.lstrip().rstrip()
if '/' in ln_trimmed:
re_match = re_top_folder.match(ln_trimmed)
if re_match:
svn_ignores.append(re_match.group(1))
continue
re_match = re_folder.match(ln_trimmed)
if re_match:
svn_ignores.append(re_match.group(1))
continue
else:
svn_ignores.append(ln_trimmed)
if svn_ignores:
if svn_prop is None:
svn_prop = SvnProperties()
svn_prop.add_property('svn:ignore', svn_ignores)
return svn_prop
class SvnHelper(VcsUtil):
def __init__(self, cmd_tracer=None):
VcsUtil.__init__(self, cmd_tracer)
self._logger = logging.getLogger(__name__)
self._dry_run = False
self._svn_repo_std_layout = True
# Not really useful right now but added for future extensions to deal with platforms
# which don't have svn on the search path (e.g. windows or macOS).
self._svn_executable = util.find_tool_on_path('svn', must_succeed=True)
self._svnadmin_executable = self._find_svnadmin()
self._svnmucc_executable = self._find_svnmucc()
def _find_svnadmin(self):
if os.path.isabs(self._svn_executable):
svn_prog = self._svn_executable
else:
svn_prog = util.find_tool_on_path('svn', must_succeed=True)
svn_dir = os.path.dirname(svn_prog)
if self._sys_info.is_windows():
svnadmin = os.path.join(svn_dir, 'svnadmin.{0}'.format('exe'))
else:
svnadmin = os.path.join(svn_dir, 'svnadmin')
return svnadmin
def _find_svnmucc(self):
if os.path.isabs(self._svn_executable):
svn_prog = self._svn_executable
else:
svn_prog = util.find_tool_on_path('svn', must_succeed=True)
svn_dir = os.path.dirname(svn_prog)
if self._sys_info.is_windows():
svnmucc = os.path.join(svn_dir, 'svnmucc.{0}'.format('exe'))
else:
svnmucc = os.path.join(svn_dir, 'svnmucc')
if not os.path.exists(svnmucc):
svnmucc = None
return svnmucc
def set_dry_run(self, dry_run=True):
self._dry_run = dry_run
def get_svn_executable(self):
return self._svn_executable
def get_svnadmin_executable(self):
return self._svnadmin_executable
def create_empty_repository(self, repo_path, std_layout=True):
repo_path = os.path.normpath(os.path.abspath(repo_path))
if os.path.exists(repo_path):
raise Exception("SVN repository path {} already exists.".format(repo_path))
repo_dir = os.path.dirname(repo_path)
if not os.path.exists(repo_dir):
os.makedirs(repo_dir)
svn_argv = [self._svnadmin_executable, 'create', repo_path]
self.trace_svn_command(svn_argv)
if self._dry_run:
self._logger.warning("dry run: {0}".format(' '.join(svn_argv)))
else:
util.subproc_check_call_flushed(svn_argv)
if std_layout:
svn_repo_path_posix = util.to_posix_path(repo_path)
for pth in ['trunk', 'branches', 'tags']:
svn_url = "file://{0}/{1}".format(svn_repo_path_posix, pth)
svn_argv = [self._svn_executable, 'mkdir', '-m', 'creating folder {}'.format(pth), svn_url]
self.trace_svn_command(svn_argv)
if self._dry_run:
self._logger.warning("dry run: {0}".format(' '.join(svn_argv)))
else:
util.subproc_check_call_flushed(svn_argv)
def has_svnmucc(self):
return self._svnmucc_executable is not None
def get_svnmucc_executable(self):
return self._svn_executable
def get_command_history(self):
return self._cmd_tracer.get_command_history()
def clear_command_history(self):
self._cmd_tracer.clear_command_history()
def get_tag_url(self, svn_repo, tag):
assert self._svn_repo_std_layout
return "{0}/tags/{1}".format(svn_repo, tag)
def get_branch_url(self, svn_repo, branch):
assert self._svn_repo_std_layout
if branch == 'trunk':
return "{0}/{1}".format(svn_repo, branch)
else:
return "{0}/branches/{1}".format(svn_repo, branch)
def get_tags(self, svn_repo, with_rev=False):
tags = self.get_svn_folders(svn_repo + '/tags', with_rev)
return tags
def get_latest_tag(self, svn_repo):
tags = self.get_tags(svn_repo)
if not tags:
return None
tag_rev_list = []
for tag in tags:
svn_tag_url = self.get_tag_url(svn_repo, tag)
tag_rev = self.get_svn_rev(svn_tag_url)
tag_rev_list.append(tuple([tag, tag_rev]))
# Sort by revision
tag_rev_list = sorted(tag_rev_list, key=lambda tag_rev: tag_rev[1])
(latest_tag, tag_rev) = tag_rev_list[-1]
return latest_tag
def get_branches(self, svn_repo, with_rev=False):
branches = self.get_svn_folders(svn_repo + '/branches', with_rev)
return branches
def get_svn_folders(self, svn_url, with_rev=False):
svn_folders = []
svn_argv = [self._svn_executable, 'list', svn_url]
self.trace_svn_command(svn_argv)
retv = subprocess.check_output(svn_argv, universal_newlines=True)
re_trailing_slash = re.compile(r'^(.+)/$')
for line in retv.splitlines():
l = line.rstrip().lstrip()
re_match = re_trailing_slash.match(l)
if re_match:
svn_folder = re_match.group(1)
if with_rev:
rev = self.get_svn_rev("{0}/{1}".format(svn_url, svn_folder))
svn_folder += "@{0:d}".format(rev)
svn_folders.append(svn_folder)
return svn_folders
def get_svn_rev(self, svn_url):
svn_argv = [self._svn_executable, 'info', '--show-item', 'last-changed-revision', svn_url]
self.trace_svn_command(svn_argv)
retv = subprocess.check_output(svn_argv, universal_newlines=True)
retv = retv.rstrip()
rev = int(retv)
return rev
def get_repo_uuid(self, svn_repo):
svn_argv = [self._svn_executable, 'info', '--show-item', 'repos-uuid', svn_repo]
self.trace_svn_command(svn_argv)
retv = subprocess.check_output(svn_argv, universal_newlines=True)
retv = retv.lstrip().rstrip()
return retv
def get_svn_log_msg(self, svn_url):
# svn log -l 1 https://visvn.fe.hhi.de/svn/svn_CMakeBuild/tags/3.11.0-1
svn_argv = [self._svn_executable, 'log', '-l', '1', svn_url]
self.trace_svn_command(svn_argv)
retv = subprocess.check_output(svn_argv, universal_newlines=True)
comment_lines = retv.splitlines()
assert len(comment_lines) >= 3
assert comment_lines[0].startswith('---')
comment_lines.pop(0)
# Drop rXXXX ...
comment_lines.pop(0)
assert comment_lines[-1].startswith('---')
comment_lines.pop()
comment_lines = self.strip_empty_comment_lines(comment_lines)
return comment_lines
def svn_save_property_values_tmpf(self, prop_values):
tmp_fname = self.save_comment_lines_tmpf(prop_values)
return tmp_fname
def svn_save_properties(self, svn_props, fname, header_lines=None):
svn_props_serialized = str(svn_props)
with open(fname, "w") as propf:
if header_lines:
header = '\n'.join(header_lines)
propf.write(header)
propf.write('\n')
propf.write(svn_props_serialized)
def svn_read_properties(self, svn_res_path):
svn_argv = [self._svn_executable, 'proplist', '--verbose', svn_res_path]
self.trace_svn_command(svn_argv)
retv = subprocess.check_output(svn_argv, universal_newlines=True)
prop_lines = retv.splitlines()
prop_file_parser = SvnPropFileParser()
return prop_file_parser.parse_property_file_content(prop_lines)
def svn_commit_wc(self, comment_lines, wc_dir):
tmp_fname = self.save_comment_lines_tmpf(comment_lines)
svn_argv = [self._svn_executable, 'ci', '-F', tmp_fname, wc_dir]
self.trace_svn_command(svn_argv)
if self._dry_run:
self._logger.warning("dry run: {0}".format(' '.join(svn_argv)))
else:
util.subproc_check_call_flushed(svn_argv)
def svn_import_wc(self, comment_lines, wc_dir, svn_url, global_ignores=None, quiet=False):
# svn import -F --auto-props --config-option config:miscellany:global-ignores=.git wc_dir svn_url
# e.g. svn_url = https://visvn.fe.hhi.de/svn/svn_CMakeBuildClone/branches/imports/3.10.1-1
tmp_fname = self.save_comment_lines_tmpf(comment_lines)
svn_argv = [self._svn_executable, 'import', '-F', tmp_fname, '--auto-props']
# Add any global ignores.
if global_ignores:
svn_argv.extend(['--config-option', 'config:miscellany:global-ignores=' + ' '.join(global_ignores)])
if quiet:
svn_argv.append('-q')
# finalize the command line
svn_argv.extend([wc_dir, svn_url])
self.trace_svn_command(svn_argv)
if self._dry_run:
self._logger.warning("dry run: {0}".format(' '.join(svn_argv)))
else:
util.subproc_check_call_flushed(svn_argv)
def svn_set_properties_url(self, svn_url, svn_props, work_dir=None):
if svn_props.is_empty():
return
if self.has_svnmucc():
self._svn_set_properties_url_svnmucc(svn_url, svn_props)
else:
raise Exception("svn_set_properties_url() requires svnmucc which is not available.")
def _svn_set_properties_url_svnmucc(self, svn_url, svn_props):
if svn_props.is_empty():
return
tmp_files = []
try:
svn_argv = [self._svnmucc_executable]
(svn_url_prefix, svn_path) = self.svn_split_url(svn_url)
for prop in svn_props.get_property_list():
prop_values = svn_props.get_property(prop)
if len(prop_values) > 1:
tmp_fname = self.svn_save_property_values_tmpf(prop_values)
tmp_files.append(tmp_fname)
svn_argv.extend(['propsetf', prop, tmp_fname, svn_path])
else:
svn_argv.extend(['propset', prop, prop_values[0], svn_path])
svn_argv.append('-m')
svn_argv.append("Properties inserted by {0}".format(self._prog_name))
svn_argv.extend(['-U', svn_url_prefix])
self.trace_svn_command(svn_argv)
if self._dry_run:
self._logger.warning("dry run: {0}".format(' '.join(svn_argv)))
else:
util.subproc_check_call_flushed(svn_argv)
finally:
for pth in tmp_files:
if os.path.exists(pth):
os.remove(pth)
def svn_set_properties_wc(self, svn_props, work_dir):
if svn_props.is_empty():
return
tmp_files = []
try:
for prop in svn_props.get_property_list():
prop_values = svn_props.get_property(prop)
if len(prop_values) > 1:
tmp_fname = self.svn_save_property_values_tmpf(prop_values)
tmp_files.append(tmp_fname)
svn_argv = [self._svn_executable, 'propset', prop, '-F', tmp_fname, work_dir]
else:
svn_argv = [self._svn_executable, 'propset', prop, prop_values[0], work_dir]
self.trace_svn_command(svn_argv)
if self._dry_run:
self._logger.warning("dry run: {0}".format(' '.join(svn_argv)))
else:
util.subproc_check_call_flushed(svn_argv)
finally:
for pth in tmp_files:
if os.path.exists(pth):
os.remove(pth)
def svn_remote_copy(self, comment_lines, svn_url_src, svn_url_dst, create_intermediate_folders=True):
tmp_fname = self.save_comment_lines_tmpf(comment_lines)
svn_argv = [self._svn_executable, 'copy', '-F', tmp_fname]
if create_intermediate_folders:
svn_argv.append('--parents')
svn_argv.extend([svn_url_src, svn_url_dst])
self.trace_svn_command(svn_argv)
if self._dry_run:
self._logger.warning("dry run: {0}".format(' '.join(svn_argv)))
else:
util.subproc_check_call_flushed(svn_argv)
self.remove_tmp_file(tmp_fname)
def svn_remote_rm(self, svn_url, comment_lines):
tmp_fname = self.save_comment_lines_tmpf(comment_lines)
svn_argv = [self._svn_executable, 'rm', '-F', tmp_fname, svn_url]
self.trace_svn_command(svn_argv)
if self._dry_run:
self._logger.warning("dry run: {0}".format(' '.join(svn_argv)))
else:
util.subproc_check_call_flushed(svn_argv)
self.remove_tmp_file(tmp_fname)
def svn_split_url(self, svn_url):
svn_url_norm = svn_url.rstrip('/')
re_match = re.match(r'^(.+)/([^/]+)$', svn_url_norm)
if re_match:
svn_root_url = re_match.group(1)
svn_url_path = "/{}".format(re_match.group(2))
else:
raise Exception("SVN URL {0} not supported.".format(svn_url))
return svn_root_url, svn_url_path
def trace_svn_command(self, svn_argv):
self._cmd_tracer.trace_command(svn_argv)
HM-HM-18.0/cmake/CMakeBuild/cmake/ 0000775 0000000 0000000 00000000000 14420260131 0016341 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/cmake/modules/ 0000775 0000000 0000000 00000000000 14420260131 0020011 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/cmake/modules/BBuildEnv.cmake 0000664 0000000 0000000 00000150465 14420260131 0022640 0 ustar 00root root 0000000 0000000 #[===[.rst:
BBuildEnv
---------
The module BBuildEnv provides a CMake build environment with functions and macros
to access other external SDKs including CodeMeter, CUDASamples, Intel Performance Libraries
not yet supported by CMake natively.
Other macros ensure consistent build settings for multithreading and provide
an abstract CMake generator independent way to configure compiler warnings
depending on compiler family and version.
This module also provides some system information not yet available by CMake.
Unless explicitly disabled by configuration option ``BBuildEnv_EXCLUDE_MODULES``
module ``BBuildEnv`` loads the following submodules to provide additional support
for Boost, Qt5, OpenCV, file downloads, MinGW and CPack:
============================== ===========================================================
Module Description
============================== ===========================================================
:module:`BBuildEnvAddProject` Macros and functions to add standard
subproject like console applications, libraries, samples,
UTF tests and Qt applications to a standard workspace
:module:`BBuildEnvGitSvn` Utility functions to support Git to SVN interoperability.
:module:`BBuildEnvDownload` Supports HTTPS downloads of single files at build time
:module:`BBuildEnvVersionUtil` Functions to parse version header files
:module:`BBuildEnvCPack` Functions helping to create binary distribution packages
:module:`BBuildEnvBoost` Macros and functions helping to use locally built Boost
libraries.
:module:`BBuildEnvOpenCV` Helper functions to copy OpenCV runtime DLLs
:module:`BBuildEnvQt5` Helper functions to copy Qt5 runtime DLLs
:module:`BBuildEnvMingw` Helper functions to copy MinGW runtime DLLs on Ubuntu
============================== ===========================================================
The following modules are not loaded by default as they provide functionality not needed
by all main projects.
- :module:`BBuildEnvGit` provides macros and functions to checkout Git repositories at
configuration time to aggregate them into a single build tree. Similar functionality
is provided by module :module:`FetchContent` with slightly different Git clone and
update behavior.
Configuration Options
^^^^^^^^^^^^^^^^^^^^^
This module evaluates the following variables at load time allowing users to
customize its behavior:
``BBuildEnv_EXCLUDE_MODULES``
List of submodules to be excluded from loading. Use ``ALL`` to disable
loading any submodule.
``BBuildEnv_DEBUG``
Enable debugging messages.
``BBuildEnv_USE_LIBRARY_NAME_POSTFIX``
A boolean variable to enable a configuration specific library name postfix which
allows to install all library or executable variants in the same directory. It's unset/off by
default to provide backward compatibility with earlier releases. If enabled executable
targets will need a configuration postfix as well.
How to Use
^^^^^^^^^^
Include the following statement(s) in your top-level CMakeLists.txt to load this module
and its submodules. The modification of :variable:`CMAKE_MODULE_PATH` makes a set of new
or patched find modules available as well and is therefore the recommended way
to include ``BBuildEnv``. The logic below assumes assumes CMakeBuild is included
as an svn:external or as a versioned Git subtree:
.. code-block:: cmake
# Set module path to subversion or git layout based on the existence of
# ${CMAKE_SOURCE_DIR}/CMakeBuild/CMakeBuild/cmake/modules.
if( EXISTS "${CMAKE_SOURCE_DIR}/CMakeBuild/CMakeBuild/cmake/modules" )
set( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeBuild/CMakeBuild/cmake/modules" )
set( USE_GIT_SUBPROJECTS OFF )
else()
file( GLOB CMAKEBUILD_TAGS RELATIVE ${CMAKE_SOURCE_DIR}/CMakeBuild ${CMAKE_SOURCE_DIR}/CMakeBuild/*/CMakeBuild/cmake/modules/BBuildEnv.cmake )
list( LENGTH CMAKEBUILD_TAGS NUM_OF_TAGS )
if( ${NUM_OF_TAGS} EQUAL 1 )
if( CMAKEBUILD_TAGS MATCHES "^([^/]+)/" )
set( CMAKEBUILD_TAG ${CMAKE_MATCH_1} )
endif()
if( EXISTS "${CMAKE_SOURCE_DIR}/CMakeBuild/${CMAKEBUILD_TAG}/CMakeBuild/cmake/modules" )
set( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeBuild/${CMAKEBUILD_TAG}/CMakeBuild/cmake/modules" )
set( USE_GIT_SUBPROJECTS ON )
else()
message( FATAL_ERROR "ERROR: CMakeBuild directory not found: ${CMAKE_SOURCE_DIR}/CMakeBuild/${CMAKEBUILD_TAG}/CMakeBuild/cmake/modules" )
endif()
else()
message( FATAL_ERROR "ERROR: ${NUM_OF_TAGS} CMakeBuild directories found, exactly one is expected. Directories found: ${CMAKEBUILD_TAGS}" )
endif()
endif()
# Include a utility module providing functions, macros, and settings to customize the build environment.
include( BBuildEnv )
Provided Variables
^^^^^^^^^^^^^^^^^^
Module ``BBuildEnv`` provides the following output variables
which are supposed to be treated readonly:
``BBuildEnv_VERSION``
Module's version in decimal dotted format with a maximum of four components.
``BBuildEnv_MSYS``
Set to true when using MSYS.
``BBuildEnv_GENERATOR_ALIAS``
CMake generator specific build directory. It's a plain name without any path separators.
``umake``
Unix Makefiles
``vs16``
Microsoft Visual Studio 2019
``vs15``
Microsoft Visual Studio 2017
``vs14``
Microsoft Visual Studio 2015
``xcode``
Xcode generator, switching between different Xcode versions is currently not supported within a single build tree.
``ninja``
Ninja generator
``BBuildEnv__POSTFIX``
Configuration specific postfix strings to support side-by-side installation in the same
directory.
``BBuildEnv_SHARED_DIR_POSTFIX``
A string specific to the shared library configuration to allow for single
output directories or installation directories.
``BBuildEnv_OUTPUT_DIR_SUFFIX``
A generator specific relative path to be used in installation rules to support multiple
generators or compiler versions in combination with the same installation prefix.
``BBuildEnv_ROOT_DIR``
Optional root directory of CMakeBuild customization files.
``BBuildEnv_SCRIPT_DIR``
Optional path to non-cmake scripts.
Provided Functions and Macros
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. command:: bb_multithreading
The ``bb_multithreading()`` macro adds an imported target ``Threads::Threads``
to enable multithreaded code generation. All multithreaded targets
shall have an explicit or implicit dependency on ``Threads::Threads``::
bb_multithreading()
.. command:: bb_enable_warnings
The ``bb_enable_warnings()`` macro enables CXX compiler warnings in case the
selected CMake generator does not by default
and accepts parameters to configure warnings as errors and disable warnings given a
specific compiler version or compiler family::
bb_enable_warnings([[-]] [warnings-as-errors] [...])
**Parameters:**
``compiler``
The macro supports the following compiler families
``gcc``, ``clang``, ``msvc`` and ``intel``.
``compiler_version``
Compiler version specified as ``major_version`` or
``major_version.minor_version`` to indicate which compiler version
the macro should configure.
``warnings-as-errors``
Treat warnings as errors.
``warning_flag``
Compiler specific flag to enable or disable a warning.
.. command:: bb_add_subdirectory
The ``bb_add_subdirectory()`` macro adds an external in-tree Git subproject
provided variable ``USE_GIT_SUBPROJECTS`` is ON.
The macro silently assumes the subproject is checked out to
``${CMAKE_SOURCE_DIR}/ext/``. If variable ``USE_GIT_SUBPROJECTS``
is OFF, the macro will invoke :command:`add_subdirectory` for backward compatibility
with SVN repositories and subproject aggregation via SVN externals::
bb_add_subdirectory()
**Parameters:**
``subproject``
A relative path to an in-tree subproject; e.g. ``BoostAddon/src/lib/LoggerLib``
.. command:: bb_set_target_output_name
The ``bb_set_target_output_name`` macro appends a configuration specific postfix to
the output name of executable targets if variable ``BBuildEnv_USE_LIBRARY_NAME_POSTFIX``
is ON. If applied to library targets, it will change :prop_tgt:`COMPILE_PDB_NAME_`
for static libraries to align the PDB filename with the library filename.
CMake's postfix machinery does it for linker generated PDB files but not for compiler
generated PDB files::
bb_set_target_output_name( )
**Parameters:**
``target``
An existing target to be modified.
.. command:: bb_set_external_dir
The ``bb_set_external_dir()`` function searches for a directory given a
relative path using a fixed set of root paths. It's intended use is to find
a shared folder holding an external project
without searching any system paths or cross compiler specific paths::
bb_set_external_dir( [])
**Parameters:**
``abs_path``
Absolute path to ``relative_path`` found in one of the default locations.
``dir``
Directory to search for in one of the default locations. An absolute path
will be returned as-is.
``OPTIONAL``
Search failure is not treated as an fatal error.
**Search Path:**
Search path in decreasing order of preference. All paths consisting of
undefined environment variables are silently ignored.
``$ENV{PROJ_HOME}``
``${CMAKE_SOURCE_DIR}/..``
``${CMAKE_SOURCE_DIR}/../..``
``$ENV{HOME}/projects``
Ignored on native windows host systems. It is searched when MSYS has been detected
or any other non-windows platform.
``$ENV{USERPROFILE}/projects``
Ignored on non-windows host systems.
Reserved Identifiers
^^^^^^^^^^^^^^^^^^^^
Avoiding name clashes in CMakeLists.txt or project specific CMake files all
projects including module ``BBuildEnv``, or any of its submodules, are advised
not to use CMake variables, functions or macros starting with::
BBuildEnv, _BBuildEnv, _bb_, bb_, BB_, _BB_
Users may use variables starting with ``BBuildEnv_`` only to configure the
behavior of ``BuildEnv`` modules or submodules or evaluate properties of loaded
``BuildEnv`` modules or submodules exposed through documented variables
``BBuildEnv_``.
#]===]
if( NOT CMAKE_VERSION VERSION_LESS 3.10 )
include_guard( GLOBAL )
endif()
include( "${CMAKE_CURRENT_LIST_DIR}/BBuildEnvVersion.cmake" )
# List of submodules to load by default.
set( _BBuildEnvSubmoduleList
BBuildEnvAddProject
# BBuildEnvDebug
BBuildEnvDownload
BBuildEnvMingw
BBuildEnvVersionUtil
BBuildEnvCPack
BBuildEnvBoost
BBuildEnvQt5
BBuildEnvOpenCV
BBuildEnvGitSvn
)
foreach( _cmod IN LISTS _BBuildEnvSubmoduleList )
if( DEFINED BBuildEnv_EXCLUDE_MODULES )
if( "${BBuildEnv_EXCLUDE_MODULES}" STREQUAL "ALL" )
break()
endif()
if( NOT _cmod IN_LIST BBuildEnv_EXCLUDE_MODULES )
include( "${CMAKE_CURRENT_LIST_DIR}/${_cmod}.cmake" OPTIONAL )
endif()
else()
include( "${CMAKE_CURRENT_LIST_DIR}/${_cmod}.cmake" OPTIONAL )
endif()
endforeach()
# this macro switches between subversion externals and git dependencies
macro( bb_add_subdirectory subdirectory_ )
if( USE_GIT_SUBPROJECTS )
string( REGEX REPLACE "([^/]+).*" "\\1" BASE_DIRECTORY ${subdirectory_} )
add_subdirectory( ${CMAKE_SOURCE_DIR}/ext/${BASE_DIRECTORY}/${subdirectory_} ${CMAKE_BINARY_DIR}/${subdirectory_} )
else()
add_subdirectory( ${subdirectory_} )
endif()
endmacro()
macro( bb_set_target_output_name target_ )
if( BBuildEnv_USE_LIBRARY_NAME_POSTFIX )
get_target_property( _bb_tmp_target_type ${target_} TYPE )
if( _bb_tmp_target_type STREQUAL "EXECUTABLE" )
set_target_properties( ${target_} PROPERTIES OUTPUT_NAME_DEBUG ${target_}${CMAKE_DEBUG_POSTFIX}
OUTPUT_NAME_RELWITHDEBINFO ${target_}${CMAKE_RELWITHDEBINFO_POSTFIX}
OUTPUT_NAME_MINSIZEREL ${target_}${CMAKE_MINSIZEREL_POSTFIX} )
elseif( MSVC AND (_bb_tmp_target_type STREQUAL "STATIC_LIBRARY" ) )
# message( STATUS "${target_} is static, setting COMPILE_PDB_NAME_DEBUG ..." )
set_target_properties( ${target_} PROPERTIES COMPILE_PDB_NAME_DEBUG ${target_}${CMAKE_DEBUG_POSTFIX} COMPILE_PDB_NAME_RELWITHDEBINFO ${target_}${CMAKE_RELWITHDEBINFO_POSTFIX} )
endif()
endif()
endmacro()
macro( bb_save_find_context fnd_ctx )
if( CMAKE_CROSSCOMPILING )
# find_package must be told not to expect the BOOST libraries inside "CMAKE_FIND_ROOT_PATH".
foreach( _v INCLUDE LIBRARY PACKAGE )
if( DEFINED CMAKE_FIND_ROOT_PATH_MODE_${_v} )
# message( STATUS "bb_save_find_context(): CMAKE_FIND_ROOT_PATH_MODE_${_v}=${CMAKE_FIND_ROOT_PATH_MODE_${_v}}" )
set( ${fnd_ctx}_CMAKE_FIND_ROOT_PATH_MODE_${_v} ${CMAKE_FIND_ROOT_PATH_MODE_${_v}} )
set( CMAKE_FIND_ROOT_PATH_MODE_${_v} NEVER )
else()
unset( ${fnd_ctx}_CMAKE_FIND_ROOT_PATH_MODE_${_v} )
endif()
endforeach()
endif()
endmacro()
macro( bb_restore_find_context fnd_ctx )
if( CMAKE_CROSSCOMPILING )
# Restore CMAKE_FIND_ROOT_PATH settings
foreach( _v INCLUDE LIBRARY PACKAGE )
if( DEFINED ${fnd_ctx}_CMAKE_FIND_ROOT_PATH_MODE_${_v} )
set( CMAKE_FIND_ROOT_PATH_MODE_${_v} ${${fnd_ctx}_CMAKE_FIND_ROOT_PATH_MODE_${_v}} )
unset( ${fnd_ctx}_CMAKE_FIND_ROOT_PATH_MODE_${_v} )
# message( STATUS "bb_restore_find_context(): CMAKE_FIND_ROOT_PATH_MODE_${_v}=${CMAKE_FIND_ROOT_PATH_MODE_${_v}}" )
endif()
endforeach()
endif()
endmacro()
#
# Internal macro to extract the CXX compiler's . version.
#
macro( _bb_get_cxx_compiler_version_major_minor version_major_minor_ )
string( REGEX REPLACE "([0-9]+)\\.([0-9]+)([0-9.]+)?" "\\1.\\2" ${version_major_minor_} ${CMAKE_CXX_COMPILER_VERSION} )
endmacro()
function( bb_get_home_dir home_dir_ )
set( _native FALSE )
if( ARGC EQUAL 2 )
if( ${ARGV1} STREQUAL "NATIVE" )
set( _native TRUE )
else()
message( FATAL_ERROR "bb_get_home_dir: argument ${ARGV1} not understood." )
endif()
elseif( ARGC GREATER 2 )
message( FATAL_ERROR "bb_get_home_dir: too many arguments specified, expected [NATIVE]." )
endif()
if( CMAKE_HOST_WIN32 )
# Force forward slashes on Windows
if( BBuildEnv_MSYS )
if( _native )
file( TO_CMAKE_PATH "$ENV{USERPROFILE}" _home_dir )
else()
file( TO_CMAKE_PATH "$ENV{HOME}" _home_dir )
endif()
else()
file( TO_CMAKE_PATH "$ENV{USERPROFILE}" _home_dir )
endif()
else()
set( _home_dir "$ENV{HOME}" )
endif()
set( ${home_dir_} "${_home_dir}" PARENT_SCOPE )
endfunction()
macro( bb_set_home_dir home_dir_ )
# backward compatibility
bb_get_home_dir( ${home_dir_} )
endmacro()
function( bb_get_binary_tool_dir tool_dir_ )
# Location to store scripts and programs generated by CMake to support the build.
set( _tool_dir "${CMAKE_BINARY_DIR}/tools" )
if( NOT EXISTS "${_tool_dir}" )
file( MAKE_DIRECTORY "${_tool_dir}" )
endif()
set( ${tool_dir_} "${_tool_dir}" PARENT_SCOPE )
endfunction()
macro( bb_check_build_type )
# message( STATUS "bb_check_build_type(): entering" )
if( CMAKE_VERSION VERSION_LESS 3.9 )
# Define property GENERATOR_IS_MULTI_CONFIG if it does not exist.
get_property( _bb_have_generator_is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG DEFINED )
if( NOT _bb_have_generator_is_multi_config )
# message( STATUS "bb_check_build_type(): global property GENERATOR_IS_MULTI_CONFIG is undefined." )
# Property GENERATOR_IS_MULTI_CONFIG is not available
define_property( GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG
BRIEF_DOCS "True when using a multi-configuration generator."
FULL_DOCS "True when using a multi-configuration generator. Builtin property of CMake 3.9.0 or higher." )
if( MSVC OR XCODE )
set_property( GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG 1 )
else()
set_property( GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG 0 )
endif()
endif()
unset( _bb_have_generator_is_multi_config )
endif()
get_property( _bb_generator_is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG )
# message( STATUS "bb_check_build_type(): GENERATOR_IS_MULTI_CONFIG=${_bb_generator_is_multi_config}" )
if( NOT _bb_generator_is_multi_config )
# set default CMAKE_BUILD_TYPE to Release if not set
if( NOT CMAKE_BUILD_TYPE )
set( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE )
endif()
endif()
unset( _bb_generator_is_multi_config )
# message( STATUS "bb_check_build_type(): leaving" )
endmacro( bb_check_build_type )
macro( bb_multithreading )
if( TARGET Threads::Threads )
message( FATAL_ERROR "bb_multithreading(): target Threads::Threads already exists. Please contact technical support." )
endif()
unset( _bb_mt_prop_value )
if( MINGW )
# MinGW may be a native compiler or a cross compiler.
find_package( Threads REQUIRED )
#add_compile_options( -mthreads )
#message( STATUS "bb_multithreading(): mingw detected, add_compile_options: -mthreads" )
get_target_property( _bb_mt_prop_value Threads::Threads INTERFACE_COMPILE_OPTIONS )
if( _bb_mt_prop_value )
if( NOT _bb_mt_prop_value STREQUAL "-mthreads" )
message( FATAL_ERROR "bb_multithreading(): target Threads::Threads has unexpected INTERFACE_COMPILE_OPTIONS: ${_bb_mt_prop_value}" )
endif()
else()
set_target_properties( Threads::Threads PROPERTIES INTERFACE_COMPILE_OPTIONS "-mthreads" )
endif()
elseif( CMAKE_CROSSCOMPILING )
find_package( Threads REQUIRED )
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "Cray" )
find_package( Threads REQUIRED )
else()
if( CMAKE_SYSTEM_NAME STREQUAL "Linux" )
# Add interface compile/link option -pthread
set( THREADS_PREFER_PTHREAD_FLAG ON )
endif()
find_package( Threads REQUIRED )
if( CMAKE_SYSTEM_NAME STREQUAL "Linux" )
# A compile option -pthread bound to all enabled languages won't work if CUDA is enabled as a programming language (tested with cmake 3.9.1).
# Since NVCC does not understand -pthread, the compile option must be bound to C and CXX.
get_target_property( _bb_mt_prop_value Threads::Threads INTERFACE_COMPILE_OPTIONS )
if( _bb_mt_prop_value )
if( _bb_mt_prop_value STREQUAL "-pthread" )
set_target_properties( Threads::Threads PROPERTIES INTERFACE_COMPILE_OPTIONS $<$,$>:-pthread> )
endif()
endif()
endif()
endif()
endmacro( bb_multithreading )
macro( bb_enable_warnings )
unset( _bb_warning_options ) # in case the calling context has defined it.
_bb_enable_warnings_helper( _bb_warning_options ${ARGN} )
if( DEFINED _bb_warning_options )
message( STATUS "bb_enable_warnings: ${toolset} -> updating warnings flags: ${_bb_warning_options}" )
foreach( _bb_warning_opt IN LISTS _bb_warning_options )
if( MSVC )
# CMake 3.11.0 introduces support for generator expression COMPILE_LANGUAGE.
# MSVC generator does not support the generator expression COMPILE_LANGUAGE yet.
string( APPEND CMAKE_CXX_FLAGS " ${_bb_warning_opt}" )
string( APPEND CMAKE_C_FLAGS " ${_bb_warning_opt}" )
else()
add_compile_options( $<$,$>:${_bb_warning_opt}> )
endif()
endforeach()
unset( _bb_warning_options )
endif()
endmacro()
function( _bb_enable_warnings_helper warning_options_ )
#message( STATUS "_bb_enable_warnings_helper(): ${warning_options_} ARGC=${ARGC} ${ARGN}" )
# Translate CMAKE_CXX_COMPILER_ID to a string which compares easily with toolset -> gcc, msvc, clang.
if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
set( _bb_warning_compiler_id "gcc" )
elseif( CMAKE_CXX_COMPILER_ID MATCHES "^(AppleClang|Clang)$" )
if( MSVC )
# No support for clang as MSVC toolset.
# message( STATUS "_bb_enable_warnings_helper(): no support for MSVC/clang toolsets yet." )
return()
else()
set( _bb_warning_compiler_id "clang" )
endif()
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
set( _bb_warning_compiler_id "msvc" )
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "Intel" )
set( _bb_warning_compiler_id "intel" )
if( APPLE )
# No support for intel yet.
return()
endif()
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "Cray" )
set( _bb_warning_compiler_id "cray" )
return()
else()
# Not a compiler ID we have support for.
return()
endif()
# Unset a few variables the logic below depends on. The calling context may have defined them.
unset( _bb_warning_options )
unset( _bb_tmp_list_var )
if( ${ARGC} GREATER 1 )
set( _bb_tmp_list_var "${ARGN}" )
# Analyze the first argument it may be a toolset, warnings-as-errors or a warning option.
list( GET _bb_tmp_list_var 0 _arg1 )
if( "${_arg1}" MATCHES "^(gcc|clang|msvc|intel)" )
#message( STATUS "bb_enable_warnings(): found toolset argument ${ARGV0}" )
if( "${_arg1}" MATCHES "^([a-z]+)-([0-9]+)$" )
# Strip version suffix; e.g. gcc-8 -> gcc
set( _bb_warning_toolset "${CMAKE_MATCH_1}" )
# Save major version
set( _bb_warning_toolset_version "${CMAKE_MATCH_2}" )
# Get compiler's minor version
if( CMAKE_CXX_COMPILER_VERSION MATCHES "^[0-9]+\\.([0-9]+)" )
string( APPEND _bb_warning_toolset_version ".${CMAKE_MATCH_1}" )
endif()
elseif( "${_arg1}" MATCHES "^([a-z]+)-([0-9]+\\.[0-9]+)" )
# Strip version suffix; e.g. gcc-4.8 -> gcc
set( _bb_warning_toolset "${CMAKE_MATCH_1}" )
set( _bb_warning_toolset_version "${CMAKE_MATCH_2}" )
else()
set( _bb_warning_toolset "${_arg1}" )
# Fake a version matching the current compiler version which simplifies the logic below.
if( DEFINED bb_compiler_version_major_minor )
set( _bb_warning_toolset_version "${bb_compiler_version_major_minor}" )
else()
_bb_get_cxx_compiler_version_major_minor( _bb_warning_toolset_version )
endif()
endif()
if( ( NOT _bb_warning_toolset STREQUAL _bb_warning_compiler_id ) OR ( NOT _bb_warning_toolset_version VERSION_EQUAL bb_compiler_version_major_minor ) )
# No match for current CXX compiler
# message( STATUS "_bb_enable_warnings_helper(): no match for current compiler" )
return()
endif()
# Drop the toolset from the list of arguments to be processed later on
list( REMOVE_AT _bb_tmp_list_var 0 )
endif()
endif()
if( CMAKE_CXX_COMPILER_ID MATCHES "^(AppleClang|Clang)$" )
if( NOT XCODE )
set( _bb_warning_options -Wall )
endif()
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
set( _bb_warning_options -Wall -fdiagnostics-show-option )
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
# Do we have to override the warning level?
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "Intel" )
# Do we have to override the warning level on Windows/MSVC?
if( ( NOT MSVC ) AND ( NOT XCODE ) )
set( _bb_warning_options -Wall )
endif()
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "Cray" )
# Do we have to override the warning level?
endif()
#message( STATUS "bb_enable_warnings(): processing additional warning options ${_bb_tmp_list_var}" )
foreach( _bb_v IN LISTS _bb_tmp_list_var )
#message( STATUS "processing ${_bb_v}" )
if( ${_bb_v} STREQUAL "warnings-as-errors" )
if( CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|AppleClang|Clang)$" )
list( APPEND _bb_warning_options "-Werror" )
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "Intel" )
if( MSVC )
list( APPEND _bb_warning_options "/WX" )
else()
list( APPEND _bb_warning_options "-Werror" )
endif()
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
list( APPEND _bb_warning_options "/WX" )
endif()
else()
list( APPEND _bb_warning_options "${_bb_v}" )
endif()
endforeach()
if( DEFINED _bb_warning_options )
if( MSVC )
if( CMAKE_CXX_COMPILER_ID STREQUAL "Intel" )
# Replace -XXX with /XXX avoiding the mix of both option specifications.
string( REPLACE "-Q" "/Q" _bb_warning_options "${_bb_warning_options}" )
endif()
endif()
set( ${warning_options_} ${_bb_warning_options} PARENT_SCOPE )
endif()
endfunction( _bb_enable_warnings_helper )
macro( bb_get_program_files_x86 program_files_x86_ )
bb_get_env_icase( ${program_files_x86_} "ProgramFiles(x86)" TO_CMAKE_PATH )
endmacro()
macro( bb_get_program_files program_files_ )
bb_get_env_icase( ${program_files_} "ProgramFiles" TO_CMAKE_PATH )
endmacro()
macro( bb_get_program_data program_data_ )
bb_get_env_icase( ${program_data_} "ProgramData" TO_CMAKE_PATH )
endmacro()
function( bb_get_env_icase env_var_value_ env_var_ )
unset( _path_conversion )
if( ${ARGC} EQUAL 3 )
set( _path_conversion ${ARGV2} )
if( NOT ${_path_conversion} MATCHES "^(TO_CMAKE_PATH|TO_NATIVE_PATH)$" )
message( FATAL_ERROR "illegal conversion ${_path_conversion} specified, use TO_CMAKE_PATH or TO_NATIVE_PATH" )
endif()
elseif( ${ARGC} GREATER 3 )
message( FATAL_ERROR "too many arguments specified: ${ARGV}" )
endif()
unset( _env_var_value )
if( DEFINED ENV{${env_var_}} )
set( _env_var_value "$ENV{${env_var_}}" )
else()
# Mixed-case environment variable?
string( TOUPPER "${env_var_}" _env_var_uc )
if( NOT ${_env_var_uc} STREQUAL ${env_var_} )
# Try uppercase environment variable to suit buildbot and possibly other python frameworks.
if( DEFINED ENV{${_env_var_uc}} )
set( _env_var_value "$ENV{${_env_var_uc}}" )
endif()
endif()
endif()
if( DEFINED _env_var_value )
if( DEFINED _path_conversion )
file( ${_path_conversion} "${_env_var_value}" _env_var_value )
endif()
set( ${env_var_value_} "${_env_var_value}" PARENT_SCOPE )
else()
# Should we assign -NOTFOUND instead?
if( DEFINED ${env_var_value_} )
unset( ${env_var_value_} PARENT_SCOPE )
endif()
endif()
endfunction()
function( _bb_find_proj_home proj_home_ home_dir_ )
unset( _proj_home )
if( DEFINED ENV{PROJ_HOME} )
# message( STATUS "BBuildEnv: using environment variable PROJ_HOME=$ENV{PROJ_HOME}" )
# Force forward slashes on Windows
file( TO_CMAKE_PATH "$ENV{PROJ_HOME}" _proj_home )
if( NOT EXISTS ${_proj_home} )
message( FATAL_ERROR "\
Environment variable PROJ_HOME=${_proj_home}
points to a non-existing directory.
" )
endif()
elseif( EXISTS "${home_dir_}/projects" )
set( _proj_home "${home_dir_}/projects" )
elseif( BBuildEnv_MSYS )
# Check for %USERPROFILE%/projects as a fallback when using MSYS.
bb_get_home_dir( _home_dir NATIVE )
if( EXISTS "${_home_dir}/projects" )
set( _proj_home "${_home_dir}/projects" )
endif()
endif()
if( DEFINED _proj_home )
set( ${proj_home_} "${_proj_home}" PARENT_SCOPE )
endif()
endfunction()
#
# search path: $ENV{PROJ_HOME} ${CMAKE_SOURCE_DIR}/.. ${CMAKE_SOURCE_DIR}/../.. ${bb_home_dir}/projects
#
function( bb_set_external_dir dir_var_ dir_ )
unset( _dir )
set( _dir_required TRUE )
if( ARGC GREATER 2 )
# Process optional arguments
foreach( _arg IN LISTS ARGN )
if( _arg STREQUAL "OPTIONAL" )
set( _dir_required FALSE )
endif()
endforeach()
endif()
if( IS_ABSOLUTE "${dir_}" )
if( NOT EXISTS "${dir_}" )
if( _dir_required )
message( FATAL_ERROR "bb_set_external_dir(): ${dir_} does not exist." )
endif()
else()
set( _dir "${dir_}" )
endif()
else()
unset( _search_path )
if( DEFINED ENV{PROJ_HOME} )
file( TO_CMAKE_PATH "$ENV{PROJ_HOME}" _proj_home )
list( APPEND _search_path "${_proj_home}" )
endif()
foreach( _dir_tmp "${CMAKE_CURRENT_SOURCE_DIR}/.." "${CMAKE_CURRENT_SOURCE_DIR}/../.." )
if( EXISTS "${_dir_tmp}" )
get_filename_component( _dir_norm "${_dir_tmp}" REALPATH )
list( APPEND _search_path "${_dir_norm}" )
endif()
endforeach()
bb_get_home_dir( _home_dir )
if( EXISTS "${_home_dir}/projects" )
list( APPEND _search_path "${_home_dir}/projects" )
endif()
if( BBuildEnv_MSYS )
bb_get_home_dir( _home_dir NATIVE )
if( EXISTS "${_home_dir}/projects" )
list( APPEND _search_path "${_home_dir}/projects" )
endif()
endif()
list( REMOVE_DUPLICATES _search_path )
foreach( _path IN LISTS _search_path )
if( EXISTS "${_path}/${dir_}" )
set( _dir "${_path}/${dir_}" )
break()
endif()
endforeach()
if( NOT DEFINED _dir )
if( _dir_required )
message( FATAL_ERROR "bb_set_external_dir(): cannot find ${dir_} in ${_search_path}. You may use the environment variable PROJ_HOME to supplement the default search path." )
endif()
else()
get_filename_component( _dir "${_dir}" REALPATH )
endif()
endif()
if( DEFINED _dir )
set( ${dir_var_} "${_dir}" PARENT_SCOPE )
endif()
endfunction()
#
# Additional system information
#
macro( bb_get_python_script_path script_path_ script_dir_ script_name_ )
if( PYTHONINTERP_FOUND )
if( ${PYTHON_VERSION_STRING} VERSION_LESS 3.0 )
set( ${script_path_} "${script_dir_}/${script_name_}.py" )
else()
set( ${script_path_} "${script_dir_}/${script_name_}3.py" )
endif()
else()
message( FATAL_ERROR "bb_get_python_script_path(): configuration error: python interpreter not found, please contact technical support." )
endif()
endmacro()
function( _bb_query_linux_pkg_arch pkg_arch_ )
if( bb_dpkg_cmd )
execute_process( COMMAND ${bb_dpkg_cmd} --print-architecture
RESULT_VARIABLE _retv_child
OUTPUT_VARIABLE _pkg_arch
OUTPUT_STRIP_TRAILING_WHITESPACE )
if( NOT _retv_child EQUAL 0 )
message( FATAL_ERROR "${bb_dpkg_cmd} --print-architecture failed, please contact technical support." )
endif()
set( ${pkg_arch_} "${_pkg_arch}" PARENT_SCOPE )
elseif( bb_rpm_cmd )
execute_process( COMMAND ${bb_rpm_cmd} --eval "%_arch"
RESULT_VARIABLE _retv_child
OUTPUT_VARIABLE _pkg_arch
OUTPUT_STRIP_TRAILING_WHITESPACE )
if( NOT _retv_child EQUAL 0 )
message( FATAL_ERROR "${bb_rpm_cmd} --eval %_arch failed, please contact technical support." )
endif()
endif()
if( DEFINED _pkg_arch )
set( ${pkg_arch_} "${_pkg_arch}" PARENT_SCOPE )
endif()
endfunction()
function( _bb_find_macosx_isysroot isysroot_ )
if( CMAKE_HOST_APPLE )
execute_process( COMMAND xcrun --sdk macosx --show-sdk-path
RESULT_VARIABLE _retv_child
OUTPUT_VARIABLE _isysroot
OUTPUT_STRIP_TRAILING_WHITESPACE )
# message( STATUS "macosx isysroot discovery: retv_child=${_retv_child} ${_isysroot}" )
if( _retv_child EQUAL 0 )
set( ${isysroot_} ${_isysroot} PARENT_SCOPE )
endif()
endif()
endfunction()
function( _bb_query_system_info system_info_ )
#message( STATUS "_bb_query_system_info: starting system_info=${${system_info_}}" )
if( DEFINED ${system_info_} )
return()
endif()
#message( STATUS "BBuildEnv: collecting additional system information ..." )
foreach( v _lsb_distro_name _lsb_distro_codename _lsb_distro_version _distro_pkg_fmt _distro_pkg_arch _isysroot )
# message( STATUS "v = ${v}" )
set( ${v} "none" )
endforeach()
set( _os_arch "x86_64" )
if( CMAKE_HOST_WIN32 )
# cmake host system: Windows-6.1.7601
set( _system_info "windows" )
if( CMAKE_HOST_SYSTEM MATCHES "[wW][A-Za-z]+-([0-9.]+)" )
set( _lsb_distro_version "${CMAKE_MATCH_1}" )
endif()
elseif( CMAKE_HOST_APPLE )
set( _system_info "macosx" )
if( NOT CMAKE_VERSION VERSION_LESS 3.10.0 )
# sw_vers -productVersion
cmake_host_system_information( RESULT _lsb_distro_version QUERY OS_RELEASE )
# sw_vers -buildVersion
# cmake_host_system_information( RESULT _lsb_distro_version QUERY OS_VERSION )
else()
execute_process( COMMAND sw_vers -productVersion
OUTPUT_VARIABLE _lsb_distro_version
RESULT_VARIABLE _retv_child
OUTPUT_STRIP_TRAILING_WHITESPACE )
if( NOT _retv_child EQUAL 0 )
message( WARNING "sw_vers -productVersion failed, please contact technical support." )
endif()
endif()
if( NOT CMAKE_CROSSCOMPILING )
_bb_find_macosx_isysroot( _isysroot )
endif()
elseif( CMAKE_HOST_UNIX )
set( _system_info "linux" )
if( CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^(i686|x86)$" )
set( _os_arch "x86" )
endif()
mark_as_advanced( bb_dpkg_cmd bb_bb_rpm_cmd bb_lsb_release_cmd )
find_program( bb_dpkg_cmd "dpkg" )
if( bb_dpkg_cmd )
set( _distro_pkg_fmt "deb" )
else()
find_program( bb_rpm_cmd "rpm" )
if( bb_rpm_cmd )
set( _distro_pkg_fmt "rpm" )
endif()
endif()
find_program( bb_lsb_release_cmd "lsb_release" )
if( DEFINED ENV{CRAYOS_VERSION} )
set( _lsb_distro_version $ENV{CRAYOS_VERSION} )
set( _lsb_distro_name "cray" )
set( _lsb_distro_codename "none" )
else()
if( NOT bb_lsb_release_cmd )
message( WARNING "BBuildEnv: lsb_release not found, no way to retrieve additional linux system information." )
#return()
else()
execute_process( COMMAND ${bb_lsb_release_cmd} -is
RESULT_VARIABLE _retv_child
OUTPUT_VARIABLE _lsb_distro_name
OUTPUT_STRIP_TRAILING_WHITESPACE )
if( NOT _retv_child EQUAL 0 )
message( WARNING "${bb_lsb_release_cmd} -is failed, please contact technical support." )
endif()
execute_process( COMMAND ${bb_lsb_release_cmd} -cs
RESULT_VARIABLE _retv_child
OUTPUT_VARIABLE _lsb_distro_codename
OUTPUT_STRIP_TRAILING_WHITESPACE )
if( NOT _retv_child EQUAL 0 )
message( WARNING "${bb_lsb_release_cmd} -cs failed, please contact technical support." )
endif()
execute_process( COMMAND ${bb_lsb_release_cmd} -rs
RESULT_VARIABLE _retv_child
OUTPUT_VARIABLE _lsb_distro_version
OUTPUT_STRIP_TRAILING_WHITESPACE )
if( NOT _retv_child EQUAL 0 )
message( WARNING "${bb_lsb_release_cmd} -rs failed, please contact technical support." )
endif()
endif()
endif()
_bb_query_linux_pkg_arch( _distro_pkg_arch )
# convert distro name to lowercase
string( TOLOWER "${_lsb_distro_name}" _lsb_distro_name )
# convert distro codename to lowercase
string( TOLOWER "${_lsb_distro_codename}" _lsb_distro_codename )
# suse does not seem to provide a reasonable codename via lsb_release -cs and issues "n/a". Such
# a string is likely to cause problems if used as filename component or evaluated in a similar context.
# Hence, it's replace by none.
if( _lsb_distro_codename STREQUAL "n/a" )
set( _lsb_distro_codename "none" )
endif()
endif()
if( _lsb_distro_version STREQUAL "none" )
set( _lsb_distro_version "0.0" )
endif()
list( APPEND _system_info ${_os_arch} ${_lsb_distro_name} ${_lsb_distro_codename} ${_lsb_distro_version} ${_distro_pkg_fmt} ${_distro_pkg_arch} ${_isysroot} )
set( ${system_info_} "${_system_info}" CACHE INTERNAL "additional system information" )
endfunction( _bb_query_system_info )
function( _bb_get_platform_dir platform_dir_ )
if( CMAKE_CROSSCOMPILING )
if( CMAKE_SYSTEM_PROCESSOR MATCHES "^(i686|x86)$" )
set( _platform_dir "x86" )
elseif( CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64)$" )
set( _platform_dir "x86_64" )
else()
set( _platform_dir "${CMAKE_SYSTEM_PROCESSOR}" )
endif()
else()
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set( _platform_dir "x86_64" )
else()
set( _platform_dir "x86" )
endif()
endif()
set( ${platform_dir_} "${_platform_dir}" PARENT_SCOPE )
endfunction()
function( _bb_get_toolset_subdir toolset_subdir_ compiler_version_ )
unset( _toolset_subdir )
# Assume cmake is able to figure out CMAKE_CXX_COMPILER_ID for all compilers including cross compilers.
if( CMAKE_CXX_COMPILER_ID MATCHES "^(AppleClang|Clang)$" )
set( _toolset_subdir "clang-${compiler_version_}" )
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
set( _toolset_subdir "gcc-${compiler_version_}" )
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
set( _toolset_subdir "msvc-${compiler_version_}" )
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "Intel" )
set( _toolset_subdir "intel-${compiler_version_}" )
if( MSVC )
if( NOT DEFINED bb_generator_alias )
message( FATAL_ERROR "MSVC defined but bb_generator_alias is undefined, looks like an internal bug. Please contact technical support." )
else()
set( _toolset_subdir "intel-${compiler_version_}-${bb_generator_alias}" )
endif()
endif()
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "Cray" )
set( _toolset_subdir "cray-${compiler_version_}" )
else()
message( FATAL_ERROR "unsupported CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}, please contact technical support." )
endif()
if( MINGW )
# MinGW is either a cross compiler or a native compiler.
set( _toolset_subdir "gcc-mingw-${compiler_version_}" )
elseif( CMAKE_CROSSCOMPILING )
if( BBuildEnv_DEBUG )
message( STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
"cross compiling for ${CMAKE_SYSTEM_PROCESSOR} CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID} cxx_version=${compiler_version_}" )
endif()
# message( FATAL_ERROR "no support for this type of cross compiler, please contact technical support." )
endif()
if( DEFINED _toolset_subdir )
set( ${toolset_subdir_} "${_toolset_subdir}" PARENT_SCOPE )
endif()
endfunction()
function( bb_get_os_arch os_arch_ )
list( GET bb_system_info 1 _os_arch )
set( ${os_arch_} "${_os_arch}" PARENT_SCOPE )
endfunction()
function( bb_get_target_arch target_arch_ )
list( GET bb_system_info 1 _target_arch )
if( MSVC )
if( CMAKE_SIZEOF_VOID_P EQUAL 4 )
set( _target_arch "x86" )
endif()
elseif( MINGW )
if( CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|amd64|AMD64)$" )
set( _target_arch "x86_64" )
else()
set( _target_arch "x86" )
endif()
elseif( CMAKE_CROSSCOMPILING )
# tbd
set( _target_arch "${CMAKE_SYSTEM_PROCESSOR}" )
endif()
set( ${target_arch_} "${_target_arch}" PARENT_SCOPE )
endfunction()
function( bb_get_linux_distro_name distro_name_ )
list( GET bb_system_info 2 _distro_name )
set( ${distro_name_} "${_distro_name}" PARENT_SCOPE )
endfunction()
function( bb_get_os_codename os_codename_ )
list( GET bb_system_info 3 _os_codename )
set( ${os_codename_} "${_os_codename}" PARENT_SCOPE )
endfunction()
function( bb_get_os_version os_version_ )
list( GET bb_system_info 4 _os_version )
set( ${os_version_} "${_os_version}" PARENT_SCOPE )
endfunction()
function( bb_get_linux_pkg_fmt pkg_fmt_ )
list( GET bb_system_info 5 _pkg_fmt )
set( ${pkg_fmt_} "${_pkg_fmt}" PARENT_SCOPE )
endfunction()
function( bb_get_linux_pkg_arch pkg_arch_ )
list( GET bb_system_info 6 _pkg_arch )
set( ${pkg_arch_} "${_pkg_arch}" PARENT_SCOPE )
endfunction()
function( bb_get_isysroot isysroot_ )
list( GET bb_system_info 7 _isysroot )
set( ${isysroot_} "${_isysroot}" PARENT_SCOPE )
endfunction()
function( bb_get_imp_targets_from_components target_list_ target_prefix_ config_ comp1_ )
set( _comp_list ${comp1_} ${ARGN} )
unset( _target_list )
#message( STATUS "bb_get_imp_targets_from_components(): ${_comp_list}" )
string( TOUPPER "${config_}" _config_uc )
set( _target_prop_list INTERFACE_LINK_LIBRARIES_${_config_uc} INTERFACE_LINK_LIBRARIES IMPORTED_LINK_INTERFACE_LIBRARIES_${_config_uc} IMPORTED_LINK_INTERFACE_LIBRARIES )
foreach( _comp IN LISTS _comp_list )
set( _target_name ${target_prefix_}${_comp} )
list( APPEND _target_list ${_target_name} )
foreach( _target_prop IN LISTS _target_prop_list )
get_target_property( _prop_value ${_target_name} ${_target_prop} )
#message( STATUS "${_target_name} ${_target_prop} -> _prop_value=${_prop_value}" )
if( _prop_value )
#message( STATUS "_bb_get_qt5_dlls: Qt5::${_comp}: INTERFACE_LINK_LIBRARIES=${_prop_value}" )
foreach( _lnk_lib ${_prop_value} )
if( _lnk_lib MATCHES "^${target_prefix_}[a-zA-Z]" )
list( APPEND _target_list ${_lnk_lib} )
endif()
endforeach()
break()
endif()
endforeach()
endforeach()
if( DEFINED _target_list )
list( REMOVE_DUPLICATES _target_list )
set( ${target_list_} ${_target_list} PARENT_SCOPE )
endif()
endfunction()
# Optional argument: NO_PDB_FILES
function( bb_get_dsos_from_imp_targets dso_list_ config_ target1_ )
string( TOUPPER "${config_}" _config_uc )
set( _target_list ${target1_} ${ARGN} )
if( NO_PDB_FILES IN_LIST _target_list )
set( _no_pdb_files TRUE )
list( REMOVE_ITEM _target_list NO_PDB_FILES )
else()
set( _no_pdb_files FALSE )
endif()
unset( _bin_dir )
unset( _dso_list )
# Walk _target_list and collect paths to dlls.
foreach( _target ${_target_list} )
# "IMPORTED_LOCATION" "IMPORTED_LOCATION_RELEASE" "IMPORTED_LOCATION_DEBUG"
get_target_property( _prop_value ${_target} IMPORTED_LOCATION_${_config_uc} )
if( NOT _prop_value )
message( WARNING "bb_get_dsos_from_imp_targets(): no IMPORTED_LOCATION_${_config_uc} for target ${_target}" )
get_target_property( _prop_value ${_target} IMPORTED_LOCATION )
endif()
if( _prop_value )
# Ignore any static libraries
get_filename_component( _lib_ext ${_prop_value} EXT )
if( WIN32 )
if( NOT _lib_ext MATCHES "^\\.(dll|DLL)$" )
continue()
endif()
elseif( APPLE )
if( _lib_ext STREQUAL ".a" )
continue()
endif()
else()
# Linux: extension may have a trailing version number.
if( NOT _lib_ext MATCHES "^\\.so" )
continue()
endif()
endif()
# message( STATUS "${_target}: IMPORTED_LOCATION_RELEASE=${_prop_value}" )
if( NOT DEFINED _bin_dir )
get_filename_component( _bin_dir ${_prop_value} DIRECTORY )
endif()
list( APPEND _dso_list ${_prop_value} )
if( _config_uc STREQUAL "DEBUG" )
if( WIN32 AND NOT ${_no_pdb_files} )
# Add PDB file if available
get_filename_component( _filenm ${_prop_value} NAME_WE )
if( EXISTS "${_bin_dir}/${_filenm}.pdb" )
list( APPEND _dso_list "${_bin_dir}/${_filenm}.pdb" )
endif()
endif()
endif()
endif()
endforeach()
if( DEFINED _dso_list )
set( ${dso_list_} ${_dso_list} PARENT_SCOPE )
endif()
endfunction()
function( bb_file action_ input_path_ output_path_ )
if( "${action_}" STREQUAL "TO_SHORT_PATH" )
if( NOT CMAKE_HOST_WIN32 )
message( FATAL_ERROR "Short path conversion is only supported on Windows host systems." )
endif()
endif()
if( "${action_}" MATCHES "^(TO_NATIVE_PATH|TO_SHORT_PATH)$" )
if( CMAKE_HOST_WIN32 )
if( CMAKE_GENERATOR STREQUAL "MinGW Makefiles" )
# Painful hack to get backslashes as the CMake generator mgwmake seems to enable Linux path conversion
# rather than Windows path conversion.
# example: C:/Program Files -> C:/Program\ Files
string( REPLACE "/" "\\" _native_path "${input_path_}" )
else()
file( TO_NATIVE_PATH "${input_path_}" _native_path )
endif()
else()
file( TO_NATIVE_PATH "${input_path_}" _native_path )
endif()
# message( STATUS "input_path='${input_path_}' native_path='${_native_path}'" )
if( "${action_}" STREQUAL "TO_NATIVE_PATH" )
set( ${output_path_} "${_native_path}" PARENT_SCOPE )
endif()
endif()
if( "${action_}" STREQUAL "TO_SHORT_PATH" )
find_program( BB_SHELL_PROG "cmd.exe" )
bb_file( TO_NATIVE_PATH "${BB_SHELL_PROG}" script_launcher )
set( script_cmd_line "/c" )
bb_get_binary_tool_dir( _tool_dir )
if( NOT EXISTS "${_tool_dir}/get_short_path.cmd" )
file( WRITE "${_tool_dir}/get_short_path.cmd" "@echo off\n" "echo %~s1\n" )
endif()
bb_file( TO_NATIVE_PATH "${_tool_dir}/get_short_path.cmd" cmd_script )
string( APPEND script_cmd_line " ${cmd_script}" )
string( APPEND script_cmd_line " \"${_native_path}\"" )
#
separate_arguments( script_args NATIVE_COMMAND "${script_cmd_line}" )
# message( STATUS "Launching: ${script_launcher} ${script_args}" )
execute_process( COMMAND "${script_launcher}" ${script_args} WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" RESULT_VARIABLE retv OUTPUT_VARIABLE short_path OUTPUT_STRIP_TRAILING_WHITESPACE )
if( retv EQUAL 0 )
#message( STATUS "python interpreter (short path): ${short_path}" )
set( ${output_path_} "${short_path}" PARENT_SCOPE )
else()
message( FATAL_ERROR "short path conversion failed: ${retv}, please contact technical support." )
endif()
endif()
endfunction()
#
# Internal macro to setup the build environment.
#
macro( bb_build_env_setup )
message( STATUS "Setting up BBuildEnv ${BBuildEnv_VERSION}" )
unset( BBuildEnv_ROOT_DIR )
unset( BBuildEnv_SCRIPT_DIR )
set( BBuildEnv_MSYS FALSE )
if( CMAKE_HOST_WIN32 )
if( DEFINED ENV{MSYSTEM} )
message( STATUS "BBuildEnv: MSYS[2] platform detected." )
set( BBuildEnv_MSYS TRUE )
endif()
endif()
bb_check_build_type()
if( EXISTS "${CMAKE_CURRENT_LIST_DIR}/../.." )
get_filename_component( BBuildEnv_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." REALPATH )
if( EXISTS "${BBuildEnv_ROOT_DIR}/bin" )
set( BBuildEnv_SCRIPT_DIR "${BBuildEnv_ROOT_DIR}/bin" )
endif()
endif()
_bb_query_system_info( bb_system_info )
# message( STATUS "bb_system_info: ${bb_system_info}" )
bb_get_home_dir( bb_home_dir )
_bb_find_proj_home( bb_proj_home "${bb_home_dir}" )
# Add a cmake generator alias
unset( bb_generator_alias )
if( CMAKE_GENERATOR STREQUAL "Unix Makefiles" )
set( bb_generator_alias "umake" )
elseif( CMAKE_GENERATOR STREQUAL "Xcode" )
set( bb_generator_alias "xcode" )
elseif( CMAKE_GENERATOR MATCHES "Visual Studio ([0-9][0-9])" )
set( bb_generator_alias "vs${CMAKE_MATCH_1}" )
elseif( CMAKE_GENERATOR STREQUAL "Ninja" )
set( bb_generator_alias "ninja" )
elseif( CMAKE_GENERATOR STREQUAL "MinGW Makefiles" )
set( bb_generator_alias "mgwmake" )
else()
message( WARNING "BBuildEnv.cmake: generator '${CMAKE_GENERATOR}' is not fully supported yet, please contact technical support for further information." )
#return()
string( TOLOWER "${CMAKE_GENERATOR}" _generator_uc )
string( REPLACE " " "_" bb_generator_alias "${_generator_uc}" )
unset( _generator_uc )
endif()
#message( STATUS "bb_generator_alias: ${bb_generator_alias}" )
_bb_get_cxx_compiler_version_major_minor( bb_compiler_version_major_minor )
_bb_get_toolset_subdir( bb_toolset_subdir ${bb_compiler_version_major_minor} )
_bb_get_platform_dir( bb_platform_dir )
# set standard output directories: gcc-5.4/x86_64
if( DEFINED bb_generator_alias )
set( BBuildEnv_GENERATOR_ALIAS "${bb_generator_alias}" )
set( bb_default_output_dir "${bb_generator_alias}/${bb_toolset_subdir}/${bb_platform_dir}" )
else()
set( bb_default_output_dir "${bb_toolset_subdir}/${bb_platform_dir}" )
endif()
# BBuildEnv_OUTPUT_DIR_SUFFIX could be a cache variable to make it customizable.
set( BBuildEnv_OUTPUT_DIR_SUFFIX "${bb_default_output_dir}" )
# the deploy folder may be used to save installer packages.
set( bb_deploy_dir "${CMAKE_SOURCE_DIR}/deploy" )
if( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT )
set( CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/install" CACHE PATH "Standard install prefix" FORCE )
endif()
if( BUILD_SHARED_LIBS )
set( BBuildEnv_SHARED_DIR_POSTFIX "-shared" )
else()
unset( BBuildEnv_SHARED_DIR_POSTFIX )
endif()
if( NOT DEFINED BBuildEnv_USE_LIBRARY_NAME_POSTFIX )
set( BBuildEnv_USE_LIBRARY_NAME_POSTFIX OFF CACHE BOOL "Enable library name postfix" )
endif()
#set( BBuildEnv_RELEASE_POSTFIX "" )
set( BBuildEnv_DEBUG_POSTFIX "-d" )
set( BBuildEnv_RELWITHDEBINFO_POSTFIX "-rd" )
set( BBuildEnv_MINSIZEREL_POSTFIX "-mr" )
if( BBuildEnv_USE_LIBRARY_NAME_POSTFIX )
set( CMAKE_DEBUG_POSTFIX ${BBuildEnv_DEBUG_POSTFIX} )
set( CMAKE_RELWITHDEBINFO_POSTFIX ${BBuildEnv_RELWITHDEBINFO_POSTFIX} )
set( CMAKE_MINSIZEREL_POSTFIX ${BBuildEnv_MINSIZEREL_POSTFIX} )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib${BBuildEnv_SHARED_DIR_POSTFIX}/${BBuildEnv_OUTPUT_DIR_SUFFIX}" )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}" )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}" )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}" )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}" )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG}" )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE}" )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO}" )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL}" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin${BBuildEnv_SHARED_DIR_POSTFIX}/${BBuildEnv_OUTPUT_DIR_SUFFIX}" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" )
else()
# Using CMake's default library name convention which is the same for all configurations.
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/lib/${BBuildEnv_OUTPUT_DIR_SUFFIX}/debug${BBuildEnv_SHARED_DIR_POSTFIX}" )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/lib/${BBuildEnv_OUTPUT_DIR_SUFFIX}/release${BBuildEnv_SHARED_DIR_POSTFIX}" )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/lib/${BBuildEnv_OUTPUT_DIR_SUFFIX}/relwithdebinfo${BBuildEnv_SHARED_DIR_POSTFIX}" )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_SOURCE_DIR}/lib/${BBuildEnv_OUTPUT_DIR_SUFFIX}/minsizerel${BBuildEnv_SHARED_DIR_POSTFIX}" )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG}" )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE}" )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO}" )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL}" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/bin/${BBuildEnv_OUTPUT_DIR_SUFFIX}/debug${BBuildEnv_SHARED_DIR_POSTFIX}" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/bin/${BBuildEnv_OUTPUT_DIR_SUFFIX}/release${BBuildEnv_SHARED_DIR_POSTFIX}" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/bin/${BBuildEnv_OUTPUT_DIR_SUFFIX}/relwithdebinfo${BBuildEnv_SHARED_DIR_POSTFIX}" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_SOURCE_DIR}/bin/${BBuildEnv_OUTPUT_DIR_SUFFIX}/minsizerel${BBuildEnv_SHARED_DIR_POSTFIX}" )
endif()
endmacro( bb_build_env_setup )
#message( STATUS "BBuildEnv.cmake: starting: ${CMAKE_GENERATOR}" )
# Setup the build environment
bb_build_env_setup()
#message( STATUS "BBuildEnv.cmake: leaving" )
HM-HM-18.0/cmake/CMakeBuild/cmake/modules/BBuildEnvDebug.cmake 0000664 0000000 0000000 00000014272 14420260131 0023602 0 ustar 00root root 0000000 0000000 #[===[.rst:
BBuildEnvDebug
--------------
Internal module providing macros and functions for debugging. It won't be included by BBuildEnv by default.
#]===]
if( NOT CMAKE_VERSION VERSION_LESS 3.10 )
include_guard( GLOBAL )
endif()
function( bb_dump_cmake_system_info )
message( STATUS "bb_dump_cmake_system_info() entering" )
message( STATUS "CMAKE_COMMAND: ${CMAKE_COMMAND}" )
message( STATUS "CMAKE_VERSION: ${CMAKE_VERSION}" )
message( STATUS "CMAKE_ROOT: ${CMAKE_ROOT}" )
message( STATUS "CMAKE_SOURCE_DIR: ${CMAKE_SOURCE_DIR}" )
message( STATUS "CMAKE_SIZEOF_VOID_P: ${CMAKE_SIZEOF_VOID_P}" )
if( MINGW )
message( STATUS "MINGW: on" )
endif()
if( CMAKE_CROSSCOMPILING )
message( STATUS "CMAKE_CROSSCOMPILING: on" )
endif()
# target operating system: Linux, Windows, Darwin, Android
message( STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}" )
message( STATUS "CMAKE_HOST_SYSTEM: ${CMAKE_HOST_SYSTEM}" )
message( STATUS "CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}" )
# examples: x86_64 (ubuntu 16.04, macosx 10.12)
# AMD64 (windows 7 64-bit, -A x64, -A Win32)
message( STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}" )
message( STATUS "CMAKE_HOST_SYSTEM_PROCESSOR: ${CMAKE_HOST_SYSTEM_PROCESSOR}" )
if( CMAKE_HOST_APPLE )
message( STATUS "CMAKE_HOST_APPLE: on" )
endif()
if( CMAKE_HOST_UNIX )
message( STATUS "CMAKE_HOST_UNIX: on" )
endif()
if( CMAKE_HOST_WIN32 )
message( STATUS "CMAKE_HOST_WIN32: on" )
endif()
if( NOT CMAKE_VERSION VERSION_LESS 3.10.0 )
cmake_host_system_information( RESULT os_name QUERY OS_NAME )
cmake_host_system_information( RESULT os_release QUERY OS_RELEASE )
cmake_host_system_information( RESULT os_version QUERY OS_VERSION )
cmake_host_system_information( RESULT os_platform QUERY OS_PLATFORM )
message( STATUS "OS_NAME: ${os_name}" )
message( STATUS "OS_RELEASE: ${os_release}" )
message( STATUS "OS_VERSION: ${os_version}" )
message( STATUS "OS_PLATFORM: ${os_platform}" )
endif()
message( STATUS "CMAKE_PROGRAM_PATH: ${CMAKE_PROGRAM_PATH}" )
message( STATUS "CMAKE_SYSTEM_PROGRAM_PATH: ${CMAKE_SYSTEM_PROGRAM_PATH}" )
message( STATUS "CMAKE_GENERATOR: ${CMAKE_GENERATOR}" )
message( STATUS "CMAKE_GENERATOR_PLATFORM: ${CMAKE_GENERATOR_PLATFORM}" )
if( CMAKE_CXX_COMPILER_LOADED )
message( STATUS "CMAKE_CXX_COMPILER_LOADED: on" )
endif()
# expected: GNU, Clang, AppleClang, MSVC,
message( STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}" )
message( STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}" )
message( STATUS "CMAKE_CXX_COMPILER_VERSION: ${CMAKE_CXX_COMPILER_VERSION}" )
#message( STATUS "cxx compile features: ${CMAKE_CXX_COMPILE_FEATURES}" )
if( CMAKE_CXX_COMPILER_ARCHITECTURE_ID )
# CMAKE_CXX_COMPILER_ARCHITECTURE_ID is defined but empty on Linux
message( STATUS "CMAKE_CXX_COMPILER_ARCHITECTURE_ID: ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" )
endif()
if( MSVC )
message( STATUS "CMAKE_VS_PLATFORM_NAME: ${CMAKE_VS_PLATFORM_NAME}" )
message( STATUS "CMAKE_VS_PLATFORM_NAME: ${CMAKE_VS_PLATFORM_NAME}" )
message( STATUS "CMAKE_VS_PLATFORM_TOOLSET: ${CMAKE_VS_PLATFORM_TOOLSET}" )
message( STATUS "MSVC_VERSION: ${MSVC_VERSION}" )
if( NOT CMAKE_VERSION VERSION_LESS 3.12.0 )
message( STATUS "MSVC_TOOLSET_VERSION: ${MSVC_TOOLSET_VERSION}" )
endif()
if( CMAKE_CSharp_COMPILER_WORKS )
message( STATUS "CMAKE_CSharp_COMPILER_ID: ${CMAKE_CSharp_COMPILER_ID}" )
message( STATUS "CMAKE_CSharp_COMPILER: ${CMAKE_CSharp_COMPILER}" )
message( STATUS "CMAKE_CSharp_COMPILER_VERSION: ${CMAKE_CSharp_COMPILER_VERSION}" )
endif()
endif()
if( XCODE )
if( CMAKE_Swift_COMPILER_ID )
message( STATUS "CMAKE_Swift_COMPILER_ID: ${CMAKE_Swift_COMPILER_ID}" )
message( STATUS "CMAKE_Swift_COMPILER: ${CMAKE_Swift_COMPILER}" )
message( STATUS "CMAKE_Swift_COMPILER_VERSION: ${CMAKE_Swift_COMPILER_VERSION}" )
endif()
endif()
get_property( _bb_generator_is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG )
if( _bb_generator_is_multi_config )
message( STATUS "CMAKE_CONFIGURATION_TYPES: ${CMAKE_CONFIGURATION_TYPES}" )
else()
message( STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}" )
endif()
unset( _bb_generator_is_multi_config )
message( STATUS "bb_system_info: ${bb_system_info}" )
bb_get_target_arch( _bb_value )
message( STATUS "bb_get_target_arch: ${_bb_value}" )
bb_get_home_dir( _bb_value )
message( STATUS "bb_get_home_dir: ${_bb_value}" )
if( CMAKE_HOST_WIN32 )
bb_get_program_files_x86( _bb_value )
message( STATUS "bb_get_program_files_x86: ${_bb_value}" )
bb_get_program_files( _bb_value )
message( STATUS "bb_get_program_files: ${_bb_value}" )
bb_get_program_data( _bb_value )
message( STATUS "bb_get_program_data: ${_bb_value}" )
endif()
message( STATUS "bb_dump_cmake_system_info() leaving" )
endfunction( bb_dump_cmake_system_info )
function( bb_dump_target_properties target_ prop1_ )
if( NOT TARGET ${target_} )
message( WARNING "target ${target_} does not exist." )
return()
endif()
set( _prop_list ${prop1_} )
list( APPEND _prop_list ${ARGN} )
list( LENGTH _prop_list _prop_list_len )
message( STATUS "bb_dump_target_properties: len=${_prop_list_len} ${_prop_list}" )
foreach( _prop ${_prop_list} )
get_target_property( _prop_value ${target_} ${_prop} )
if( _prop_value )
message( STATUS "${target_}: ${_prop}=${_prop_value}" )
endif()
endforeach()
message( STATUS "bb_dump_target_properties: leaving" )
endfunction()
macro( bb_dump_imported_target_properties target_ )
bb_dump_target_properties( ${target_} IMPORTED_LOCATION IMPORTED_IMPLIB INTERFACE_INCLUDE_DIRECTORIES INTERFACE_COMPILE_DEFINITIONS INTERFACE_LINK_LIBRARIES )
endmacro()
HM-HM-18.0/cmake/CMakeBuild/cmake/modules/BBuildEnvLldb.cmake 0000664 0000000 0000000 00000014215 14420260131 0023426 0 ustar 00root root 0000000 0000000 #.rst:
# BBuildEnvLldb
# -------------
#
# Functions to update an LLDB init file.
#
# ::
#
# bb_lldbinit_update(ADD [OUTPUT ])
#
# Add or replace the content of section labeled with ``marker`` in file ``lldbinit_file``.
#
# ::
#
# bb_lldbinit_update(REMOVE [OUTPUT ])
#
# Remove the section labeled with ``marker`` from file ``lldbinit_file``.
#
if( NOT CMAKE_VERSION VERSION_LESS 3.10 )
include_guard( GLOBAL )
endif()
function( bb_lldbinit_update action_ lldbinit_file_ marker_ )
set( _fnc_name "bb_lldbinit_update" )
#message( STATUS "${_fnc_name}: entering" )
if( NOT ${action_} MATCHES "^(ADD|REMOVE)$" )
message( FATAL_ERROR "Unknown update action ${action_} specified, expected ADD or REMOVE." )
endif()
if( IS_ABSOLUTE "${lldbinit_file_}" )
set( _lldbinit_file "${lldbinit_file_}" )
else()
set( _lldbinit_file "${CMAKE_CURRENT_SOURCE_DIR}/${lldbinit_file_}" )
endif()
set( _lldbinit_out_file "${_lldbinit_file}" )
unset( _lldbinit_lines )
# Parse command line and handle optional arguments
if( ARGC GREATER 3 )
#message( STATUS "${_fnc_name}: optional arguments ${ARGN}" )
set( _opt_args ${ARGN} )
list( LENGTH _opt_args _opt_args_cnt )
while( _opt_args_cnt GREATER 0 )
list( GET _opt_args 0 _arg )
list( REMOVE_AT _opt_args 0 )
#message( STATUS "${_fnc_name}: processing optional argument ${_arg}" )
if( _arg STREQUAL "OUTPUT" )
# Pick the next argument and stop processing
list( LENGTH _opt_args _opt_args_cnt )
if( _opt_args_cnt EQUAL 1 )
list( GET _opt_args 0 _lldbinit_out_file )
if( NOT IS_ABSOLUTE "${_lldbinit_out_file}" )
set( _lldbinit_out_file "${CMAKE_CURRENT_SOURCE_DIR}/${_lldbinit_out_file}" )
endif()
else()
message( FATAL_ERROR "${_fnc_name}: illegal number of arguments." )
endif()
break()
else()
list( APPEND _lldbinit_lines ${_arg} )
endif()
list( LENGTH _opt_args _opt_args_cnt )
endwhile()
endif()
#message( STATUS "${_fnc_name}: new_content: ${_lldbinit_lines}" )
#message( STATUS "${_fnc_name}: input_file: ${_lldbinit_file}" )
#message( STATUS "${_fnc_name}: output_file: ${_lldbinit_out_file}" )
set( _regex_start "^#[ \t]*<${marker_}>" )
set( _regex_end "^#[ \t]*${marker_}>" )
unset( _lldbinit_section_orig )
unset( _lldbinit_section_new )
unset( _lldbinit_orig_top )
unset( _lldbinit_orig_bottom )
set( _start_section_cnt 0 )
set( _end_section_cnt 0 )
if( action_ STREQUAL "ADD" )
set( _update_lldbinit_file TRUE )
elseif( action_ STREQUAL "REMOVE" )
set( _update_lldbinit_file FALSE )
endif()
# Create the new lldbinit section
foreach( _line IN LISTS _lldbinit_lines )
string( APPEND _lldbinit_section_new "${_line}" "\n" )
endforeach()
# Create section start and section end lines
_bb_lldbinit_create_marker_lines( ${marker_} _lldbinit_section_start _lldbinit_section_end )
if( EXISTS "${_lldbinit_file}" )
file( STRINGS ${_lldbinit_file} _lldbinit_lines_orig )
#message( STATUS "bb_update_lldbinit(): |${_lldbinit_lines_orig}|" )
#message( STATUS "----" )
#message( STATUS ${_lldbinit_lines_orig} )
#message( STATUS "----" )
foreach( _line IN LISTS _lldbinit_lines_orig )
#message( STATUS "bb_update_lldbinit(): processing ${_line}" )
if( _line MATCHES "${_regex_start}" )
math( EXPR _start_section_cnt "${_start_section_cnt} + 1" )
continue()
endif()
if( _line MATCHES "${_regex_end}" )
math( EXPR _end_section_cnt "${_end_section_cnt} + 1" )
continue()
endif()
if( ( _start_section_cnt EQUAL 1 ) AND ( _end_section_cnt EQUAL 0 ) )
# Extract existing section
string( APPEND _lldbinit_section_orig "${_line}" "\n" )
elseif( ( _start_section_cnt EQUAL 0 ) AND ( _end_section_cnt EQUAL 0 ) )
string( APPEND _lldbinit_orig_top "${_line}" "\n" )
elseif( ( _start_section_cnt EQUAL 1 ) AND ( _end_section_cnt EQUAL 1 ) )
string( APPEND _lldbinit_orig_bottom "${_line}" "\n" )
endif()
endforeach()
# Check section counters
if( ( _start_section_cnt EQUAL 1 ) AND ( _end_section_cnt EQUAL 1 ) )
#message( STATUS "_lldbinit_orig_top: ${_lldbinit_orig_top}" )
#message( STATUS "_lldbinit_section_orig: ${_lldbinit_section_orig}" )
#message( STATUS "_lldbinit_orig_bottom: ${_lldbinit_orig_bottom}" )
if( action_ STREQUAL "ADD" )
if( "${_lldbinit_section_orig}" STREQUAL "${_lldbinit_section_new}" )
set( _update_lldbinit_file FALSE )
endif()
elseif( action_ STREQUAL "REMOVE" )
set( _update_lldbinit_file TRUE )
endif()
elseif( ( _start_section_cnt EQUAL 0 ) AND ( _end_section_cnt EQUAL 0 ) )
else()
# Unsupported format
message( WARNING "${_fnc_name}: unsupported lldbinit, check number of tags." )
return()
endif()
endif()
if( NOT EXISTS ${_lldbinit_out_file} )
set( _update_lldbinit_file TRUE )
endif()
if( _update_lldbinit_file )
message( STATUS "${_fnc_name}: updating ${_lldbinit_out_file}, section=${marker_}" )
if( action_ STREQUAL "ADD" )
file( WRITE ${_lldbinit_out_file} "${_lldbinit_orig_top}" "${_lldbinit_section_start}" "${_lldbinit_section_new}" "${_lldbinit_section_end}" "${_lldbinit_orig_bottom}" )
elseif( action_ STREQUAL "REMOVE" )
file( WRITE ${_lldbinit_out_file} "${_lldbinit_orig_top}" "${_lldbinit_orig_bottom}" )
endif()
endif()
#message( STATUS "${_fnc_name}: leaving" )
endfunction( bb_lldbinit_update )
function( _bb_lldbinit_create_marker_lines marker_ start_marker_ end_marker_ )
string( TIMESTAMP _time_now "%Y-%m-%d %H:%M:%S" )
set( ${start_marker_} "#<${marker_}> - automatically inserted at ${_time_now}, don't remove.\n" PARENT_SCOPE )
#set( ${start_marker_} "#<${marker_}> - automatically inserted, don't remove.\n" PARENT_SCOPE )
set( ${end_marker_} "#${marker_}> - automatically inserted, don't remove.\n" PARENT_SCOPE )
endfunction( _bb_lldbinit_create_marker_lines )
HM-HM-18.0/cmake/CMakeBuild/cmake/modules/BBuildEnvMingw.cmake 0000664 0000000 0000000 00000005454 14420260131 0023637 0 ustar 00root root 0000000 0000000 #[[.rst:
BBuildEnvMingw
--------------
Functions and macros supporting MinGW development.
.. command:: bb_add_target_CopyMingwRuntimeFiles
The ``bb_add_target_CopyMingwRuntimeFiles()`` macro adds a custom target ``CopyMingwRuntimeFiles``
to copy MinGW dlls to :variable:`CMAKE_RUNTIME_OUTPUT_DIRECTORY_`.
#]]
if( NOT CMAKE_VERSION VERSION_LESS 3.10 )
include_guard( GLOBAL )
endif()
macro( bb_add_target_CopyMingwRuntimeFiles )
if( MINGW AND CMAKE_CROSSCOMPILING )
if( NOT TARGET CopyMingwRuntimeFiles )
if( NOT DEFINED bb_MINGW_RUNTIME_FILES )
message( FATAL_ERROR "\
No MinGW runtime files defined, check your toolchain file and
define bb_MINGW_RUNTIME_FILES or don't call bb_add_target_CopyMingwRuntimeFiles()." )
endif()
if( NOT CMAKE_VERSION VERSION_LESS 3.8 )
add_custom_target( CopyMingwRuntimeFiles ALL ${CMAKE_COMMAND} -E make_directory
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL}>
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${bb_MINGW_RUNTIME_FILES}
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL}>
VERBATIM COMMAND_EXPAND_LISTS )
else()
add_custom_target( CopyMingwRuntimeFiles ALL ${CMAKE_COMMAND} -E make_directory
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL}>
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${bb_MINGW_RUNTIME_FILES}
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO}>
$<$:${CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL}> )
endif()
endif()
endif()
endmacro()
HM-HM-18.0/cmake/CMakeBuild/cmake/modules/BBuildEnvVersion.cmake 0000664 0000000 0000000 00000001125 14420260131 0024172 0 ustar 00root root 0000000 0000000 #
# WARNING: This file is automatically generated by CMake and any manual changes will
# be overridden by the next build.
# If you need to change anything here, please update the configure template BBuildEnvVersion.cmake.in.
#
set( BBuildEnv_VERSION_MAJOR 3 )
set( BBuildEnv_VERSION_MINOR 14 )
set( BBuildEnv_VERSION_PATCH 4 )
set( BBuildEnv_VERSION_TWEAK 4 )
# BBuildEnv version in decimal dotted format as supported by CMake's version compare operations.
set( BBuildEnv_VERSION "${BBuildEnv_VERSION_MAJOR}.${BBuildEnv_VERSION_MINOR}.${BBuildEnv_VERSION_PATCH}.${BBuildEnv_VERSION_TWEAK}" )
HM-HM-18.0/cmake/CMakeBuild/cmake/toolchains/ 0000775 0000000 0000000 00000000000 14420260131 0020504 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/cmake/toolchains/aarch64-linux-gnu-gcc-ubuntu1804.cmake 0000664 0000000 0000000 00000003766 14420260131 0027265 0 ustar 00root root 0000000 0000000 # name of the target operating system
set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR aarch64 )
set( GNU_MACHINE "aarch64-linux-gnu" )
# which compilers to use for C and C++
set( CMAKE_C_COMPILER ${GNU_MACHINE}-gcc )
set( CMAKE_CXX_COMPILER ${GNU_MACHINE}-g++ )
# here is the target environment located
if( NOT DEFINED ARM_LINUX_SYSROOT AND DEFINED GNU_MACHINE )
set( ARM_LINUX_SYSROOT /usr/${GNU_MACHINE}${FLOAT_ABI_SUFFIX} )
endif()
list( APPEND CMAKE_FIND_ROOT_PATH ${ARM_LINUX_SYSROOT} )
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
# Ubuntu/amd64 + foreign architecture arm64
set( CMAKE_LIBRARY_PATH /usr/lib/${GNU_MACHINE}-linux-gnu )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH )
#set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
set( USE_OPENCV_TOOLCHAIN_FLAGS ON )
if( USE_OPENCV_TOOLCHAIN_FLAGS )
# ---
# Snatched from OpenCV 3.4.2-1
# ---
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")
set( CMAKE_CXX_FLAGS_INIT "-fdata-sections -Wa,--noexecstack -fsigned-char" )
set( CMAKE_C_FLAGS_INIT "-fdata-sections -Wa,--noexecstack -fsigned-char" )
set(ARM_LINKER_FLAGS "-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
#set(CMAKE_SHARED_LINKER_FLAGS "${ARM_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}")
#set(CMAKE_MODULE_LINKER_FLAGS "${ARM_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}")
#set(CMAKE_EXE_LINKER_FLAGS "${ARM_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}")
set( CMAKE_SHARED_LINKER_FLAGS_INIT "${ARM_LINKER_FLAGS}" )
set( CMAKE_MODULE_LINKER_FLAGS_INIT "${ARM_LINKER_FLAGS}" )
set( CMAKE_EXE_LINKER_FLAGS_INIT "${ARM_LINKER_FLAGS}" )
endif()
HM-HM-18.0/cmake/CMakeBuild/cmake/toolchains/i686-w64-mingw32-gcc-posix-ubuntu1604.cmake 0000664 0000000 0000000 00000002333 14420260131 0027632 0 ustar 00root root 0000000 0000000 # name of the target operating system
set( CMAKE_SYSTEM_NAME Windows )
set( CMAKE_SYSTEM_PROCESSOR x86 )
# which compilers to use for C and C++
set( CMAKE_C_COMPILER i686-w64-mingw32-gcc-posix )
set( CMAKE_CXX_COMPILER i686-w64-mingw32-g++-posix )
set( CMAKE_RC_COMPILER i686-w64-mingw32-windres )
# here is the target environment located
#SET(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc /home/alex/mingw-install )
#
# /usr/share/mingw-w64/include
# /usr/x86_64-w64-mingw32/lib
# /usr/x86_64-w64-mingw32/include
# /usr/lib/gcc/x86_64-w64-mingw32/5.3-posix/include
# /usr/lib/gcc/x86_64-w64-mingw32/5.3-posix/libstdc++.a
set( CMAKE_FIND_ROOT_PATH /usr/share/mingw-w64 /usr/i686-w64-mingw32 /usr/lib/gcc/i686-w64-mingw32/5.3-posix )
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
set( bb_MINGW_RUNTIME_FILES
/usr/lib/gcc/i686-w64-mingw32/5.3-posix/libstdc++-6.dll
/usr/lib/gcc/i686-w64-mingw32/5.3-posix/libgcc_s_sjlj-1.dll
/usr/i686-w64-mingw32/lib/libwinpthread-1.dll )
HM-HM-18.0/cmake/CMakeBuild/cmake/toolchains/x86_64-w64-mingw32-gcc-posix-ubuntu1604.cmake 0000664 0000000 0000000 00000002376 14420260131 0030103 0 ustar 00root root 0000000 0000000 # name of the target operating system
set( CMAKE_SYSTEM_NAME Windows )
set( CMAKE_SYSTEM_PROCESSOR x86_64 ) # or AMD64?
# which compilers to use for C and C++
set( CMAKE_C_COMPILER x86_64-w64-mingw32-gcc-posix )
set( CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++-posix )
set( CMAKE_RC_COMPILER x86_64-w64-mingw32-windres )
# here is the target environment located
#SET(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc /home/alex/mingw-install )
#
# /usr/share/mingw-w64/include
# /usr/x86_64-w64-mingw32/lib
# /usr/x86_64-w64-mingw32/include
# /usr/lib/gcc/x86_64-w64-mingw32/5.3-posix/include
# /usr/lib/gcc/x86_64-w64-mingw32/5.3-posix/libstdc++.a
set( CMAKE_FIND_ROOT_PATH /usr/share/mingw-w64 /usr/x86_64-w64-mingw32 /usr/lib/gcc/x86_64-w64-mingw32/5.3-posix )
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
set( bb_MINGW_RUNTIME_FILES
/usr/lib/gcc/x86_64-w64-mingw32/5.3-posix/libstdc++-6.dll
/usr/lib/gcc/x86_64-w64-mingw32/5.3-posix/libgcc_s_seh-1.dll
/usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll )
HM-HM-18.0/cmake/CMakeBuild/cmake/toolchains/x86_64-w64-mingw32-gcc-posix-ubuntu1804.cmake 0000664 0000000 0000000 00000002376 14420260131 0030105 0 ustar 00root root 0000000 0000000 # name of the target operating system
set( CMAKE_SYSTEM_NAME Windows )
set( CMAKE_SYSTEM_PROCESSOR x86_64 ) # or AMD64?
# which compilers to use for C and C++
set( CMAKE_C_COMPILER x86_64-w64-mingw32-gcc-posix )
set( CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++-posix )
set( CMAKE_RC_COMPILER x86_64-w64-mingw32-windres )
# here is the target environment located
#SET(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc /home/alex/mingw-install )
#
# /usr/share/mingw-w64/include
# /usr/x86_64-w64-mingw32/lib
# /usr/x86_64-w64-mingw32/include
# /usr/lib/gcc/x86_64-w64-mingw32/5.3-posix/include
# /usr/lib/gcc/x86_64-w64-mingw32/5.3-posix/libstdc++.a
set( CMAKE_FIND_ROOT_PATH /usr/share/mingw-w64 /usr/x86_64-w64-mingw32 /usr/lib/gcc/x86_64-w64-mingw32/7.3-posix )
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
set( bb_MINGW_RUNTIME_FILES
/usr/lib/gcc/x86_64-w64-mingw32/7.3-posix/libstdc++-6.dll
/usr/lib/gcc/x86_64-w64-mingw32/7.3-posix/libgcc_s_seh-1.dll
/usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll )
HM-HM-18.0/cmake/CMakeBuild/lldb/ 0000775 0000000 0000000 00000000000 14420260131 0016176 5 ustar 00root root 0000000 0000000 HM-HM-18.0/cmake/CMakeBuild/lldb/CMakeBuildLldbExt.py 0000775 0000000 0000000 00000001044 14420260131 0021771 0 ustar 00root root 0000000 0000000 import lldb
def Rectangle_SummaryProvider (valobj,internal_dict):
height_val = valobj.GetChildMemberWithName('height')
width_val = valobj.GetChildMemberWithName('width')
height = height_val.GetValueAsUnsigned(0)
width = width_val.GetValueAsUnsigned(0)
area = height*width
perimeter = 2*(height + width)
return 'Area: ' + str(area) + ', Perimeter: ' + str(perimeter)
def __lldb_init_module( debugger, dict ):
debugger.HandleCommand( 'type summary add -F CMakeBuildLldbExt.Rectangle_SummaryProvider -e Rectangle' )
HM-HM-18.0/cmake/CMakeBuild/lldb/CMakeLists.txt 0000664 0000000 0000000 00000004563 14420260131 0020746 0 ustar 00root root 0000000 0000000 # CMakeBuild/CMakeBuild/lldb/CMakeLists.txt
if( NOT DEFINED LLDB_INSTALL_ROOT )
set( LLDB_INSTALL_ROOT "$ENV{HOME}/.lldb.d" )
message( STATUS "${CMAKE_CURRENT_LIST_FILE}: LLDB_INSTALL_ROOT not set, using default ${LLDB_INSTALL_ROOT}." )
endif()
if( NOT DEFINED LLDBINIT_FILE )
set( LLDBINIT_FILE "$ENV{HOME}/.lldbinit" )
message( STATUS "${CMAKE_CURRENT_LIST_FILE}: LLDBINIT_FILE not set, using default ${LLDBINIT_FILE}." )
endif()
if( NOT DEFINED ENABLE_LLDBINIT_UPDATE )
set( ENABLE_LLDBINIT_UPDATE TRUE )
message( STATUS "${CMAKE_CURRENT_LIST_FILE}: ENABLE_LLDBINIT_UPDATE not set, using default ${ENABLE_LLDBINIT_UPDATE}." )
endif()
set( LLDB_INSTALL_DIR ${LLDB_INSTALL_ROOT}/${PROJECT_NAME} )
# Get all LLDB python modules
file( GLOB LLDB_MODULES "*.py" )
configure_file( lldbinit-${PROJECT_NAME}.in lldbinit-${PROJECT_NAME} @ONLY )
if( ENABLE_LLDBINIT_UPDATE )
# Install LLDB files and update ~/.lldbinit
# ---
# Create a cmake script to update ~/.ldbinit
set( cmake_lldbinit_module ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules/BBuildEnvLldb.cmake )
set( input_file ${LLDBINIT_FILE} )
set( section_marker ${PROJECT_NAME} )
set( lldbinit_content "command source -s 0 ${LLDB_INSTALL_ROOT}/lldbinit-${PROJECT_NAME}" )
configure_file( lldbinit_update-in.cmake lldbinit_update.cmake )
# ---
add_custom_target( Install${PROJECT_NAME}LldbFiles ${CMAKE_COMMAND} -E make_directory ${LLDB_INSTALL_DIR}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/lldbinit-${PROJECT_NAME} ${LLDB_INSTALL_ROOT}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${LLDB_MODULES} ${LLDB_INSTALL_DIR}
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/lldbinit_update.cmake
VERBATIM
SOURCES lldbinit-${PROJECT_NAME}.in ${LLDB_MODULES} )
else()
# Install LLDB files without touching ~/.lldbinit
add_custom_target( Install${PROJECT_NAME}LldbFiles ${CMAKE_COMMAND} -E make_directory ${LLDB_INSTALL_DIR}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/lldbinit-${PROJECT_NAME} ${LLDB_INSTALL_ROOT}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${LLDB_MODULES} ${LLDB_INSTALL_DIR}
VERBATIM
SOURCES lldbinit-${PROJECT_NAME}.in ${LLDB_MODULES} )
endif()
HM-HM-18.0/cmake/CMakeBuild/lldb/lldbinit-CMakeBuild.in 0000664 0000000 0000000 00000000415 14420260131 0022265 0 ustar 00root root 0000000 0000000 # lldbinit-@PROJECT_NAME@
#
# Add the following line to ~/.lldbinit
# command source -s 0 @LLDB_INSTALL_ROOT@/lldbinit-@PROJECT_NAME@
#
# Load a custom LLDB python module.
command script import @LLDB_INSTALL_DIR@/CMakeBuildLldbExt.py
# Other settings , aliases ...
HM-HM-18.0/cmake/CMakeBuild/lldb/lldbinit_update-in.cmake 0000664 0000000 0000000 00000000364 14420260131 0022752 0 ustar 00root root 0000000 0000000 #
# lldbinit_update-in.cmake
#
include( @cmake_lldbinit_module@ )
# in-place add
bb_lldbinit_update( ADD "@input_file@" @section_marker@ "@lldbinit_content@" )
# in-place remove
# bb_lldbinit_update( REMOVE "@input_file@" @section_marker@ )
HM-HM-18.0/compat/ 0000775 0000000 0000000 00000000000 14420260131 0013524 5 ustar 00root root 0000000 0000000 HM-HM-18.0/compat/msvc/ 0000775 0000000 0000000 00000000000 14420260131 0014474 5 ustar 00root root 0000000 0000000 HM-HM-18.0/compat/msvc/stdint.h 0000664 0000000 0000000 00000000777 14420260131 0016165 0 ustar 00root root 0000000 0000000 #pragma once
#ifndef _MSC_VER
#error local C99 type definition should only be used in Visual C++ before 2010
#endif
#if _MSC_VER > 1500
#error local C99 type definition should only be used in Visual C++ before 2010
#endif
/* a minimal set of C99 types for use with MSVC */
typedef signed char int8_t;
typedef short int int16_t;
typedef int int32_t;
typedef __int64 int64_t;
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned __int64 uint64_t;
HM-HM-18.0/doc/ 0000775 0000000 0000000 00000000000 14420260131 0013006 5 ustar 00root root 0000000 0000000 HM-HM-18.0/doc/Doxyfile 0000664 0000000 0000000 00000322357 14420260131 0014530 0 ustar 00root root 0000000 0000000 # Doxyfile 1.8.9.1
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
#
# All text after a double hash (##) is considered a comment and is placed in
# front of the TAG it is preceding.
#
# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
# TAG = value [value, ...]
# For lists, items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (\" \").
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
# This tag specifies the encoding used for all characters in the config file
# that follow. The default is UTF-8 which is also the encoding used for all text
# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
# for the list of possible encodings.
# The default value is: UTF-8.
DOXYFILE_ENCODING = UTF-8
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.
PROJECT_NAME = "HEVC Test Model (HM)"
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = HM-18.0
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.
PROJECT_BRIEF =
# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
# in the documentation. The maximum height of the logo should not exceed 55
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
# the logo to the output directory.
PROJECT_LOGO =
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.
OUTPUT_DIRECTORY = .
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
# directories (in 2 levels) under the output directory of each output format and
# will distribute the generated files over these directories. Enabling this
# option can be useful when feeding doxygen a huge amount of source files, where
# putting all generated files in the same directory would otherwise causes
# performance problems for the file system.
# The default value is: NO.
CREATE_SUBDIRS = NO
# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
# characters to appear in the names of generated files. If set to NO, non-ASCII
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
# U+3044.
# The default value is: NO.
ALLOW_UNICODE_NAMES = NO
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
# Ukrainian and Vietnamese.
# The default value is: English.
OUTPUT_LANGUAGE = English
# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
# descriptions after the members that are listed in the file and class
# documentation (similar to Javadoc). Set to NO to disable this.
# The default value is: YES.
BRIEF_MEMBER_DESC = YES
# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
# description of a member or function before the detailed description
#
# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
# The default value is: YES.
REPEAT_BRIEF = YES
# This tag implements a quasi-intelligent brief description abbreviator that is
# used to form the text in various listings. Each string in this list, if found
# as the leading text of the brief description, will be stripped from the text
# and the result, after processing the whole list, is used as the annotated
# text. Otherwise, the brief description is used as-is. If left blank, the
# following values are used ($name is automatically replaced with the name of
# the entity):The $name class, The $name widget, The $name file, is, provides,
# specifies, contains, represents, a, an and the.
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# doxygen will generate a detailed section even if there is only a brief
# description.
# The default value is: NO.
ALWAYS_DETAILED_SEC = NO
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
# The default value is: NO.
INLINE_INHERITED_MEMB = NO
# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
# before files name in the file list and in the header files. If set to NO the
# shortest path that makes the file name unique will be used
# The default value is: YES.
FULL_PATH_NAMES = YES
# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
# Stripping is only done if one of the specified strings matches the left-hand
# part of the path. The tag can be used to show relative paths in the file list.
# If left blank the directory from which doxygen is run is used as the path to
# strip.
#
# Note that you can specify absolute paths here, but also relative paths, which
# will be relative from the directory where doxygen is started.
# This tag requires that the tag FULL_PATH_NAMES is set to YES.
STRIP_FROM_PATH = ../source
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
# path mentioned in the documentation of a class, which tells the reader which
# header file to include in order to use a class. If left blank only the name of
# the header file containing the class definition is used. Otherwise one should
# specify the list of include paths that are normally passed to the compiler
# using the -I flag.
STRIP_FROM_INC_PATH =
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
# less readable) file names. This can be useful is your file systems doesn't
# support long names like on DOS, Mac, or CD-ROM.
# The default value is: NO.
SHORT_NAMES = NO
# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
# first line (until the first dot) of a Javadoc-style comment as the brief
# description. If set to NO, the Javadoc-style will behave just like regular Qt-
# style comments (thus requiring an explicit @brief command for a brief
# description.)
# The default value is: NO.
JAVADOC_AUTOBRIEF = NO
# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
# requiring an explicit \brief command for a brief description.)
# The default value is: NO.
QT_AUTOBRIEF = NO
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
# a brief description. This used to be the default behavior. The new default is
# to treat a multi-line C++ comment block as a detailed description. Set this
# tag to YES if you prefer the old behavior instead.
#
# Note that setting this tag to YES also means that rational rose comments are
# not recognized any more.
# The default value is: NO.
MULTILINE_CPP_IS_BRIEF = NO
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements.
# The default value is: YES.
INHERIT_DOCS = YES
# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
# page for each member. If set to NO, the documentation of a member will be part
# of the file/class/namespace that contains it.
# The default value is: NO.
SEPARATE_MEMBER_PAGES = NO
# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
# uses this value to replace tabs by spaces in code fragments.
# Minimum value: 1, maximum value: 16, default value: 4.
TAB_SIZE = 8
# This tag can be used to specify a number of aliases that act as commands in
# the documentation. An alias has the form:
# name=value
# For example adding
# "sideeffect=@par Side Effects:\n"
# will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". You can put \n's in the value part of an alias to insert
# newlines.
ALIASES =
# This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding "class=itcl::class"
# will allow you to use the command class in the itcl::class meaning.
TCL_SUBST =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
# members will be omitted, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_FOR_C = NO
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
# Python sources only. Doxygen will then generate output that is more tailored
# for that language. For instance, namespaces will be presented as packages,
# qualified scopes will look different, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_JAVA = NO
# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
# sources. Doxygen will then generate output that is tailored for Fortran.
# The default value is: NO.
OPTIMIZE_FOR_FORTRAN = NO
# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
# sources. Doxygen will then generate output that is tailored for VHDL.
# The default value is: NO.
OPTIMIZE_OUTPUT_VHDL = NO
# Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
# Fortran. In the later case the parser tries to guess whether the code is fixed
# or free formatted code, this is the default for Fortran type files), VHDL. For
# instance to make doxygen treat .inc files as Fortran files (default is PHP),
# and .f files as C (default is Fortran), use: inc=Fortran f=C.
#
# Note: For files without extension you can use no_extension as a placeholder.
#
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen.
EXTENSION_MAPPING =
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable
# documentation. See http://daringfireball.net/projects/markdown/ for details.
# The output of markdown processing is further processed by doxygen, so you can
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
# case of backward compatibilities issues.
# The default value is: YES.
MARKDOWN_SUPPORT = YES
# When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can
# be prevented in individual cases by putting a % sign in front of the word or
# globally by setting AUTOLINK_SUPPORT to NO.
# The default value is: YES.
AUTOLINK_SUPPORT = YES
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should set this
# tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string);
# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
# The default value is: NO.
BUILTIN_STL_SUPPORT = YES
# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
# The default value is: NO.
CPP_CLI_SUPPORT = NO
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
# will parse them like normal C++ but will assume all classes use public instead
# of private inheritance when no explicit protection keyword is present.
# The default value is: NO.
SIP_SUPPORT = NO
# For Microsoft's IDL there are propget and propput attributes to indicate
# getter and setter methods for a property. Setting this option to YES will make
# doxygen to replace the get and set methods by a property in the documentation.
# This will only work if the methods are indeed getting or setting a simple
# type. If this is not the case, or you want to show the methods anyway, you
# should set this option to NO.
# The default value is: YES.
IDL_PROPERTY_SUPPORT = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
# The default value is: NO.
DISTRIBUTE_GROUP_DOC = NO
# Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent
# subgrouping. Alternatively, this can be done per class using the
# \nosubgrouping command.
# The default value is: YES.
SUBGROUPING = YES
# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
# are shown inside the group in which they are included (e.g. using \ingroup)
# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
# and RTF).
#
# Note that this feature does not work in combination with
# SEPARATE_MEMBER_PAGES.
# The default value is: NO.
INLINE_GROUPED_CLASSES = NO
# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
# with only public data fields or simple typedef fields will be shown inline in
# the documentation of the scope in which they are defined (i.e. file,
# namespace, or group documentation), provided this scope is documented. If set
# to NO, structs, classes, and unions are shown on a separate page (for HTML and
# Man pages) or section (for LaTeX and RTF).
# The default value is: NO.
INLINE_SIMPLE_STRUCTS = NO
# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
# enum is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
# with name TypeT. When disabled the typedef will appear as a member of a file,
# namespace, or class. And the struct will be named TypeS. This can typically be
# useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
# The default value is: NO.
TYPEDEF_HIDES_STRUCT = NO
# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
# cache is used to resolve symbols given their name and scope. Since this can be
# an expensive process and often the same symbol appears multiple times in the
# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
# doxygen will become slower. If the cache is too large, memory is wasted. The
# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
# symbols. At the end of a run doxygen will report the cache usage and suggest
# the optimal cache size from a speed point of view.
# Minimum value: 0, maximum value: 9, default value: 0.
LOOKUP_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
# Note: This will also disable the warnings about undocumented members that are
# normally produced when WARNINGS is set to YES.
# The default value is: NO.
EXTRACT_ALL = YES
# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
# be included in the documentation.
# The default value is: NO.
EXTRACT_PRIVATE = YES
# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.
EXTRACT_PACKAGE = NO
# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
# included in the documentation.
# The default value is: NO.
EXTRACT_STATIC = YES
# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
# locally in source files will be included in the documentation. If set to NO,
# only classes defined in header files are included. Does not have any effect
# for Java sources.
# The default value is: YES.
EXTRACT_LOCAL_CLASSES = YES
# This flag is only useful for Objective-C code. If set to YES, local methods,
# which are defined in the implementation section but not in the interface are
# included in the documentation. If set to NO, only methods in the interface are
# included.
# The default value is: NO.
EXTRACT_LOCAL_METHODS = NO
# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base name of
# the file that contains the anonymous namespace. By default anonymous namespace
# are hidden.
# The default value is: NO.
EXTRACT_ANON_NSPACES = NO
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these
# members will be included in the various overviews, but no documentation
# section is generated. This option has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.
HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set
# to NO, these classes will be included in the various overviews. This option
# has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.
HIDE_UNDOC_CLASSES = NO
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# (class|struct|union) declarations. If set to NO, these declarations will be
# included in the documentation.
# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
# documentation blocks found inside the body of a function. If set to NO, these
# blocks will be appended to the function's detailed documentation block.
# The default value is: NO.
HIDE_IN_BODY_DOCS = NO
# The INTERNAL_DOCS tag determines if documentation that is typed after a
# \internal command is included. If the tag is set to NO then the documentation
# will be excluded. Set it to YES to include the internal documentation.
# The default value is: NO.
INTERNAL_DOCS = NO
# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
# names in lower-case letters. If set to YES, upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
# The default value is: system dependent.
CASE_SENSE_NAMES = NO
# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
# their full class and namespace scopes in the documentation. If set to YES, the
# scope will be hidden.
# The default value is: NO.
HIDE_SCOPE_NAMES = NO
# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
# append additional text to a page's title, such as Class Reference. If set to
# YES the compound reference will be hidden.
# The default value is: NO.
HIDE_COMPOUND_REFERENCE= NO
# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
# the files that are included by a file in the documentation of that file.
# The default value is: YES.
SHOW_INCLUDE_FILES = YES
# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
# grouped member an include statement to the documentation, telling the reader
# which file to include in order to use the member.
# The default value is: NO.
SHOW_GROUPED_MEMB_INC = NO
# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
# files with double quotes in the documentation rather than with sharp brackets.
# The default value is: NO.
FORCE_LOCAL_INCLUDES = NO
# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
# documentation for inline members.
# The default value is: YES.
INLINE_INFO = YES
# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
# (detailed) documentation of file and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order.
# The default value is: YES.
SORT_MEMBER_DOCS = YES
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order. Note that
# this will also influence the order of the classes in the class list.
# The default value is: NO.
SORT_BRIEF_DOCS = NO
# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
# (brief and detailed) documentation of class members so that constructors and
# destructors are listed first. If set to NO the constructors will appear in the
# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
# member documentation.
# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
# detailed member documentation.
# The default value is: NO.
SORT_MEMBERS_CTORS_1ST = NO
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
# of group names into alphabetical order. If set to NO the group names will
# appear in their defined order.
# The default value is: NO.
SORT_GROUP_NAMES = NO
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
# fully-qualified names, including namespaces. If set to NO, the class list will
# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the alphabetical
# list.
# The default value is: NO.
SORT_BY_SCOPE_NAME = NO
# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
# type resolution of all parameters of a function it will reject a match between
# the prototype and the implementation of a member function even if there is
# only one candidate or it is obvious which candidate to choose by doing a
# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
# accept a match between prototype and implementation in such cases.
# The default value is: NO.
STRICT_PROTO_MATCHING = NO
# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
# list. This list is created by putting \todo commands in the documentation.
# The default value is: YES.
GENERATE_TODOLIST = YES
# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
# list. This list is created by putting \test commands in the documentation.
# The default value is: YES.
GENERATE_TESTLIST = YES
# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
# list. This list is created by putting \bug commands in the documentation.
# The default value is: YES.
GENERATE_BUGLIST = YES
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
# the deprecated list. This list is created by putting \deprecated commands in
# the documentation.
# The default value is: YES.
GENERATE_DEPRECATEDLIST= YES
# The ENABLED_SECTIONS tag can be used to enable conditional documentation
# sections, marked by \if ... \endif and \cond
# ... \endcond blocks.
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
# initial value of a variable or macro / define can have for it to appear in the
# documentation. If the initializer consists of more lines than specified here
# it will be hidden. Use a value of 0 to hide initializers completely. The
# appearance of the value of individual variables and macros / defines can be
# controlled using \showinitializer or \hideinitializer command in the
# documentation regardless of this setting.
# Minimum value: 0, maximum value: 10000, default value: 30.
MAX_INITIALIZER_LINES = 30
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
# the bottom of the documentation of classes and structs. If set to YES, the
# list will mention the files that were used to generate the documentation.
# The default value is: YES.
SHOW_USED_FILES = YES
# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
# will remove the Files entry from the Quick Index and from the Folder Tree View
# (if specified).
# The default value is: YES.
SHOW_FILES = YES
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
# page. This will remove the Namespaces entry from the Quick Index and from the
# Folder Tree View (if specified).
# The default value is: YES.
SHOW_NAMESPACES = YES
# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command command input-file, where command is the value of the
# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
# by doxygen. Whatever the program writes to standard output is used as the file
# version. For an example see the documentation.
FILE_VERSION_FILTER =
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated
# output files in an output format independent way. To create the layout file
# that represents doxygen's defaults, run doxygen with the -l option. You can
# optionally specify a file name after the option, if omitted DoxygenLayout.xml
# will be used as the name of the layout file.
#
# Note that if you run doxygen from a directory containing a file called
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty.
LAYOUT_FILE =
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.
CITE_BIB_FILES =
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
# The QUIET tag can be used to turn on/off the messages that are generated to
# standard output by doxygen. If QUIET is set to YES this implies that the
# messages are off.
# The default value is: NO.
QUIET = NO
# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
# this implies that the warnings are on.
#
# Tip: Turn warnings on while writing the documentation.
# The default value is: YES.
WARNINGS = YES
# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: YES.
WARN_IF_UNDOCUMENTED = YES
# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some parameters
# in a documented function, or documenting parameters that don't exist or using
# markup commands wrongly.
# The default value is: YES.
WARN_IF_DOC_ERROR = YES
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return
# value. If set to NO, doxygen will only warn about wrong or incomplete
# parameter documentation, but not about the absence of documentation.
# The default value is: NO.
WARN_NO_PARAMDOC = NO
# The WARN_FORMAT tag determines the format of the warning messages that doxygen
# can produce. The string should contain the $file, $line, and $text tags, which
# will be replaced by the file and line number from which the warning originated
# and the warning text. Optionally the format may contain $version, which will
# be replaced by the version of the file (if it could be obtained via
# FILE_VERSION_FILTER)
# The default value is: $file:$line: $text.
WARN_FORMAT = "$file:$line: $text"
# The WARN_LOGFILE tag can be used to specify a file to which warning and error
# messages should be written. If left blank the output is written to standard
# error (stderr).
WARN_LOGFILE = warning.log
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
# The INPUT tag is used to specify the files and/or directories that contain
# documented source files. You may enter file names like myfile.cpp or
# directories like /usr/src/myproject. Separate the files or directories with
# spaces.
# Note: If this tag is empty the current directory is searched.
INPUT = ../source \
mainpage.h
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
# documentation (see: http://www.gnu.org/software/libiconv) for the list of
# possible encodings.
# The default value is: UTF-8.
INPUT_ENCODING = UTF-8
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank the
# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
# *.qsf, *.as and *.js.
FILE_PATTERNS = *.c \
*.cc \
*.cxx \
*.cpp \
*.c++ \
*.d \
*.java \
*.ii \
*.ixx \
*.ipp \
*.i++ \
*.inl \
*.h \
*.hh \
*.hxx \
*.hpp \
*.h++ \
*.idl \
*.odl \
*.cs \
*.php \
*.php3 \
*.inc \
*.m \
*.mm \
*.dox \
*.py \
*.f90 \
*.f \
*.for \
*.vhd \
*.vhdl
# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
# The default value is: NO.
RECURSIVE = YES
# The EXCLUDE tag can be used to specify files and/or directories that should be
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
#
# Note that relative paths are relative to the directory from which doxygen is
# run.
EXCLUDE =
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
# The default value is: NO.
EXCLUDE_SYMLINKS = NO
# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*
EXCLUDE_PATTERNS = */.svn
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass,
# AClass::ANamespace, ANamespace::*Test
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories use the pattern */test/*
EXCLUDE_SYMBOLS =
# The EXAMPLE_PATH tag can be used to specify one or more files or directories
# that contain example code fragments that are included (see the \include
# command).
EXAMPLE_PATH =
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank all
# files are included.
EXAMPLE_PATTERNS = *
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude commands
# irrespective of the value of the RECURSIVE tag.
# The default value is: NO.
EXAMPLE_RECURSIVE = NO
# The IMAGE_PATH tag can be used to specify one or more files or directories
# that contain images that are to be included in the documentation (see the
# \image command).
IMAGE_PATH =
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command:
#
#
#
# where is the value of the INPUT_FILTER tag, and is the
# name of an input file. Doxygen will then use the output that the filter
# program writes to standard output. If FILTER_PATTERNS is specified, this tag
# will be ignored.
#
# Note that the filter must not add or remove lines; it is applied before the
# code is scanned, but not when the output code is generated. If lines are added
# or removed, the anchors will not be placed correctly.
INPUT_FILTER =
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis. Doxygen will compare the file name with each pattern and apply the
# filter if there is a match. The filters are a list of the form: pattern=filter
# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
# patterns match the file name, INPUT_FILTER is applied.
FILTER_PATTERNS =
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will also be used to filter the input files that are used for
# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
# The default value is: NO.
FILTER_SOURCE_FILES = NO
# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
# it is also possible to disable source filtering for a specific pattern using
# *.ext= (so without naming a filter).
# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
FILTER_SOURCE_PATTERNS =
# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
# is part of the input, its contents will be placed on the main page
# (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output.
USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------
# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
# generated. Documented entities will be cross-referenced with these sources.
#
# Note: To get rid of all source code in the generated output, make sure that
# also VERBATIM_HEADERS is set to NO.
# The default value is: NO.
SOURCE_BROWSER = YES
# Setting the INLINE_SOURCES tag to YES will include the body of functions,
# classes and enums directly into the documentation.
# The default value is: NO.
INLINE_SOURCES = NO
# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
# special comment blocks from generated source code fragments. Normal C, C++ and
# Fortran comments will always remain visible.
# The default value is: YES.
STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
# function all documented functions referencing it will be listed.
# The default value is: NO.
REFERENCED_BY_RELATION = NO
# If the REFERENCES_RELATION tag is set to YES then for each documented function
# all documented entities called/used by that function will be listed.
# The default value is: NO.
REFERENCES_RELATION = NO
# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
# to YES then the hyperlinks from functions in REFERENCES_RELATION and
# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
# link to the documentation.
# The default value is: YES.
REFERENCES_LINK_SOURCE = YES
# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
# source code will show a tooltip with additional information such as prototype,
# brief description and links to the definition and documentation. Since this
# will make the HTML file larger and loading of large files a bit slower, you
# can opt to disable this feature.
# The default value is: YES.
# This tag requires that the tag SOURCE_BROWSER is set to YES.
SOURCE_TOOLTIPS = YES
# If the USE_HTAGS tag is set to YES then the references to source code will
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
# source browser. The htags tool is part of GNU's global source tagging system
# (see http://www.gnu.org/software/global/global.html). You will need version
# 4.8.6 or higher.
#
# To use it do the following:
# - Install the latest version of global
# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
# - Make sure the INPUT points to the root of the source tree
# - Run doxygen as normal
#
# Doxygen will invoke htags (and that will in turn invoke gtags), so these
# tools must be available from the command line (i.e. in the search path).
#
# The result: instead of the source browser generated by doxygen, the links to
# source code will now point to the output of htags.
# The default value is: NO.
# This tag requires that the tag SOURCE_BROWSER is set to YES.
USE_HTAGS = NO
# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
# verbatim copy of the header file for each class for which an include is
# specified. Set to NO to disable this.
# See also: Section \class.
# The default value is: YES.
VERBATIM_HEADERS = YES
# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
# cost of reduced performance. This can be particularly helpful with template
# rich C++ code for which doxygen's built-in parser lacks the necessary type
# information.
# Note: The availability of this option depends on whether or not doxygen was
# compiled with the --with-libclang option.
# The default value is: NO.
CLANG_ASSISTED_PARSING = NO
# If clang assisted parsing is enabled you can provide the compiler with command
# line options that you would normally use when invoking the compiler. Note that
# the include paths will already be set by doxygen for the files and directories
# specified with INPUT and INCLUDE_PATH.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
CLANG_OPTIONS =
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
# compounds will be generated. Enable this if the project contains a lot of
# classes, structs, unions or interfaces.
# The default value is: YES.
ALPHABETICAL_INDEX = YES
# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
# which the alphabetical index list will be split.
# Minimum value: 1, maximum value: 20, default value: 5.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
COLS_IN_ALPHA_INDEX = 5
# In case all classes in a project start with a common prefix, all classes will
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
# can be used to specify a prefix (or a list of prefixes) that should be ignored
# while generating the index headers.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
# The default value is: YES.
GENERATE_HTML = YES
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = html
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).
# The default value is: .html.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FILE_EXTENSION = .html
# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
# each generated HTML page. If the tag is left blank doxygen will generate a
# standard header.
#
# To get valid HTML the header file that includes any scripts and style sheets
# that doxygen needs, which is dependent on the configuration options used (e.g.
# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
# default header using
# doxygen -w html new_header.html new_footer.html new_stylesheet.css
# YourConfigFile
# and then modify the file new_header.html. See also section "Doxygen usage"
# for information on how to generate the default header that doxygen normally
# uses.
# Note: The header is subject to change so you typically have to regenerate the
# default header when upgrading to a newer version of doxygen. For a description
# of the possible markers and block names see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_HEADER =
# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
# generated HTML page. If the tag is left blank doxygen will generate a standard
# footer. See HTML_HEADER for more information on how to generate a default
# footer and what special commands can be used inside the footer. See also
# section "Doxygen usage" for information on how to generate the default footer
# that doxygen normally uses.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FOOTER =
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
# sheet that is used by each HTML page. It can be used to fine-tune the look of
# the HTML output. If left blank doxygen will generate a default style sheet.
# See also section "Doxygen usage" for information on how to generate the style
# sheet that doxygen normally uses.
# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
# it is more robust and this tag (HTML_STYLESHEET) will in the future become
# obsolete.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_STYLESHEET =
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# cascading style sheets that are included after the standard style sheets
# created by doxygen. Using this option one can overrule certain style aspects.
# This is preferred over using HTML_STYLESHEET since it does not replace the
# standard style sheet and is therefore more robust against future updates.
# Doxygen will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list). For an example see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_STYLESHEET =
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the HTML output directory. Note
# that these files will be copied to the base HTML output directory. Use the
# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
# files will be copied as-is; there are no commands or markers available.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_FILES =
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
# will adjust the colors in the style sheet and background images according to
# this color. Hue is specified as an angle on a colorwheel, see
# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
# purple, and 360 is red again.
# Minimum value: 0, maximum value: 359, default value: 220.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_HUE = 220
# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
# in the HTML output. For a value of 0 the output will use grayscales only. A
# value of 255 will produce the most vivid colors.
# Minimum value: 0, maximum value: 255, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_SAT = 100
# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
# luminance component of the colors in the HTML output. Values below 100
# gradually make the output lighter, whereas values above 100 make the output
# darker. The value divided by 100 is the actual gamma applied, so 80 represents
# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
# change the gamma.
# Minimum value: 40, maximum value: 240, default value: 80.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_GAMMA = 80
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
# page will contain the date and time when the page was generated. Setting this
# to NO can help when comparing the output of multiple runs.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_TIMESTAMP = YES
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_DYNAMIC_SECTIONS = NO
# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
# shown in the various tree structured indices initially; the user can expand
# and collapse entries dynamically later on. Doxygen will expand the tree to
# such a level that at most the specified number of entries are visible (unless
# a fully collapsed tree already exceeds this amount). So setting the number of
# entries 1 will produce a full collapsed tree by default. 0 is a special value
# representing an infinite number of entries and will result in a full expanded
# tree by default.
# Minimum value: 0, maximum value: 9999, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_INDEX_NUM_ENTRIES = 100
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
# generated that can be used as input for Apple's Xcode 3 integrated development
# environment (see: http://developer.apple.com/tools/xcode/), introduced with
# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
# Makefile in the HTML output directory. Running make will produce the docset in
# that directory and running make install will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
# for more information.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_DOCSET = NO
# This tag determines the name of the docset feed. A documentation feed provides
# an umbrella under which multiple documentation sets from a single provider
# (such as a company or product suite) can be grouped.
# The default value is: Doxygen generated docs.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_FEEDNAME = "Doxygen generated docs"
# This tag specifies a string that should uniquely identify the documentation
# set bundle. This should be a reverse domain-name style string, e.g.
# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_BUNDLE_ID = org.doxygen.Project
# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
# the documentation publisher. This should be a reverse domain-name style
# string, e.g. com.mycompany.MyDocSet.documentation.
# The default value is: org.doxygen.Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
# The default value is: Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_PUBLISHER_NAME = Publisher
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
# Windows.
#
# The HTML Help Workshop contains a compiler that can convert all HTML output
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
# files are now used as the Windows 98 help format, and will replace the old
# Windows help format (.hlp) on all Windows platforms in the future. Compressed
# HTML files also contain an index, a table of contents, and you can search for
# words in the documentation. The HTML workshop also contains a viewer for
# compressed HTML files.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_HTMLHELP = NO
# The CHM_FILE tag can be used to specify the file name of the resulting .chm
# file. You can add a path in front of the file if the result should not be
# written to the html output directory.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
CHM_FILE =
# The HHC_LOCATION tag can be used to specify the location (absolute path
# including file name) of the HTML help compiler (hhc.exe). If non-empty,
# doxygen will try to run the HTML help compiler on the generated index.hhp.
# The file has to be specified with full path.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
HHC_LOCATION =
# The GENERATE_CHI flag controls if a separate .chi index file is generated
# (YES) or that it should be included in the master .chm file (NO).
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
GENERATE_CHI = NO
# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
# and project file content.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
CHM_INDEX_ENCODING =
# The BINARY_TOC flag controls whether a binary table of contents is generated
# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
# enables the Previous and Next buttons.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
BINARY_TOC = NO
# The TOC_EXPAND flag can be set to YES to add extra items for group members to
# the table of contents of the HTML help documentation and to the tree view.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
TOC_EXPAND = NO
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
# (.qch) of the generated HTML documentation.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_QHP = NO
# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
# the file name of the resulting .qch file. The path specified is relative to
# the HTML output folder.
# This tag requires that the tag GENERATE_QHP is set to YES.
QCH_FILE =
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
# Project output. For more information please see Qt Help Project / Namespace
# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_NAMESPACE = org.doxygen.Project
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
# Help Project output. For more information please see Qt Help Project / Virtual
# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
# folders).
# The default value is: doc.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_VIRTUAL_FOLDER = doc
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
# filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
# filters).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_NAME =
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
# custom filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
# filters).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_ATTRS =
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
# project's filter section matches. Qt Help Project / Filter Attributes (see:
# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_SECT_FILTER_ATTRS =
# The QHG_LOCATION tag can be used to specify the location of Qt's
# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
# generated .qhp file.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHG_LOCATION =
# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
# generated, together with the HTML files, they form an Eclipse help plugin. To
# install this plugin and make it available under the help contents menu in
# Eclipse, the contents of the directory containing the HTML and XML files needs
# to be copied into the plugins directory of eclipse. The name of the directory
# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
# After copying Eclipse needs to be restarted before the help appears.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_ECLIPSEHELP = NO
# A unique identifier for the Eclipse help plugin. When installing the plugin
# the directory name containing the HTML and XML files should also have this
# name. Each documentation set should have its own identifier.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
ECLIPSE_DOC_ID = org.doxygen.Project
# If you want full control over the layout of the generated HTML pages it might
# be necessary to disable the index and replace it with your own. The
# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
# of each HTML page. A value of NO enables the index and the value YES disables
# it. Since the tabs in the index contain the same information as the navigation
# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
DISABLE_INDEX = NO
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information. If the tag
# value is set to YES, a side panel will be generated containing a tree-like
# index structure (just like the one that is generated for HTML Help). For this
# to work a browser that supports JavaScript, DHTML, CSS and frames is required
# (i.e. any modern browser). Windows users are probably better off using the
# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
# further fine-tune the look of the index. As an example, the default style
# sheet generated by doxygen has an example that shows how to put an image at
# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
# the same information as the tab index, you could consider setting
# DISABLE_INDEX to YES when enabling this option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_TREEVIEW = NO
# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
# doxygen will group on one line in the generated HTML documentation.
#
# Note that a value of 0 will completely suppress the enum values from appearing
# in the overview section.
# Minimum value: 0, maximum value: 20, default value: 4.
# This tag requires that the tag GENERATE_HTML is set to YES.
ENUM_VALUES_PER_LINE = 4
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
# to set the initial width (in pixels) of the frame in which the tree is shown.
# Minimum value: 0, maximum value: 1500, default value: 250.
# This tag requires that the tag GENERATE_HTML is set to YES.
TREEVIEW_WIDTH = 250
# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
# external symbols imported via tag files in a separate window.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
EXT_LINKS_IN_WINDOW = NO
# Use this tag to change the font size of LaTeX formulas included as images in
# the HTML documentation. When you change the font size after a successful
# doxygen run you need to manually remove any form_*.png images from the HTML
# output directory to force them to be regenerated.
# Minimum value: 8, maximum value: 50, default value: 10.
# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_FONTSIZE = 10
# Use the FORMULA_TRANPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are not
# supported properly for IE 6.0, but are supported on all modern browsers.
#
# Note that when changing this option you need to delete any form_*.png files in
# the HTML output directory before the changes have effect.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_TRANSPARENT = YES
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# http://www.mathjax.org) which uses client side Javascript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
# to it using the MATHJAX_RELPATH option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
USE_MATHJAX = NO
# When MathJax is enabled you can set the default output format to be used for
# the MathJax output. See the MathJax site (see:
# http://docs.mathjax.org/en/latest/output.html) for more details.
# Possible values are: HTML-CSS (which is slower, but has the best
# compatibility), NativeMML (i.e. MathML) and SVG.
# The default value is: HTML-CSS.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_FORMAT = HTML-CSS
# When MathJax is enabled you need to specify the location relative to the HTML
# output directory using the MATHJAX_RELPATH option. The destination directory
# should contain the MathJax.js script. For instance, if the mathjax directory
# is located at the same level as the HTML output directory, then
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
# Content Delivery Network so you can quickly see the result without installing
# MathJax. However, it is strongly recommended to install a local copy of
# MathJax from http://www.mathjax.org before deployment.
# The default value is: http://cdn.mathjax.org/mathjax/latest.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_EXTENSIONS =
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_CODEFILE =
# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
# the HTML output. The underlying search engine uses javascript and DHTML and
# should work on any modern browser. Note that when using HTML help
# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
# there is already a search function so this one should typically be disabled.
# For large projects the javascript based search engine can be slow, then
# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
# search using the keyboard; to jump to the search box use + S
# (what the is depends on the OS and browser, but it is typically
# , /