Projects
Essentials
kvazaar
Sign Up
Log In
Username
Password
Sorry, you are not authorized to perform this action.
×
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 19
View file
kvazaar.changes
Changed
@@ -1,4 +1,16 @@ ------------------------------------------------------------------- +Wed Jan 17 18:39:21 UTC 2024 - Luigi Baldoni <aloisio@gmx.com> + +- Update to version 2.3.0 + Too many changes to list, see + https://github.com/ultravideo/kvazaar/compare/v2.2.0...v2.3.0 +- Drop kvazaar.memset.patch (no longer necessary with gcc11) +- Add kvazaar_fix_libm_underlinking.patch, + kvazaar-add_soversion.patch, kvazaar-fix_install_libdir.patch + and kvazaar-fix_install_mandir.patch +- Use gcc11 on Leap + +------------------------------------------------------------------- Wed Jan 4 11:29:30 UTC 2023 - Luigi Baldoni <aloisio@gmx.com> - Update to version 2.2.0
View file
kvazaar.spec
Changed
@@ -1,7 +1,7 @@ # # spec file for package kvazaar # -# Copyright (c) 2023 Packman Team <packman@links2linux.de> +# Copyright (c) 2024 Packman Team <packman@links2linux.de> # Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties @@ -16,24 +16,33 @@ # Please submit bugfixes or comments via https://bugs.links2linux.org/ # - %define libname libkvazaar %define libmver 7 Name: kvazaar -Version: 2.2.0 -Release: 0 +Version: 2.3.0 +Release: 0.pm.0 Summary: HEVC encoder License: BSD-3-Clause Group: Productivity/Multimedia/Video/Editors and Convertors URL: http://ultravideo.cs.tut.fi/#encoder Source0: https://github.com/ultravideo/%{name}/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz -Patch0: kvazaar.memset.patch -BuildRequires: automake -BuildRequires: findutils +# PATCH-FIX-OPENSUSE kvazaar-fix_libm_underlinking.patch +Patch1: kvazaar-fix_libm_underlinking.patch +# PATCH-FIX-UPSTREAM kvazaar-add_soversion.patch +Patch2: kvazaar-add_soversion.patch +# PATCH-FIX-OPENSUSE kvazaar-fix_install_libdir.patch +Patch3: kvazaar-fix_install_libdir.patch +# PATCH-FIX-OPENSUSE kvazaar-fix_install_mandir.patch +Patch4: kvazaar-fix_install_mandir.patch +BuildRequires: cmake >= 3.12 BuildRequires: gcc >= 4.4 -BuildRequires: gcc-c++ -BuildRequires: libtool BuildRequires: pkgconfig +%if 0%{?suse_version} > 1500 +BuildRequires: gcc-c++ +%else +BuildRequires: gcc11 +BuildRequires: gcc11-c++ +%endif Requires: %{libname}%{libmver} = %{version} %ifnarch %{arm} BuildRequires: yasm @@ -58,21 +67,20 @@ Header files for the %{libname} library %prep -%setup -q -%patch0 -p1 +%autosetup -p1 %build -autoreconf -fvi -%configure \ - --disable-static \ - --disable-silent-rules \ - --docdir=%{_defaultdocdir}/%{name} -make %{?_smp_mflags} +export CC=gcc +export CXX=g++ +test -x "$(type -p gcc-11)" && export CC=gcc-11 +test -x "$(type -p g++-11)" && export CXX=g++-11 + +%cmake \ + -DCMAKE_SKIP_INSTALL_RPATH=ON +%cmake_build %install -%make_install -find %{buildroot} -type f -name "*.la" -delete -print -rm %{buildroot}%{_defaultdocdir}/%{name}/LICENSE* +%cmake_install %post -n %{libname}%{libmver} -p /sbin/ldconfig %postun -n %{libname}%{libmver} -p /sbin/ldconfig
View file
kvazaar-add_soversion.patch
Added
@@ -0,0 +1,21 @@ +From 621a2bba8f12c9fed07c266e590bc05dea2861b2 Mon Sep 17 00:00:00 2001 +From: Joose Sainio <joose.sainio@tuni.fi> +Date: Thu, 18 Jan 2024 09:14:35 +0200 +Subject: PATCH CMake versions .so file + +--- + CMakeLists.txt | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 278939d9..1f459c44 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -165,6 +165,7 @@ if(MSVC) + set_property( SOURCE ${LIB_SOURCES_STRATEGIES_AVX2} APPEND PROPERTY COMPILE_FLAGS "/arch:AVX2" ) + else() + set_target_properties(kvazaar-bin PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src) ++ set_target_properties(kvazaar PROPERTIES SOVERSION "7" VERSION "7.3.0") + list(APPEND ALLOW_AVX2 "x86_64" "AMD64") + if(${CMAKE_SYSTEM_PROCESSOR} IN_LIST ALLOW_AVX2) + set_property( SOURCE ${LIB_SOURCES_STRATEGIES_AVX2} APPEND PROPERTY COMPILE_FLAGS "-mavx2 -mbmi -mpopcnt -mlzcnt -mbmi2" )
View file
kvazaar-fix_install_libdir.patch
Added
@@ -0,0 +1,37 @@ +Index: kvazaar-2.3.0/CMakeLists.txt +=================================================================== +--- kvazaar-2.3.0.orig/CMakeLists.txt ++++ kvazaar-2.3.0/CMakeLists.txt +@@ -128,7 +128,7 @@ if(MSVC) + endif() + + if(BUILD_SHARED_LIBS) +- list( APPEND CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" "./" "../lib" ) ++ list( APPEND CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}" "./" "../lib" ) + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + add_library(kvazaar SHARED ${LIB_SOURCES}) + else() +@@ -233,9 +233,9 @@ source_group( "" FILES ${SOURCE_GROUP_TO + + # ToDo: make configurable + +-install(FILES ${PROJECT_SOURCE_DIR}/src/kvazaar.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pkgconfig) ++install(FILES ${PROJECT_SOURCE_DIR}/src/kvazaar.pc DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig) + install(TARGETS kvazaar-bin DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +-install(TARGETS kvazaar DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) ++install(TARGETS kvazaar DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) + if(BUILD_SHARED_LIBS) # Just add the lib to the bin directory for now + if(MSVC) + install(TARGETS kvazaar DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +Index: kvazaar-2.3.0/src/kvazaar.pc.in +=================================================================== +--- kvazaar-2.3.0.orig/src/kvazaar.pc.in ++++ kvazaar-2.3.0/src/kvazaar.pc.in +@@ -1,6 +1,6 @@ + prefix=@CMAKE_INSTALL_PREFIX@ + exec_prefix=${prefix} +-libdir=${prefix}/lib ++libdir=@CMAKE_INSTALL_FULL_LIBDIR@ + incdir=${prefix}/include + + Name: libkvazaar
View file
kvazaar-fix_install_mandir.patch
Added
@@ -0,0 +1,13 @@ +Index: kvazaar-2.3.0/CMakeLists.txt +=================================================================== +--- kvazaar-2.3.0.orig/CMakeLists.txt ++++ kvazaar-2.3.0/CMakeLists.txt +@@ -242,7 +242,7 @@ if(BUILD_SHARED_LIBS) # Just add the lib + endif() + endif() + install(FILES ${PROJECT_SOURCE_DIR}/src/kvazaar.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include) +-install(FILES ${PROJECT_SOURCE_DIR}/doc/kvazaar.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man) ++install(FILES ${PROJECT_SOURCE_DIR}/doc/kvazaar.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1) + + IF(UNIX) + # DIST
View file
kvazaar-fix_libm_underlinking.patch
Added
@@ -0,0 +1,12 @@ +Index: kvazaar-2.3.0/CMakeLists.txt +=================================================================== +--- kvazaar-2.3.0.orig/CMakeLists.txt ++++ kvazaar-2.3.0/CMakeLists.txt +@@ -182,6 +182,7 @@ else() + set(EXTRA_LIBS ${EXTRA_LIBS} m) + endif (HAVE_LIB_M) + ++ target_link_libraries(kvazaar PUBLIC ${EXTRA_LIBS}) + target_link_libraries(kvazaar-bin PUBLIC ${EXTRA_LIBS}) + endif() +
View file
kvazaar.memset.patch
Deleted
@@ -1,22 +0,0 @@ -Index: kvazaar-1.2.0/src/rdo.c -=================================================================== ---- kvazaar-1.2.0.orig/src/rdo.c -+++ kvazaar-1.2.0/src/rdo.c -@@ -593,6 +593,7 @@ void kvz_rdoq(encoder_state_t * const st - - uint32_t cg_num = width * height >> 4; - -+#if 0 - // Explicitly tell the only possible numbers of elements to be zeroed. - // Hope the compiler is able to utilize this information. - switch (cg_num) { -@@ -602,6 +603,9 @@ void kvz_rdoq(encoder_state_t * const st - case 64: FILL_ARRAY(sig_coeffgroup_flag, 0, 64); break; - default: assert(0 && "There should be 1, 4, 16 or 64 coefficient groups"); - } -+#else -+ memset(&sig_coeffgroup_flag, 0, sizeof(sig_coeffgroup_flag)); -+#endif - - cabac_ctx_t *base_coeff_group_ctx = &(cabac->ctx.cu_sig_coeff_group_modeltype); - cabac_ctx_t *baseCtx = (type == 0) ? &(cabac->ctx.cu_sig_model_luma0) : &(cabac->ctx.cu_sig_model_chroma0);
View file
kvazaar-2.2.0.tar.gz/LICENSE.EXT.x264asm
Deleted
@@ -1,2 +0,0 @@ -Kvazaar uses x264asm abstraction layer -library (included in src/x86/x86inc.asm) -licensed under ISC license.
View file
kvazaar-2.2.0.tar.gz/build/yasm
Deleted
-(directory)
View file
kvazaar-2.2.0.tar.gz/build/yasm/vsyasm.props
Deleted
@@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup - Condition="'$(YASMBeforeTargets)' == '' and '$(YASMAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'"> - <YASMBeforeTargets>Midl</YASMBeforeTargets> - <YASMAfterTargets>CustomBuild</YASMAfterTargets> - </PropertyGroup> - <PropertyGroup> - <YASMDependsOn - Condition="'$(ConfigurationType)' != 'Makefile'">_SelectedFiles;$(YASMDependsOn)</YASMDependsOn> - </PropertyGroup> - <!-- Object format name for vsyasm must be in lower case. --> - <PropertyGroup Condition="'$(Platform)' == 'Win32'"> - <YASMFormat>win32</YASMFormat> - </PropertyGroup> - <PropertyGroup Condition="'$(Platform)' == 'x64'"> - <YASMFormat>win64</YASMFormat> - </PropertyGroup> - <ItemDefinitionGroup> - <YASM> - <Debug>False</Debug> - <ObjectFile>$(IntDir)</ObjectFile> - <PreProc>0</PreProc> - <Parser>0</Parser> - <CommandLineTemplate>vsyasm.exe -Xvc -f $(YASMFormat) AllOptions AdditionalOptions Inputs</CommandLineTemplate> - <Outputs>%(ObjectFile)</Outputs> - <ExecutionDescription>Assembling %(Filename)%(Extension)</ExecutionDescription> - <ShowOnlyRuleProperties>false</ShowOnlyRuleProperties> - </YASM> - </ItemDefinitionGroup> -</Project>
View file
kvazaar-2.2.0.tar.gz/build/yasm/vsyasm.targets
Deleted
@@ -1,109 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <PropertyPageSchema - Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" /> - <AvailableItemName - Include="YASM"> - <Targets>_YASM</Targets> - </AvailableItemName> - </ItemGroup> - <UsingTask - TaskName="YASM" - TaskFactory="XamlTaskFactory" - AssemblyName="Microsoft.Build.Tasks.v4.0"> - <Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task> - </UsingTask> - <Target - Name="_YASM" - BeforeTargets="$(YASMBeforeTargets)" - AfterTargets="$(YASMAfterTargets)" - Condition="'@(YASM)' != ''" - DependsOnTargets="$(YASMDependsOn);ComputeYASMOutput" - Outputs="@(YASM->'$(ProjectDir)$(IntDir)%(Filename).obj')" - Inputs="@(YASM);%(YASM.AdditionalDependencies);$(MSBuildProjectFile)"> - <ItemGroup - Condition="'@(SelectedFiles)' != ''"> - <YASM - Remove="@(YASM)" - Condition="'%(Identity)' != '@(SelectedFiles)'" /> - </ItemGroup> - <ItemGroup> - <YASM_tlog - Include="%(YASM.ObjectFile)" - Condition="'%(YASM.ObjectFile)' != '' and '%(YASM.ExcludedFromBuild)' != 'true'"> - <Source>@(YASM->'%(FullPath)', '|')</Source> - </YASM_tlog> - </ItemGroup> - <Message - Importance="High" - Text="%(YASM.ExecutionDescription)" /> - <WriteLinesToFile - Condition="'@(YASM_tlog)' != '' and '%(YASM_tlog.ExcludedFromBuild)' != 'true'" - File="$(TLogLocation)$(ProjectName).write.1.tlog" - Lines="^%(YASM_tlog.Source);@(YASM->'$(ProjectDir)$(IntDir)%(Filename).obj')" - Encoding="Unicode" /> - <YASM - Condition="'@(YASM)' != '' and '%(YASM.ExcludedFromBuild)' != 'true'" - CommandLineTemplate="%(YASM.CommandLineTemplate)" - Debug="%(YASM.Debug)" - PreIncludeFile="%(YASM.PreIncludeFile)" - IncludePaths="%(YASM.IncludePaths)" - Defines="%(YASM.Defines)" - UnDefines="%(YASM.UnDefines)" - ObjectFile="%(YASM.ObjectFile)" - ListFile="%(YASM.ListFile)" - MapFile="%(YASM.MapFile)" - ErrorFile="%(YASM.ErrorFile)" - SymbolPrefix="%(YASM.SymbolPrefix)" - SymbolSuffix="%(YASM.SymbolSuffix)" - PreProc="%(YASM.PreProc)" - Parser="%(YASM.Parser)" - AdditionalOptions="%(YASM.AdditionalOptions)" - Inputs="@(YASM)" /> - </Target> - <PropertyGroup> - <ComputeLinkInputsTargets> - $(ComputeLinkInputsTargets); - ComputeYASMOutput; - </ComputeLinkInputsTargets> - <ComputeLibInputsTargets> - $(ComputeLibInputsTargets); - ComputeYASMOutput; - </ComputeLibInputsTargets> - </PropertyGroup> - <Target - Name="ComputeYASMOutput" - Condition="'@(YASM)' != ''"> - <ItemGroup> - <YASMDirsToMake - Condition="'@(YASM)' != '' and '%(YASM.ExcludedFromBuild)' != 'true' and !HasTrailingSlash('%(YASM.ObjectFile)')" - Include="%(YASM.ObjectFile)" /> - <Link - Include="%(YASMDirsToMake.Identity)" - Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" /> - <Lib - Include="%(YASMDirsToMake.Identity)" - Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" /> - <ImpLib - Include="%(YASMDirsToMake.Identity)" - Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" /> - </ItemGroup> - <ItemGroup> - <YASMDirsToMake - Condition="'@(YASM)' != '' and '%(YASM.ExcludedFromBuild)' != 'true' and HasTrailingSlash('%(YASM.ObjectFile)')" - Include="@(YASM->'%(ObjectFile)%(Filename).obj')" /> - <Link - Include="%(YASMDirsToMake.Identity)" - Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" /> - <Lib - Include="%(YASMDirsToMake.Identity)" - Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" /> - <ImpLib - Include="%(YASMDirsToMake.Identity)" - Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" /> - </ItemGroup> - <MakeDir - Directories="@(YASMDirsToMake->'%(RootDir)%(Directory)')" /> - </Target> -</Project> \ No newline at end of file
View file
kvazaar-2.2.0.tar.gz/build/yasm/vsyasm.xml
Deleted
@@ -1,283 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:transformCallback="Microsoft.Cpp.Dev10.ConvertPropertyCallback"> - <Rule - Name="YASM" - PageTemplate="tool" - DisplayName="Yasm Assembler" - Order="200"> - - <Rule.DataSource> - <DataSource - Persistence="ProjectFile" - ItemType="YASM" /> - </Rule.DataSource> - - <Rule.Categories> - - <Category - Name="General"> - <Category.DisplayName> - <sys:String>General</sys:String> - </Category.DisplayName> - </Category> - - <Category - Name="Symbols"> - <Category.DisplayName> - <sys:String>Symbols</sys:String> - </Category.DisplayName> - </Category> - - <Category - Name="Files"> - <Category.DisplayName> - <sys:String>Files</sys:String> - </Category.DisplayName> - </Category> - - <Category - Name="Command Line" - Subtype="CommandLine"> - <Category.DisplayName> - <sys:String>Command Line</sys:String> - </Category.DisplayName> - </Category> - - </Rule.Categories> - - <StringListProperty - Name="Inputs" - Category="Command Line" - IsRequired="true" - Switch=" "> - <StringListProperty.DataSource> - <DataSource - Persistence="ProjectFile" - ItemType="YASM" - SourceType="Item" /> - </StringListProperty.DataSource> - </StringListProperty> - - <BoolProperty - Name="Debug" - Subcategory="Configuration" - HelpContext="0" - DisplayName="Debug Information" - Description="Generate debugging information" - Switch="-g cv8" /> - - <StringListProperty - Name="IncludePaths" - Subcategory="Configuration" - HelpContext="0" - DisplayName="Include Paths" - Description="Set the paths for any additional include files" - Switch="-i "value"" /> - - <StringListProperty - Name="Defines" - Category="Symbols" - Subcategory="Pre-Defined Symbols" - HelpContext="0" - DisplayName="Defined Symbols" - Description="Specify pre-defined symbols ('symbol' or 'symbol = value') " - Switch="-d "value"" /> - - <StringListProperty - Name="UnDefines" - Category="Symbols" - Subcategory="Pre-Defined Symbols" - HelpContext="0" - DisplayName="Remove Symbols" - Description="Remove pre-defined symbols " - Switch="-u "value"" /> - - <StringProperty - Name="ObjectFile" - Subcategory="Output" - HelpContext="0" - DisplayName="Object File Name" - Description="Select the output file name" - Switch="-o "value"" /> - - <StringProperty - Name="ListFile" - Category="Files" - Subcategory="Output" - HelpContext="0" - DisplayName="List File Name" - Description="Select an output listing by setting its file name" - Switch="-l "value"" /> - - <StringProperty - Name="PreIncludeFile" - Category="Files" - Subcategory="Configuration" - HelpContext="0" - DisplayName="Pre Include File" - Description="Select a pre-included file by setting its name" - Switch="-P "value"" /> - - <StringProperty - Name="MapFile" - Category="Files" - Subcategory="Output" - HelpContext="0" - DisplayName="Map File Name" - Description="Select a map output by setting its file name" - Switch="--mapdir= "value"" /> - - <StringProperty - Name="ErrorFile" - Category="Files" - Subcategory="Output" - HelpContext="0" - DisplayName="Error File Name" - Description="Send error/warning messages to a file by setting its name" - Switch="-E "value"" /> - - <StringProperty - Name="SymbolPrefix" - Category="Symbols" - Subcategory="Symbols" - HelpContext="0" - DisplayName="External Symbol Prefix" - Description="Prepend symbol to all external symbols" - Switch="--prefix "value"" /> - - <StringProperty - Name="SymbolSuffix" - Category="Symbols" - Subcategory="Symbols" - HelpContext="0" - DisplayName="External Symbol Suffix" - Description="Append symbol to all external symbols" - Switch="--suffix "value"" /> - - <EnumProperty - Name="PreProc" - Subcategory="Configuration" - HelpContext="0" - DisplayName="Pre-Processor" - Description="Select the pre-processor ('nasm' or 'raw')"> - <EnumValue - Name="0" - DisplayName="Nasm " - Switch="-rnasm" /> - <EnumValue - Name="1" - DisplayName="Raw" - Switch="-rraw" /> - </EnumProperty> - - <EnumProperty - Name="Parser" - Subcategory="Configuration" - HelpContext="0" - DisplayName="Parser" - Description="Select the parser for Intel ('nasm') or AT&T ( 'gas') syntax"> - <EnumValue - Name="0" - DisplayName="Nasm" - Switch="-pnasm" /> - <EnumValue - Name="1" - DisplayName="Gas" - Switch="-pgas" /> - </EnumProperty> - - <StringProperty - Name="CommandLineTemplate" - DisplayName="Command Line" - Visible="False" - IncludeInCommandLine="False" /> - - <DynamicEnumProperty - Name="YASMBeforeTargets" - Category="General" - EnumProvider="Targets" - IncludeInCommandLine="False">
View file
kvazaar-2.2.0.tar.gz/src/extras/x86inc.asm
Deleted
@@ -1,1456 +0,0 @@ -;***************************************************************************** -;* x86inc.asm: x264asm abstraction layer -;***************************************************************************** -;* Copyright (C) 2005-2014 x264 project -;* -;* Authors: Loren Merritt <lorenm@u.washington.edu> -;* Anton Mitrofanov <BugMaster@narod.ru> -;* Jason Garrett-Glaser <darkshikari@gmail.com> -;* Henrik Gramner <henrik@gramner.com> -;* -;* Permission to use, copy, modify, and/or distribute this software for any -;* purpose with or without fee is hereby granted, provided that the above -;* copyright notice and this permission notice appear in all copies. -;* -;* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -;* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -;* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -;* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -;* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -;* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -;* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -;***************************************************************************** - -; This is a header file for the x264ASM assembly language, which uses -; NASM/YASM syntax combined with a large number of macros to provide easy -; abstraction between different calling conventions (x86_32, win64, linux64). -; It also has various other useful features to simplify writing the kind of -; DSP functions that are most often used in x264. - -; Unlike the rest of x264, this file is available under an ISC license, as it -; has significant usefulness outside of x264 and we want it to be available -; to the largest audience possible. Of course, if you modify it for your own -; purposes to add a new feature, we strongly encourage contributing a patch -; as this feature might be useful for others as well. Send patches or ideas -; to x264-devel@videolan.org . - -%ifndef private_prefix - %define private_prefix kvz -%endif - -%ifndef public_prefix - %define public_prefix private_prefix -%endif - -%define WIN64 0 -%define UNIX64 0 -%if ARCH_X86_64 - %ifidn __OUTPUT_FORMAT__,win32 - %define WIN64 1 - %elifidn __OUTPUT_FORMAT__,win64 - %define WIN64 1 - %elifidn __OUTPUT_FORMAT__,x64 - %define WIN64 1 - %else - %define UNIX64 1 - %endif -%endif - -%ifdef PREFIX - %define mangle(x) _ %+ x -%else - %define mangle(x) x -%endif - -%macro SECTION_RODATA 0-1 16 - SECTION .rodata align=%1 -%endmacro - -%macro SECTION_TEXT 0-1 16 - SECTION .text align=%1 -%endmacro - -%if WIN64 - %define PIC -%elif ARCH_X86_64 == 0 -; x86_32 doesn't require PIC. -; Some distros prefer shared objects to be PIC, but nothing breaks if -; the code contains a few textrels, so we'll skip that complexity. - %undef PIC -%endif -%ifdef PIC - default rel -%endif - -%macro CPUNOP 1 - %ifdef __YASM_MAJOR__ - CPU %1 - %endif -%endmacro - -; Always use long nops (reduces 0x90 spam in disassembly on x86_32) -CPUNOP amdnop - -; Macros to eliminate most code duplication between x86_32 and x86_64: -; Currently this works only for leaf functions which load all their arguments -; into registers at the start, and make no other use of the stack. Luckily that -; covers most of x264's asm. - -; PROLOGUE: -; %1 = number of arguments. loads them from stack if needed. -; %2 = number of registers used. pushes callee-saved regs if needed. -; %3 = number of xmm registers used. pushes callee-saved xmm regs if needed. -; %4 = (optional) stack size to be allocated. If not aligned (x86-32 ICC 10.x, -; MSVC or YMM), the stack will be manually aligned (to 16 or 32 bytes), -; and an extra register will be allocated to hold the original stack -; pointer (to not invalidate r0m etc.). To prevent the use of an extra -; register as stack pointer, request a negative stack size. -; %4+/%5+ = list of names to define to registers -; PROLOGUE can also be invoked by adding the same options to cglobal - -; e.g. -; cglobal foo, 2,3,0, dst, src, tmp -; declares a function (foo), taking two args (dst and src) and one local variable (tmp) - -; TODO Some functions can use some args directly from the stack. If they're the -; last args then you can just not declare them, but if they're in the middle -; we need more flexible macro. - -; RET: -; Pops anything that was pushed by PROLOGUE, and returns. - -; REP_RET: -; Use this instead of RET if it's a branch target. - -; registers: -; rN and rNq are the native-size register holding function argument N -; rNd, rNw, rNb are dword, word, and byte size -; rNh is the high 8 bits of the word size -; rNm is the original location of arg N (a register or on the stack), dword -; rNmp is native size - -%macro DECLARE_REG 2-3 - %define r%1q %2 - %define r%1d %2d - %define r%1w %2w - %define r%1b %2b - %define r%1h %2h - %if %0 == 2 - %define r%1m %2d - %define r%1mp %2 - %elif ARCH_X86_64 ; memory - %define r%1m rstk + stack_offset + %3 - %define r%1mp qword r %+ %1 %+ m - %else - %define r%1m rstk + stack_offset + %3 - %define r%1mp dword r %+ %1 %+ m - %endif - %define r%1 %2 -%endmacro - -%macro DECLARE_REG_SIZE 3 - %define r%1q r%1 - %define e%1q r%1 - %define r%1d e%1 - %define e%1d e%1 - %define r%1w %1 - %define e%1w %1 - %define r%1h %3 - %define e%1h %3 - %define r%1b %2 - %define e%1b %2 -%if ARCH_X86_64 == 0 - %define r%1 e%1 -%endif -%endmacro - -DECLARE_REG_SIZE ax, al, ah -DECLARE_REG_SIZE bx, bl, bh -DECLARE_REG_SIZE cx, cl, ch -DECLARE_REG_SIZE dx, dl, dh -DECLARE_REG_SIZE si, sil, null -DECLARE_REG_SIZE di, dil, null -DECLARE_REG_SIZE bp, bpl, null - -; t# defines for when per-arch register allocation is more complex than just function arguments - -%macro DECLARE_REG_TMP 1-* - %assign %%i 0 - %rep %0 - CAT_XDEFINE t, %%i, r%1 - %assign %%i %%i+1 - %rotate 1 - %endrep -%endmacro - -%macro DECLARE_REG_TMP_SIZE 0-* - %rep %0 - %define t%1q t%1 %+ q - %define t%1d t%1 %+ d - %define t%1w t%1 %+ w - %define t%1h t%1 %+ h - %define t%1b t%1 %+ b - %rotate 1 - %endrep -%endmacro - -DECLARE_REG_TMP_SIZE 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 - -%if ARCH_X86_64
View file
kvazaar-2.2.0.tar.gz/src/strategies/x86_asm
Deleted
-(directory)
View file
kvazaar-2.2.0.tar.gz/src/strategies/x86_asm/picture-x86-asm-sad.asm
Deleted
@@ -1,385 +0,0 @@ -;/***************************************************************************** -; * This file is part of Kvazaar HEVC encoder. -; * -; * Copyright (c) 2021, Tampere University, ITU/ISO/IEC, project contributors -; * 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 Tampere University or 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 -; * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -; * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -; ****************************************************************************/ - -%include "x86inc.asm" - -;cglobal and RET macros are from the x86.inc -;they push and pop the necessary registers to -;stack depending on the operating system - -;Usage: cglobal name, %1, %2, %3 -;1%: Number of arguments -;2%: Number of registers used -;3%: Number of xmm registers used. -;More info in x86inc.asm - -SECTION .text - -;Set x86inc.asm macros to use avx and xmm registers -INIT_XMM avx - -;KVZ_SAD_4X4 -;Calculates SAD of the 16 consequtive bytes in memory -;r0 address of the first value(current frame) -;r1 address of the first value(reference frame) - -cglobal sad_4x4, 2, 2, 2 - - ;Load 16 bytes of both frames - vmovdqu m0, r0 - vmovdqu m1, r1 - - ;Calculate SAD. The results are written in - ;m015:0 and m079:64 - vpsadbw m0, m1 - - ;Sum the results - vmovhlps m1, m0 - vpaddw m0, m1 - - ;Write the result to eax - vmovd eax, m0 - - RET - - -;KVZ_SAD_4X4_STRIDE -;Calculates SAD of a 4x4 block inside a frame with stride -;r0 address of the first value(current) -;r1 address of the first value(reference) -;r2 stride - -cglobal sad_4x4_stride, 3, 3, 2 - - ;Load 4 times 4 bytes of both frames - vpinsrd m0, r0, 0 - add r0, r2 - vpinsrd m0, r0, 1 - vpinsrd m0, r0+r2, 2 - vpinsrd m0, r0+r2*2, 3 - - vpinsrd m1, r1, 0 - add r1, r2 - vpinsrd m1, r1, 1 - vpinsrd m1, r1+r2, 2 - vpinsrd m1, r1+r2*2, 3 - - vpsadbw m0, m1 - - vmovhlps m1, m0 - vpaddw m0, m1 - - vmovd eax, m0 - - RET - - -;KVZ_SAD_8X8 -;Calculates SAD of the 64 consequtive bytes in memory -;r0 address of the first value(current) -;r1 address of the first value(reference) - -cglobal sad_8x8, 2, 2, 5 - - ;Load the first half of both frames - vmovdqu m0, r0 - vmovdqu m2, r0+16 - - vmovdqu m1, r1 - vmovdqu m3, r1+16 - - ;Calculate SADs for both - vpsadbw m0, m1 - vpsadbw m2, m3 - - ;Sum - vpaddw m0, m2 - - ;Repeat for the latter half - vmovdqu m1, r0+16*2 - vmovdqu m3, r0+16*3 - - vmovdqu m2, r1+16*2 - vmovdqu m4, r1+16*3 - - vpsadbw m1, m2 - vpsadbw m3, m4 - - vpaddw m1, m3 - - ;Sum all the SADs - vpaddw m0, m1 - - vmovhlps m1, m0 - vpaddw m0, m1 - - vmovd eax, m0 - - RET - - -;KVZ_SAD_8X8_STRIDE -;Calculates SAD of a 8x8 block inside a frame with stride -;r0 address of the first value(current) -;r1 address of the first value(reference) -;r2 stride - -cglobal sad_8x8_stride, 3, 3, 5 - - ;Zero m0 register - vpxor m0, m0 - - ;Load the first half to m1 and m3 registers(cur) - ;Current frame - ;Load to the high 64 bits of xmm - vmovhpd m1, r0 - add r0, r2 - ;Load to the low 64 bits - vmovlpd m1, r0 - - vmovhpd m3, r0+r2 - vmovlpd m3, r0+r2*2 - ;lea calculates the address to r0, - ;but doesn't load anything from - ;the memory. Equivalent for - ;two add r0, r2 instructions. - lea r0, r0+r2*2 - add r0, r2 - - ;Reference frame - vmovhpd m2, r1 - add r1, r2 - vmovlpd m2, r1 - - vmovhpd m4, r1+r2 - vmovlpd m4, r1+r2*2 - lea r1, r1+r2*2 - add r1, r2 - - vpsadbw m1, m2 - vpsadbw m3, m4 - - vpaddw m0, m1 - vpaddw m0, m3 - - ;Repeat for the other half - vmovhpd m1, r0 - add r0, r2 - vmovlpd m1, r0 - - vmovhpd m3, r0+r2
View file
kvazaar-2.2.0.tar.gz/src/strategies/x86_asm/picture-x86-asm-sad.h
Deleted
@@ -1,56 +0,0 @@ -#ifndef _PICTURE_X86_ASM_SAD_H_ -#define _PICTURE_X86_ASM_SAD_H_ -/***************************************************************************** - * This file is part of Kvazaar HEVC encoder. - * - * Copyright (c) 2021, Tampere University, ITU/ISO/IEC, project contributors - * 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 Tampere University or 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 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS - ****************************************************************************/ - -/** - * \ingroup Optimization - * \file - * Optimizations for AVX, utilizing ASM implementations. - */ - -#include "global.h" // IWYU pragma: keep -#include "kvazaar.h" - -#if KVZ_BIT_DEPTH == 8 -unsigned kvz_sad_4x4_avx(const uint8_t*, const uint8_t*); -unsigned kvz_sad_8x8_avx(const uint8_t*, const uint8_t*); -unsigned kvz_sad_16x16_avx(const uint8_t*, const uint8_t*); - -unsigned kvz_sad_4x4_stride_avx(const uint8_t *data1, const uint8_t *data2, unsigned stride); -unsigned kvz_sad_8x8_stride_avx(const uint8_t *data1, const uint8_t *data2, unsigned stride); -unsigned kvz_sad_16x16_stride_avx(const uint8_t *data1, const uint8_t *data2, unsigned stride); -unsigned kvz_sad_32x32_stride_avx(const uint8_t *data1, const uint8_t *data2, unsigned stride); -unsigned kvz_sad_64x64_stride_avx(const uint8_t *data1, const uint8_t *data2, unsigned stride); -#endif // KVZ_BIT_DEPTH == 8 - -#endif
View file
kvazaar-2.2.0.tar.gz/src/strategies/x86_asm/picture-x86-asm-satd.asm
Deleted
@@ -1,575 +0,0 @@ -;/***************************************************************************** -; * This file is part of Kvazaar HEVC encoder. -; * -; * Copyright (c) 2021, Tampere University, ITU/ISO/IEC, project contributors -; * 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 Tampere University or 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 -; * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -; * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -; ****************************************************************************/ - -%include "x86inc.asm" - -;cglobal and RET macros are from the x86.inc -;they push and pop the necessary registers to -;stack depending on the operating system - -;Usage: cglobal name, %1, %2, %3 -;1%: Number of arguments -;2%: Number of registers used -;3%: Number of xmm registers used. -;More info in x86inc.asm - -SECTION .text - -;Set x86inc.asm macros to use avx and xmm registers -INIT_XMM avx - -;KVZ_ZERO_EXTEND_WD -;zero extend all packed words in xmm to dwords in 2 xmm registers -;%1 source register -;%2 lower destination register -;%3 higher destination register - -%macro KVZ_ZERO_EXTEND_WD 3 - - ;Zero extend high 64 bits - vmovhlps %3, %1 - vpmovzxwd %3, %3 - ;Zero extend low 64 bits - vpmovzxwd %2, %1 - -%endmacro ; KVZ_ZERO_EXTEND_WD - -; Use nondestructive horizontal add and sub to calculate both at the same time. -; TODO: It would probably be possible to do this with 3 registers (destructive vphsubw). -; args: -; 1, 2: input registers -; 3, 4: output registers - -%macro SATD_HORIZONTAL_SUB_AND_ADD 4 - - ; TODO: It might be possible to do this with 3 registers? - - ;First stage - vphaddw %3, %1, %2 - vphsubw %4, %1, %2 - - ;Second stage - vphaddw %1, %3, %4 - vphsubw %2, %3, %4 - - ;Third stage - vphaddw %3, %1, %2 - vphsubw %4, %1, %2 - -%endmacro ; SATD_HORIZONTAL_SUB_AND_ADD - -;KVZ_SATD_8X8_STRIDE -;Calculates SATD of a 8x8 block inside a frame with stride -;r0 address of the first value(reference) -;r1 address of the first value(current) -;r2 stride -; -;The Result is written in the register r4 - -%macro KVZ_SATD_8X8_STRIDE 0 - - ;Calculate differences of the 8 rows into - ;registers m0-m7 - vpmovzxbw m0, r0 - vpmovzxbw m7, r2 - vpsubw m0, m7 - - vpmovzxbw m1, r0+r1 - vpmovzxbw m7, r2+r3 - vpsubw m1, m7 - - ;Set r0 and r2 2 rows forward - lea r0, r0+r1*2 - lea r2, r2+r3*2 - - vpmovzxbw m2, r0 - vpmovzxbw m7, r2 - vpsubw m2, m7 - - vpmovzxbw m3, r0+r1 - vpmovzxbw m7, r2+r3 - vpsubw m3, m7 - - lea r0, r0+r1*2 - lea r2, r2+r3*2 - - vpmovzxbw m4, r0 - vpmovzxbw m7, r2 - vpsubw m4, m7 - - vpmovzxbw m5, r0+r1 - vpmovzxbw m7, r2+r3 - vpsubw m5, m7 - - lea r0, r0+r1*2 - lea r2, r2+r3*2 - - vpmovzxbw m6, r0 - vpmovzxbw m7, r2 - vpsubw m6, m7 - - ;32-bit AVX doesn't have registers - ;xmm8-xmm15, use stack instead - - %if ARCH_X86_64 - vpmovzxbw m7, r0+r1 - vpmovzxbw m8, r2+r3 - vpsubw m7, m8 - %else - %define temp0 esp+16*3 - %define temp1 esp+16*2 - %define temp2 esp+16*1 - %define temp3 esp+16*0 - - ;Reserve memory for 4 x 128 bits. - sub esp, 16*4 - - vpmovzxbw m7, r2+r3 - vmovdqu temp0, m7 - vpmovzxbw m7, r0+r1 - vpsubw m7, temp0 - - ;Put rows 5-8 to stack - vmovdqu temp0, m4 - vmovdqu temp1, m5 - vmovdqu temp2, m6 - vmovdqu temp3, m7 - %endif - - ;Hadamard transform (FWHT algorithm) - ;Horizontal transform - - %if ARCH_X86_64 - ;Calculate horizontal transform for each row. - ;Transforms of two rows are interleaved in register pairs. - ;(m8 and m9, m10 and m11,...) - - SATD_HORIZONTAL_SUB_AND_ADD m0, m1, m8, m9 - SATD_HORIZONTAL_SUB_AND_ADD m2, m3, m10, m11 - SATD_HORIZONTAL_SUB_AND_ADD m4, m5, m12, m13 - SATD_HORIZONTAL_SUB_AND_ADD m6, m7, m14, m15 - - %else - ;Calculate horizontal transforms for the first four rows. - ;Then load the other four into the registers and store - ;ready transforms in the stack. - ;Input registers are m0-m3, results are written in - ;registers m4-m7 (and memory). - - SATD_HORIZONTAL_SUB_AND_ADD m0, m1, m4, m5 - SATD_HORIZONTAL_SUB_AND_ADD m2, m3, m6, m7 - - vmovdqu m3, temp3 - vmovdqu m2, temp2 - vmovdqu m1, temp1 - vmovdqu m0, temp0 - - vmovdqu temp3, m7 - vmovdqu temp2, m6 - vmovdqu temp1, m5 - vmovdqu temp0, m4
View file
kvazaar-2.2.0.tar.gz/src/strategies/x86_asm/picture-x86-asm-satd.h
Deleted
@@ -1,50 +0,0 @@ -#ifndef _PICTURE_X86_ASM_SATD_H_ -#define _PICTURE_X86_ASM_SATD_H_ -/***************************************************************************** - * This file is part of Kvazaar HEVC encoder. - * - * Copyright (c) 2021, Tampere University, ITU/ISO/IEC, project contributors - * 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 Tampere University or 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 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS - ****************************************************************************/ - -/** - * \ingroup Optimization - * \file - * Optimizations for AVX, utilizing ASM implementations. - */ - -#include "global.h" // IWYU pragma: keep - - -unsigned kvz_satd_4x4_avx(const kvz_pixel *org, const kvz_pixel *cur); -unsigned kvz_satd_8x8_avx(const kvz_pixel *org, const kvz_pixel *cur); -unsigned kvz_satd_16x16_avx(const kvz_pixel *org, const kvz_pixel *cur); -unsigned kvz_satd_32x32_avx(const kvz_pixel *org, const kvz_pixel *cur); -unsigned kvz_satd_64x64_avx(const kvz_pixel *org, const kvz_pixel *cur); - -#endif
View file
kvazaar-2.2.0.tar.gz/src/strategies/x86_asm/picture-x86-asm.c
Deleted
@@ -1,132 +0,0 @@ -/***************************************************************************** - * This file is part of Kvazaar HEVC encoder. - * - * Copyright (c) 2021, Tampere University, ITU/ISO/IEC, project contributors - * 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 Tampere University or 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 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS - ****************************************************************************/ - -#include "strategies/x86_asm/picture-x86-asm.h" - -#if defined(KVZ_COMPILE_ASM) -#include "kvazaar.h" -#if KVZ_BIT_DEPTH == 8 -#include <stdlib.h> - -#include "strategies/x86_asm/picture-x86-asm-sad.h" -#include "strategies/x86_asm/picture-x86-asm-satd.h" -#include "strategies/sse41/picture-sse41.h" -#include "strategyselector.h" - - -static unsigned kvz_sad_32x32_avx(const uint8_t *data1, const uint8_t *data2) -{ - unsigned sad = 0; - sad += kvz_sad_16x16_avx(data1, data2); - sad += kvz_sad_16x16_avx(data1 + 8 * 32, data2 + 8 * 32); - sad += kvz_sad_16x16_avx(data1 + 16 * 32, data2 + 16 * 32); - sad += kvz_sad_16x16_avx(data1 + 24 * 32, data2 + 24 * 32); - return sad; -} - -static unsigned kvz_sad_64x64_avx(const uint8_t *data1, const uint8_t *data2) -{ - unsigned sad = 0; - sad += kvz_sad_32x32_avx(data1, data2); - sad += kvz_sad_32x32_avx(data1 + 16 * 64, data2 + 16 * 64); - sad += kvz_sad_32x32_avx(data1 + 32 * 64, data2 + 32 * 64); - sad += kvz_sad_32x32_avx(data1 + 48 * 64, data2 + 48 * 64); - return sad; -} - -static unsigned kvz_sad_other_avx(const uint8_t *data1, const uint8_t *data2, - int width, int height, - unsigned stride) -{ - unsigned sad = 0; - - for (int y = 0; y < height; ++y) { - for (int x = 0; x < width; ++x) { - sad += abs(data1y * stride + x - data2y * stride + x); - } - } - - return sad; -} - -static unsigned reg_sad_x86_asm(const uint8_t *data1, const uint8_t * data2, - const int width, const int height, - const unsigned stride1, const unsigned stride2) -{ - if (width == height) { - if (width == 8) { - return kvz_sad_8x8_stride_avx(data1, data2, stride1); - } else if (width == 16) { - return kvz_sad_16x16_stride_avx(data1, data2, stride1); - } else if (width == 32) { - return kvz_sad_32x32_stride_avx(data1, data2, stride1); - } else if (width == 64) { - return kvz_sad_64x64_stride_avx(data1, data2, stride1); - } - } - - if (width * height >= 16) { - // Call the vectorized general SAD SSE41 function when the block - // is big enough to make it worth it. - return kvz_reg_sad_sse41(data1, data2, width, height, stride1, stride2); - } else { - return kvz_sad_other_avx(data1, data2, width, height, stride1); - } -} - -#endif // KVZ_BIT_DEPTH == 8 -#endif //defined(KVZ_COMPILE_ASM) - -int kvz_strategy_register_picture_x86_asm_avx(void* opaque, uint8_t bitdepth) -{ - bool success = true; -#if defined(KVZ_COMPILE_ASM) -#if KVZ_BIT_DEPTH == 8 - if (bitdepth == 8){ - success &= kvz_strategyselector_register(opaque, "reg_sad", "x86_asm_avx", 30, ®_sad_x86_asm); - - success &= kvz_strategyselector_register(opaque, "sad_4x4", "x86_asm_avx", 30, &kvz_sad_4x4_avx); - success &= kvz_strategyselector_register(opaque, "sad_8x8", "x86_asm_avx", 30, &kvz_sad_8x8_avx); - success &= kvz_strategyselector_register(opaque, "sad_16x16", "x86_asm_avx", 30, &kvz_sad_16x16_avx); - success &= kvz_strategyselector_register(opaque, "sad_32x32", "x86_asm_avx", 30, &kvz_sad_32x32_avx); - success &= kvz_strategyselector_register(opaque, "sad_64x64", "x86_asm_avx", 30, &kvz_sad_64x64_avx); - - success &= kvz_strategyselector_register(opaque, "satd_4x4", "x86_asm_avx", 30, &kvz_satd_4x4_avx); - success &= kvz_strategyselector_register(opaque, "satd_8x8", "x86_asm_avx", 30, &kvz_satd_8x8_avx); - success &= kvz_strategyselector_register(opaque, "satd_16x16", "x86_asm_avx", 30, &kvz_satd_16x16_avx); - success &= kvz_strategyselector_register(opaque, "satd_32x32", "x86_asm_avx", 30, &kvz_satd_32x32_avx); - success &= kvz_strategyselector_register(opaque, "satd_64x64", "x86_asm_avx", 30, &kvz_satd_64x64_avx); - } -#endif // KVZ_BIT_DEPTH == 8 -#endif //!defined(KVZ_COMPILE_ASM) - return success; -}
View file
kvazaar-2.2.0.tar.gz/src/strategies/x86_asm/picture-x86-asm.h
Deleted
@@ -1,46 +0,0 @@ -#ifndef STRATEGIES_PICTURE_X86_ASM_H_ -#define STRATEGIES_PICTURE_X86_ASM_H_ -/***************************************************************************** - * This file is part of Kvazaar HEVC encoder. - * - * Copyright (c) 2021, Tampere University, ITU/ISO/IEC, project contributors - * 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 Tampere University or 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 - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS - ****************************************************************************/ - -/** - * \ingroup Optimization - * \file - * Optimizations for AVX, utilizing ASM implementations. - */ - -#include "global.h" // IWYU pragma: keep - - -int kvz_strategy_register_picture_x86_asm_avx(void* opaque, uint8_t bitdepth); - -#endif //STRATEGIES_PICTURE_X86_ASM_H_
View file
kvazaar-2.2.0.tar.gz/src/strategies/x86_asm/x86inc.asm
Deleted
@@ -1,1466 +0,0 @@ -;***************************************************************************** -;* x86inc.asm: x264asm abstraction layer -;***************************************************************************** -;* Copyright (C) 2005-2014 x264 project -;* -;* Authors: Loren Merritt <lorenm@u.washington.edu> -;* Anton Mitrofanov <BugMaster@narod.ru> -;* Jason Garrett-Glaser <darkshikari@gmail.com> -;* Henrik Gramner <henrik@gramner.com> -;* -;* Permission to use, copy, modify, and/or distribute this software for any -;* purpose with or without fee is hereby granted, provided that the above -;* copyright notice and this permission notice appear in all copies. -;* -;* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -;* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -;* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -;* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -;* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -;* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -;* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -;***************************************************************************** - -; This is a header file for the x264ASM assembly language, which uses -; NASM/YASM syntax combined with a large number of macros to provide easy -; abstraction between different calling conventions (x86_32, win64, linux64). -; It also has various other useful features to simplify writing the kind of -; DSP functions that are most often used in x264. - -; Unlike the rest of x264, this file is available under an ISC license, as it -; has significant usefulness outside of x264 and we want it to be available -; to the largest audience possible. Of course, if you modify it for your own -; purposes to add a new feature, we strongly encourage contributing a patch -; as this feature might be useful for others as well. Send patches or ideas -; to x264-devel@videolan.org . - -%ifndef private_prefix - %define private_prefix kvz -%endif - -%ifndef public_prefix - %define public_prefix private_prefix -%endif - -%define WIN64 0 -%define UNIX64 0 -%if ARCH_X86_64 - %ifidn __OUTPUT_FORMAT__,win32 - %define WIN64 1 - %elifidn __OUTPUT_FORMAT__,win64 - %define WIN64 1 - %elifidn __OUTPUT_FORMAT__,x64 - %define WIN64 1 - %else - %define UNIX64 1 - %endif -%endif - -%ifdef PREFIX - %define mangle(x) _ %+ x -%else - %define mangle(x) x -%endif - -%macro SECTION_RODATA 0-1 16 - SECTION .rodata align=%1 -%endmacro - -%macro SECTION_TEXT 0-1 16 - SECTION .text align=%1 -%endmacro - -%if WIN64 - %define PIC -%elif ARCH_X86_64 == 0 -; x86_32 doesn't require PIC. -; Some distros prefer shared objects to be PIC, but nothing breaks if -; the code contains a few textrels, so we'll skip that complexity. - %undef PIC -%endif -%ifdef PIC - default rel -%endif - -%macro CPUNOP 1 - %ifdef __YASM_MAJOR__ - CPU %1 - %endif -%endmacro - -; Always use long nops (reduces 0x90 spam in disassembly on x86_32) -CPUNOP amdnop - -; Macros to eliminate most code duplication between x86_32 and x86_64: -; Currently this works only for leaf functions which load all their arguments -; into registers at the start, and make no other use of the stack. Luckily that -; covers most of x264's asm. - -; PROLOGUE: -; %1 = number of arguments. loads them from stack if needed. -; %2 = number of registers used. pushes callee-saved regs if needed. -; %3 = number of xmm registers used. pushes callee-saved xmm regs if needed. -; %4 = (optional) stack size to be allocated. If not aligned (x86-32 ICC 10.x, -; MSVC or YMM), the stack will be manually aligned (to 16 or 32 bytes), -; and an extra register will be allocated to hold the original stack -; pointer (to not invalidate r0m etc.). To prevent the use of an extra -; register as stack pointer, request a negative stack size. -; %4+/%5+ = list of names to define to registers -; PROLOGUE can also be invoked by adding the same options to cglobal - -; e.g. -; cglobal foo, 2,3,0, dst, src, tmp -; declares a function (foo), taking two args (dst and src) and one local variable (tmp) - -; TODO Some functions can use some args directly from the stack. If they're the -; last args then you can just not declare them, but if they're in the middle -; we need more flexible macro. - -; RET: -; Pops anything that was pushed by PROLOGUE, and returns. - -; REP_RET: -; Use this instead of RET if it's a branch target. - -; registers: -; rN and rNq are the native-size register holding function argument N -; rNd, rNw, rNb are dword, word, and byte size -; rNh is the high 8 bits of the word size -; rNm is the original location of arg N (a register or on the stack), dword -; rNmp is native size - -%macro DECLARE_REG 2-3 - %define r%1q %2 - %define r%1d %2d - %define r%1w %2w - %define r%1b %2b - %define r%1h %2h - %if %0 == 2 - %define r%1m %2d - %define r%1mp %2 - %elif ARCH_X86_64 ; memory - %define r%1m rstk + stack_offset + %3 - %define r%1mp qword r %+ %1 %+ m - %else - %define r%1m rstk + stack_offset + %3 - %define r%1mp dword r %+ %1 %+ m - %endif - %define r%1 %2 -%endmacro - -%macro DECLARE_REG_SIZE 3 - %define r%1q r%1 - %define e%1q r%1 - %define r%1d e%1 - %define e%1d e%1 - %define r%1w %1 - %define e%1w %1 - %define r%1h %3 - %define e%1h %3 - %define r%1b %2 - %define e%1b %2 -%if ARCH_X86_64 == 0 - %define r%1 e%1 -%endif -%endmacro - -DECLARE_REG_SIZE ax, al, ah -DECLARE_REG_SIZE bx, bl, bh -DECLARE_REG_SIZE cx, cl, ch -DECLARE_REG_SIZE dx, dl, dh -DECLARE_REG_SIZE si, sil, null -DECLARE_REG_SIZE di, dil, null -DECLARE_REG_SIZE bp, bpl, null - -; t# defines for when per-arch register allocation is more complex than just function arguments - -%macro DECLARE_REG_TMP 1-* - %assign %%i 0 - %rep %0 - CAT_XDEFINE t, %%i, r%1 - %assign %%i %%i+1 - %rotate 1 - %endrep -%endmacro - -%macro DECLARE_REG_TMP_SIZE 0-* - %rep %0 - %define t%1q t%1 %+ q - %define t%1d t%1 %+ d - %define t%1w t%1 %+ w - %define t%1h t%1 %+ h - %define t%1b t%1 %+ b - %rotate 1 - %endrep -%endmacro - -DECLARE_REG_TMP_SIZE 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 - -%if ARCH_X86_64
View file
kvazaar-2.2.0.tar.gz/.gitignore -> kvazaar-2.3.0.tar.gz/.gitignore
Changed
@@ -15,6 +15,7 @@ .deps .dirstamp .libs +.vs Makefile Makefile.in /aclocal.m4 @@ -53,5 +54,6 @@ src/kvazaar src/libkvazaar.so.* src/kvazaar.pc +src/version.h tests/kvazaar_tests tests/kvazaar_tests.trs
View file
kvazaar-2.3.0.tar.gz/CMakeLists.txt
Added
@@ -0,0 +1,391 @@ +cmake_minimum_required(VERSION 3.12) + +project(kvazaar +LANGUAGES C CXX +HOMEPAGE_URL https://github.com/ultravideo/kvazaar +DESCRIPTION "An open-source VVC encoder licensed under 3-clause BSD" +VERSION 2.3.0 ) + +option(BUILD_SHARED_LIBS "Build using shared kvazaar library" ON) + +option(BUILD_TESTS "Build tests" ON) + + +include(GNUInstallDirs) #Helps to define correct distro specific install directories + +set(KVAZAAR_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "kvazaar library install path") +set(KVAZAAR_INSTALL_BINDIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH "kvazaar binary install path") +set(KVAZAAR_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE PATH "kvazaar include install path") +set(KVAZAAR_INSTALL_MANDIR "${CMAKE_INSTALL_MANDIR}/man1" CACHE PATH "kvazaar manual page file install path") + +# https://www.kitware.com/cmake-and-the-default-build-type/ +# Set a default build type if none was specified +set(KVZ_DEFAULT_BUILD_TYPE "RelWithDebInfo") + +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "No build type specified, setting to '${KVZ_DEFAULT_BUILD_TYPE}'.") + set(CMAKE_BUILD_TYPE "${KVZ_DEFAULT_BUILD_TYPE}" CACHE + STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() + + +find_package(Git QUIET) +if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") + # Update submodules as needed + option(GIT_SUBMODULE "Check submodules during build" ON) + if(GIT_SUBMODULE) + message(STATUS "Submodule update") + execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_SUBMOD_RESULT) + if(NOT GIT_SUBMOD_RESULT EQUAL "0") + message(WARNING "git submodule update --init --recursive failed with ${GIT_SUBMOD_RESULT}, please checkout submodules") + endif() + endif() + # Check git hash and fetch tag + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_HEAD_OK + OUTPUT_VARIABLE GIT_HEAD) + if(GIT_HEAD_OK EQUAL "0") + string(SUBSTRING ${GIT_HEAD} 0 30 GIT_TAG_LONG) + execute_process(COMMAND ${GIT_EXECUTABLE} name-rev --tags --name-only ${GIT_TAG_LONG} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_TAG_OK + OUTPUT_VARIABLE GIT_TAG) + string(SUBSTRING ${GIT_TAG} 0 9 GIT_TAG_STRIP) + + # If tag is not defined, add part of the commit hash to the version + if(GIT_TAG_OK EQUAL "0" AND GIT_TAG_STRIP STREQUAL "undefined") + string(SUBSTRING ${GIT_HEAD} 0 7 GIT_TAG_SHORT) + set(PROJECT_VERSION ${PROJECT_VERSION}-${GIT_TAG_SHORT}) + message(INFO " No tag detected, version changed to ${PROJECT_VERSION}") + endif() + endif() +endif() + +if(NOT EXISTS "${PROJECT_SOURCE_DIR}/greatest/greatest.h") + message(WARNING "The submodule greatest was not loaded, some tests may fail") +endif() + +# Grab <year>-<month>-<day> timestamp for debug purposes +string(TIMESTAMP CMAKE_BUILD_DATE %Y-%m-%d) + +set(KVZ_COMPILER_VERSION "${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}") + +if(MSVC) + if(MSVC_VERSION LESS 1800) + set(KVZ_COMPILER_VERSION "VS") + elseif(MSVC_VERSION LESS 1900) + set(KVZ_COMPILER_VERSION "VS2013") + elseif(MSVC_VERSION LESS 1910) + set(KVZ_COMPILER_VERSION "VS2015") + elseif(MSVC_VERSION LESS 1920) + set(KVZ_COMPILER_VERSION "VS2017") + elseif(MSVC_VERSION LESS 1930) + set(KVZ_COMPILER_VERSION "VS2019") + else() + set(KVZ_COMPILER_VERSION "VS2022") + endif() +endif() + +# Set compiler info to print at runtime +set(KVZ_COMPILER_STRING "${KVZ_COMPILER_VERSION}") + +add_definitions(-DCMAKE_BUILD) + +# Apply dynamic info to the config files +configure_file("${PROJECT_SOURCE_DIR}/src/kvazaar.pc.in" "${PROJECT_SOURCE_DIR}/src/kvazaar.pc" @ONLY) +configure_file("${PROJECT_SOURCE_DIR}/src/version.h.in" "${PROJECT_SOURCE_DIR}/src/version.h" @ONLY) + +# Add all sources in src/ base +file(GLOB LIB_SOURCES RELATIVE ${PROJECT_SOURCE_DIR} "src/*.h" "src/*.c") + +# We don't want CLI main in the library +list(REMOVE_ITEM LIB_SOURCES "src/encmain.c" "src/cli.c" "src/cli.h" "src/yuv_io.c" "src/yuv_io.h") + +# Add also all the strategies +file(GLOB_RECURSE LIB_SOURCES_STRATEGIES RELATIVE ${PROJECT_SOURCE_DIR} "src/strategies/*.c") + +list(APPEND LIB_SOURCES ${LIB_SOURCES_STRATEGIES}) + +# We also need the libmd5 +list(APPEND LIB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/extras/libmd5.c) + +add_definitions(-DKVZ_DLL_EXPORTS) + +if(BUILD_SHARED_LIBS) + add_definitions(-DPIC) +endif() + +# For visual studio / windows we also need our own pthread implementation and getopt +if(MSVC) + list(APPEND LIB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/extras/getopt.c ${CMAKE_CURRENT_SOURCE_DIR}/src/threadwrapper/src/pthread.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/threadwrapper/src/semaphore.cpp) + add_definitions(-DWIN32_LEAN_AND_MEAN -D_WIN32 -DWIN32 -DWIN64) +endif() + +if(BUILD_SHARED_LIBS) + list( APPEND CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" "./" "../lib" ) + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + add_library(kvazaar SHARED ${LIB_SOURCES}) +else() + add_library(kvazaar STATIC ${LIB_SOURCES}) + if(MSVC) # Fix a linking problem with visual studio when the library is the same name as the binary + set_target_properties(kvazaar PROPERTIES OUTPUT_NAME libkvazaar) + endif() + +endif() + +target_include_directories(kvazaar PUBLIC src) +target_include_directories(kvazaar PUBLIC src/extras) +target_include_directories(kvazaar PUBLIC src/strategies) + +file(GLOB LIB_SOURCES_STRATEGIES_AVX2 RELATIVE ${PROJECT_SOURCE_DIR} "src/strategies/avx2/*.c") +file(GLOB LIB_SOURCES_STRATEGIES_SSE41 RELATIVE ${PROJECT_SOURCE_DIR} "src/strategies/sse41/*.c") + +set(CLI_SOURCES "src/encmain.c" "src/cli.c" "src/cli.h" "src/yuv_io.c" "src/yuv_io.h") + +# Add the getopt and pthread for visual studio +if(MSVC) + list(APPEND CLI_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/extras/getopt.c ${CMAKE_CURRENT_SOURCE_DIR}/src/threadwrapper/src/pthread.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/threadwrapper/src/semaphore.cpp) +endif() + +add_executable(kvazaar-bin ${CLI_SOURCES}) + +set_target_properties(kvazaar-bin PROPERTIES OUTPUT_NAME kvazaar) +set_target_properties(kvazaar-bin PROPERTIES RUNTIME_OUTPUT_NAME kvazaar) + +target_link_libraries(kvazaar-bin PUBLIC kvazaar) + +if(MSVC) + target_include_directories(kvazaar PUBLIC src/threadwrapper/include) + set_property( SOURCE ${LIB_SOURCES_STRATEGIES_AVX2} APPEND PROPERTY COMPILE_FLAGS "/arch:AVX2" ) +else() + set_target_properties(kvazaar-bin PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src) + list(APPEND ALLOW_AVX2 "x86_64" "AMD64") + if(${CMAKE_SYSTEM_PROCESSOR} IN_LIST ALLOW_AVX2) + set_property( SOURCE ${LIB_SOURCES_STRATEGIES_AVX2} APPEND PROPERTY COMPILE_FLAGS "-mavx2 -mbmi -mpopcnt -mlzcnt -mbmi2" ) + set_property( SOURCE ${LIB_SOURCES_STRATEGIES_SSE41} APPEND PROPERTY COMPILE_FLAGS "-msse4.1" ) + endif() + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_package(Threads REQUIRED) + target_link_libraries(kvazaar PUBLIC Threads::Threads) + + include(CheckLibraryExists) + + CHECK_LIBRARY_EXISTS(m sin "" HAVE_LIB_M) + + if (HAVE_LIB_M) + set(EXTRA_LIBS ${EXTRA_LIBS} m) + endif (HAVE_LIB_M) + + target_link_libraries(kvazaar-bin PUBLIC ${EXTRA_LIBS}) +endif() + +# Source grouping + +# Some basic structuring of the files based on previous visual studio project files +file(GLOB SOURCE_GROUP_BITSTREAM RELATIVE ${PROJECT_SOURCE_DIR} "src/encode_coding_tree.*" "src/encoder_state-bitstream.*" "src/nal.*") +file(GLOB SOURCE_GROUP_CABAC RELATIVE ${PROJECT_SOURCE_DIR} "src/bitstream.*" "src/cabac.*" "src/context.*") +file(GLOB SOURCE_GROUP_COMPRESSION RELATIVE ${PROJECT_SOURCE_DIR} "src/search*" "src/rdo.*" "src/fast_coeff*") +file(GLOB SOURCE_GROUP_CONSTRAINT RELATIVE ${PROJECT_SOURCE_DIR} "src/constraint.*" "src/ml_*") +file(GLOB SOURCE_GROUP_CONTROL RELATIVE ${PROJECT_SOURCE_DIR} "src/cfg.*" "src/encoder.*" "src/encoder_state-c*" "src/encoder_state-g*" "src/encoderstate*" "src/gop.*" "src/input_frame_buffer.*" "src/kvazaar*" "src/rate_control.*" "src/mip_data.h") +file(GLOB SOURCE_GROUP_DATA_STRUCTURES RELATIVE ${PROJECT_SOURCE_DIR} "src/cu.*" "src/image.*" "src/imagelist.*" "src/videoframe.*") +file(GLOB SOURCE_GROUP_EXTRAS RELATIVE ${PROJECT_SOURCE_DIR} "src/extras/*.h" "src/extras/*.c") +file(GLOB_RECURSE SOURCE_GROUP_STRATEGIES RELATIVE ${PROJECT_SOURCE_DIR} "src/strategies/*.h" "src/strategies/*.c") +file(GLOB SOURCE_GROUP_RECON RELATIVE ${PROJECT_SOURCE_DIR} "src/alf.*" "src/filter.*" "src/inter.*" "src/intra.*" "src/reshape.*" "src/sao.*" "src/scalinglist.*" "src/tables.*" "src/transform.*")
View file
kvazaar-2.2.0.tar.gz/Dockerfile -> kvazaar-2.3.0.tar.gz/Dockerfile
Changed
@@ -15,12 +15,12 @@ # # Use Ubuntu 18.04 as a base for now, it's around 88MB -FROM ubuntu:18.04 +FROM ubuntu:20.04 MAINTAINER Marko Viitanen <fador@iki.fi> # List of needed packages to be able to build kvazaar with autotools -ENV REQUIRED_PACKAGES automake autoconf libtool m4 build-essential git yasm pkgconf +ENV REQUIRED_PACKAGES automake autoconf libtool m4 build-essential git pkgconf COPY . kvazaar # Run all the commands in one RUN so we don't have any extra history
View file
kvazaar-2.2.0.tar.gz/Makefile.am -> kvazaar-2.3.0.tar.gz/Makefile.am
Changed
@@ -4,7 +4,7 @@ dist_man1_MANS = doc/kvazaar.1 -dist_doc_DATA = LICENSE LICENSE.EXT.greatest LICENSE.EXT.x264asm CREDITS README.md +dist_doc_DATA = LICENSE LICENSE.EXT.greatest CREDITS README.md EXTRA_DIST = \ build \
View file
kvazaar-2.2.0.tar.gz/README.md -> kvazaar-2.3.0.tar.gz/README.md
Changed
@@ -51,6 +51,8 @@ comment: # "BEGIN KVAZAAR HELP MESSAGE" ``` +Kvazaar v2.3.0 2024-01-17 +Kvazaar license: 3-clause BSD Usage: kvazaar -i <input> --input-res <width>x<height> -o <output> @@ -95,6 +97,8 @@ - md5: 56 bytes --(no-)psnr : Calculate PSNR for frames. enabled --(no-)info : Add encoder info SEI. enabled + --(no-)enable-logging : Enable logging for regular encoder performance, + error messages are always disblayed. enabled --crypto <string> : Selective encryption. Crypto support must be enabled at compile-time. Can be 'on' or 'off' or a list of features separated with a '+'. off @@ -422,11 +426,10 @@ improve in the build process. We want to make this as simple as possible. - ### Autotools Depending on the platform, some additional tools are required for compiling Kvazaar with autotools. -For Ubuntu, the required packages are `automake autoconf libtool m4 build-essential yasm`. Yasm is -optional, but some of the optimization will not be compiled in if it's missing. +For Ubuntu, the required packages are `automake autoconf libtool m4 build-essential`. + Run the following commands to compile and install Kvazaar. @@ -437,6 +440,7 @@ sudo ldconfig See `./configure --help` for more options. +**When building shared library with visual studio the tests will fail to link, the main binary will still work** ### Autotools on MinGW It is recommended to use Clang instead of GCC in MinGW environments. GCC also works, but AVX2 optimizations will be disabled because of a known GCC issue from 2012, so performance will suffer badly. Instead of `./configure`, run @@ -445,6 +449,11 @@ to build Kvazaar using Clang. +### CMake +Depending on the platform, some additional tools are required for compiling Kvazaar with CMake. +For Ubuntu, the required packages are `build-essential cmake`. + + ### OS X - Install Homebrew - run ```brew install automake libtool yasm``` @@ -482,7 +491,7 @@ Please cite this paper(https://dl.acm.org/citation.cfm?doid=2964284.2973796) for Kvazaar: -```M. Viitanen, A. Koivula, A. Lemmetti, A. Ylä-Outinen, J. Vanne, and T. D. Hämäläinen, âKvazaar: open-source HEVC/H.265 encoder,â in Proc. ACM Int. Conf. Multimedia, Amsterdam, The Netherlands, Oct. 2016.``` +```M. Viitanen, A. Koivula, A. Lemmetti, A. Ylä-Outinen, J. Vanne, and T. D. Hämäläinen, Kvazaar: open-source HEVC/H.265 encoder, in Proc. ACM Int. Conf. Multimedia, Amsterdam, The Netherlands, Oct. 2016.``` Or in BibTex: @@ -522,7 +531,7 @@ - Main automatic way of testing is with Travis CI. Commits, branches and pull requests are tested automatically. - Uninitialized variables and such are checked with Valgrind. - - Bitstream validity is checked with HM. + - Bitstream validity is checked with VTM. - Compilation is checked on GCC and Clang on Linux, and Clang on OSX. - Windows msys2 and msvc builds are checked automatically on Appveyor. - If your changes change the bitstream, decode with HM to check that
View file
kvazaar-2.2.0.tar.gz/appveyor.yml -> kvazaar-2.3.0.tar.gz/appveyor.yml
Changed
@@ -72,11 +72,6 @@ - MSYSTEM: MINGW32 - MSYSTEM: MINGW64 - install: - - ps: $url = "http://ultravideo.cs.tut.fi/vsyasm.exe" - - ps: $output = "C:\Tools\vsyasm.exe" - - ps: "(New-Object System.Net.WebClient).DownloadFile($url, $output)" - - ps: '$env:Path += ";$output\.."' build: project: .\build\kvazaar_VS2015.sln
View file
kvazaar-2.2.0.tar.gz/build/C_Properties.props -> kvazaar-2.3.0.tar.gz/build/C_Properties.props
Changed
@@ -24,10 +24,6 @@ <SubSystem>Console</SubSystem> <RandomizedBaseAddress>false</RandomizedBaseAddress> </Link> - <YASM> - <Defines>HAVE_ALIGNED_STACK=1</Defines> - <IncludePaths>$(SolutionDir)..\src\extras;%(IncludePaths)</IncludePaths> - </YASM> </ItemDefinitionGroup> <ItemGroup /> </Project> \ No newline at end of file
View file
kvazaar-2.2.0.tar.gz/build/kvazaar_lib/kvazaar_lib.vcxproj -> kvazaar-2.3.0.tar.gz/build/kvazaar_lib/kvazaar_lib.vcxproj
Changed
@@ -46,9 +46,6 @@ <PlatformToolset>v140</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - <Import Project="..\yasm\vsyasm.props" /> - </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <Import Project="..\C_Properties.props" /> </ImportGroup> @@ -77,23 +74,14 @@ <OutDir>$(SolutionDir)$(Platform)-$(Configuration)-libs\</OutDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <YASM /> <Lib> <AdditionalLibraryDirectories> </AdditionalLibraryDirectories> <AdditionalDependencies> </AdditionalDependencies> </Lib> - <YASM> - <Defines>ARCH_X86_64=1;%(Defines)</Defines> - <IncludePaths>$(SolutionDir)..\src\extras;%(IncludePaths);$(SolutionDir)..\src\strategies\x86-asm;</IncludePaths> - </YASM> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <YASM> - <Defines>ARCH_X86_64=0;PREFIX</Defines> - <IncludePaths>$(SolutionDir)..\src\extras;%(IncludePaths);$(SolutionDir)..\src\strategies\x86-asm;</IncludePaths> - </YASM> <Lib> <AdditionalLibraryDirectories> </AdditionalLibraryDirectories> @@ -106,10 +94,6 @@ </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <YASM> - <Defines>ARCH_X86_64=0;PREFIX</Defines> - <IncludePaths>$(SolutionDir)..\src\extras;%(IncludePaths);$(SolutionDir)..\src\strategies\x86-asm;</IncludePaths> - </YASM> <Lib> <AdditionalLibraryDirectories> </AdditionalLibraryDirectories> @@ -122,10 +106,6 @@ </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <YASM> - <Defines>ARCH_X86_64=1;%(Defines)</Defines> - <IncludePaths>$(SolutionDir)..\src\extras;%(IncludePaths);$(SolutionDir)..\src\strategies\x86-asm;</IncludePaths> - </YASM> <Lib> <AdditionalLibraryDirectories> </AdditionalLibraryDirectories> @@ -239,7 +219,6 @@ <ClCompile Include="..\..\src\strategies\strategies-nal.c" /> <ClCompile Include="..\..\src\strategies\strategies-picture.c" /> <ClCompile Include="..\..\src\strategies\strategies-sao.c" /> - <ClCompile Include="..\..\src\strategies\x86_asm\picture-x86-asm.c" /> <ClCompile Include="..\..\src\threadwrapper\src\pthread.cpp"> <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsCpp</CompileAs> <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs> @@ -318,9 +297,6 @@ <ClInclude Include="..\..\src\strategies\strategies-nal.h" /> <ClInclude Include="..\..\src\strategies\strategies-picture.h" /> <ClInclude Include="..\..\src\strategies\strategies-sao.h" /> - <ClInclude Include="..\..\src\strategies\x86_asm\picture-x86-asm-sad.h" /> - <ClInclude Include="..\..\src\strategies\x86_asm\picture-x86-asm-satd.h" /> - <ClInclude Include="..\..\src\strategies\x86_asm\picture-x86-asm.h" /> <ClInclude Include="..\..\src\strategyselector.h" /> <ClInclude Include="..\..\src\tables.h" /> <ClInclude Include="..\..\src\threadqueue.h" /> @@ -330,18 +306,5 @@ <ClInclude Include="..\..\src\transform.h" /> <ClInclude Include="..\..\src\videoframe.h" /> </ItemGroup> - <ItemGroup> - <YASM Include="..\..\src\extras\x86inc.asm"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - </YASM> - <YASM Include="..\..\src\strategies\x86_asm\picture-x86-asm-sad.asm" /> - <YASM Include="..\..\src\strategies\x86_asm\picture-x86-asm-satd.asm" /> - </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - <Import Project="..\yasm\vsyasm.targets" /> - </ImportGroup> -</Project> +</Project> \ No newline at end of file
View file
kvazaar-2.2.0.tar.gz/build/kvazaar_lib/kvazaar_lib.vcxproj.filters -> kvazaar-2.3.0.tar.gz/build/kvazaar_lib/kvazaar_lib.vcxproj.filters
Changed
@@ -34,9 +34,6 @@ <Filter Include="Optimization\strategies\avx2"> <UniqueIdentifier>{4ffb5d27-c5bb-44d5-a935-fa93066a259e}</UniqueIdentifier> </Filter> - <Filter Include="Optimization\strategies\x86_asm"> - <UniqueIdentifier>{d0ce7d00-30c6-4e8a-b96e-51e13cb038ea}</UniqueIdentifier> - </Filter> <Filter Include="CABAC"> <UniqueIdentifier>{c696e039-5ba4-48ab-845d-cfe1a5713525}</UniqueIdentifier> </Filter> @@ -81,9 +78,6 @@ <ClCompile Include="..\..\src\strategies\avx2\picture-avx2.c"> <Filter>Optimization\strategies\avx2</Filter> </ClCompile> - <ClCompile Include="..\..\src\strategies\x86_asm\picture-x86-asm.c"> - <Filter>Optimization\strategies\x86_asm</Filter> - </ClCompile> <ClCompile Include="..\..\src\strategies\avx2\dct-avx2.c"> <Filter>Optimization\strategies\avx2</Filter> </ClCompile> @@ -375,15 +369,6 @@ <ClInclude Include="..\..\src\strategies\strategies-quant.h"> <Filter>Optimization\strategies</Filter> </ClInclude> - <ClInclude Include="..\..\src\strategies\x86_asm\picture-x86-asm.h"> - <Filter>Optimization\strategies\x86_asm</Filter> - </ClInclude> - <ClInclude Include="..\..\src\strategies\x86_asm\picture-x86-asm-sad.h"> - <Filter>Optimization\strategies\x86_asm</Filter> - </ClInclude> - <ClInclude Include="..\..\src\strategies\x86_asm\picture-x86-asm-satd.h"> - <Filter>Optimization\strategies\x86_asm</Filter> - </ClInclude> <ClInclude Include="..\..\src\strategies\sse41\picture-sse41.h"> <Filter>Optimization\strategies\sse41</Filter> </ClInclude> @@ -478,15 +463,4 @@ <Filter>Control</Filter> </ClInclude> </ItemGroup> - <ItemGroup> - <YASM Include="..\..\src\extras\x86inc.asm"> - <Filter>Extras</Filter> - </YASM> - <YASM Include="..\..\src\strategies\x86_asm\picture-x86-asm-sad.asm"> - <Filter>Optimization\strategies\x86_asm</Filter> - </YASM> - <YASM Include="..\..\src\strategies\x86_asm\picture-x86-asm-satd.asm"> - <Filter>Optimization\strategies\x86_asm</Filter> - </YASM> - </ItemGroup> -</Project> +</Project> \ No newline at end of file
View file
kvazaar-2.2.0.tar.gz/configure.ac -> kvazaar-2.3.0.tar.gz/configure.ac
Changed
@@ -23,7 +23,7 @@ # # Here is a somewhat sane guide to lib versioning: http://apr.apache.org/versioning.html ver_major=7 -ver_minor=2 +ver_minor=3 ver_release=0 # Prevents configure from adding a lot of defines to the CFLAGS @@ -137,6 +137,22 @@ , cygwin*|msys*|mingw*, CFLAGS="$CFLAGS -D__USE_MINGW_ANSI_STDIO=1" + # Fix a bug in mingw gcc where stack doesn't get aligned properly, force all AVX instructions to be unaligned + AS_CASE($CC, *gcc, + AX_CHECK_COMPILE_FLAG(-Wa,-muse-unaligned-vector-move, + CFLAGS="-Wa,-muse-unaligned-vector-move $CFLAGS", + + AC_MSG_CHECKING(if compiler is gcc) + AS_IF($CC --version | grep "gcc" >/dev/null 2>&1, + AS_ECHO("yes") + AC_MSG_ERROR(-Wa,-muse-unaligned-vector-move not supported, required with mingw+gcc to fix alignment bugs, update the used gcc) + , + AS_ECHO("no") + AS_ECHO("Compiler not gcc, -Wa,-muse-unaligned-vector-move not needed") + ) + + ) + ) AS_IF( test "x$BITS" = "x32", ASFLAGS="$ASFLAGS -fwin32 -DPREFIX -DHAVE_ALIGNED_STACK=0" @@ -165,24 +181,9 @@ ) -# YASM checks -AS_IF(test "x$X86" = "xtrue", - AC_CHECK_TOOL(YASM, yasm, no) -) -AS_IF(test "x$YASM" != "xno", have_yasm="yes") - -AC_ARG_ENABLE(asm, AS_HELP_STRING(--disable-asm, disable assembly no), - , enable_asm="yes" -) -AS_IF(test "x$enable_asm" != "xno" -a $have_yasm != "yes", - enable_asm="no" -) - - AM_CONDITIONAL(HAVE_X86, test "x$X86" = "xtrue") AM_CONDITIONAL(HAVE_PPC, test "x$PPC" = "xtrue") AM_CONDITIONAL(HAVE_ARM, test "x$ARM" = "xtrue") -AM_CONDITIONAL(ENABLE_ASM, test "x$enable_asm" = "xyes" -a "x$have_yasm" = "xyes" ) AC_ARG_VAR(ASFLAGS, ASFLAGS to use for assembler) AC_SUBST(ASFLAGS)
View file
kvazaar-2.2.0.tar.gz/doc/kvazaar.1 -> kvazaar-2.3.0.tar.gz/doc/kvazaar.1
Changed
@@ -1,9 +1,11 @@ -.TH KVAZAAR "1" "January 2023" "kvazaar v2.2.0" "User Commands" +.TH KVAZAAR "1" "tammikuu 2024" "kvazaar v2.3.0" "User Commands" .SH NAME kvazaar \- open source HEVC encoder .SH SYNOPSIS \fBkvazaar \fR\-i <input> \-\-input\-res <width>x<height> \-o <output> .SH DESCRIPTION + +.SS "Required:" .TP \fB\-i\fR, \fB\-\-input <filename> Input file @@ -85,6 +87,10 @@ \fB\-\-(no\-)info Add encoder info SEI. enabled .TP +\fB\-\-(no\-)enable\-logging +Enable logging for regular encoder performance, +error messages are always disblayed. enabled +.TP \fB\-\-crypto <string> Selective encryption. Crypto support must be enabled at compile\-time. Can be 'on' or 'off' or
View file
kvazaar-2.2.0.tar.gz/src/Makefile.am -> kvazaar-2.3.0.tar.gz/src/Makefile.am
Changed
@@ -14,9 +14,6 @@ include_HEADERS = \ kvazaar.h -noinst_HEADERS = \ - extras/x86inc.asm - noinst_LTLIBRARIES = \ libaltivec.la \ libavx2.la \ @@ -154,8 +151,6 @@ strategies/strategies-sao.h \ strategies/strategies-encode.c \ strategies/strategies-encode.h \ - strategies/x86_asm/picture-x86-asm.c \ - strategies/x86_asm/picture-x86-asm.h \ strategyselector.c \ strategyselector.h \ extras/libmd5.c \ @@ -238,27 +233,6 @@ if HAVE_SSE2 libsse2_la_CFLAGS = -msse2 endif - -if ENABLE_ASM -noinst_LTLIBRARIES += libasm.la -libkvazaar_la_LIBADD += libasm.la -libasm_la_SOURCES = \ - strategies/x86_asm/picture-x86-asm-sad.asm \ - strategies/x86_asm/picture-x86-asm-sad.h \ - strategies/x86_asm/picture-x86-asm-satd.asm \ - strategies/x86_asm/picture-x86-asm-satd.h -libkvazaar_la_CFLAGS += -DKVZ_COMPILE_ASM - -strategies/x86_asm/picture-x86-asm-sad.lo: strategies/x86_asm/picture-x86-asm-sad.asm -strategies/x86_asm/picture-x86-asm-satd.lo: strategies/x86_asm/picture-x86-asm-satd.asm -endif #ENABLE_ASM endif #HAVE_X86 -yasm_verbose = $(yasm_verbose_@AM_V@) -yasm_verbose_ = $(yasm_verbose_@AM_DEFAULT_V@) -yasm_verbose_0 = @echo " YASM " $@; - -.asm.lo: - $(yasm_verbose)$(LIBTOOL) --mode=compile --tag=CC $(YASM) -I$(srcdir)/extras $(ASFLAGS) $< -o $@ -prefer-non-pic 1>/dev/null -
View file
kvazaar-2.2.0.tar.gz/src/cfg.c -> kvazaar-2.3.0.tar.gz/src/cfg.c
Changed
@@ -188,6 +188,9 @@ cfg->force_inter = 0; cfg->intra_chroma_search = 0; cfg->fast_bipred = 1; + + cfg->enable_logging_output = 1; + return 1; } @@ -1407,6 +1410,9 @@ else if OPT("fast-bipred") { cfg->fast_bipred = atobool(value); } + else if OPT("enable-logging") { + cfg->enable_logging_output = atobool(value); + } else { return 0; }
View file
kvazaar-2.2.0.tar.gz/src/cli.c -> kvazaar-2.3.0.tar.gz/src/cli.c
Changed
@@ -176,6 +176,8 @@ { "no-intra-chroma-search", no_argument, NULL, 0 }, { "fast-bipred", no_argument, NULL, 0 }, { "no-fast-bipred", no_argument, NULL, 0 }, + { "enable-logging", no_argument, NULL, 0 }, + { "no-enable-logging", no_argument, NULL, 0 }, {0, 0, 0, 0} }; @@ -382,22 +384,28 @@ void print_usage(void) { + print_version(); fprintf(stdout, - "Kvazaar usage: -i and --input-res to set input, -o to set output\n" - " --help for more information\n"); + "usage: -i and --input-res to set input, -o to set output\n" + " --help for more information\n"); } void print_version(void) { fprintf(stdout, - "Kvazaar " VERSION_STRING "\n" +#ifdef CMAKE_BUILD + "kvazaar " VERSION_STRING " " KVZ_COMPILER_STRING " " KVZ_COMPILE_DATE "\n"); +#else + "Kvazaar " VERSION_STRING "\n" "Kvazaar license: 3-clause BSD\n"); +#endif } void print_help(void) { + print_version(); fprintf(stdout, "Usage:\n" "kvazaar -i <input> --input-res <width>x<height> -o <output>\n" @@ -447,6 +455,8 @@ " - md5: 56 bytes\n" " --(no-)psnr : Calculate PSNR for frames. enabled\n" " --(no-)info : Add encoder info SEI. enabled\n" + " --(no-)enable-logging : Enable logging for regular encoder performance,\n" + " error messages are always disblayed. enabled\n" " --crypto <string> : Selective encryption. Crypto support must be\n" " enabled at compile-time. Can be 'on' or 'off' or\n" " a list of features separated with a '+'. off\n"
View file
kvazaar-2.2.0.tar.gz/src/encmain.c -> kvazaar-2.3.0.tar.gz/src/encmain.c
Changed
@@ -527,10 +527,12 @@ const encoder_control_t *encoder = enc->control; - fprintf(stderr, "Input: %s, output: %s\n", opts->input, opts->output); - fprintf(stderr, " Video size: %dx%d (input=%dx%d)\n", - encoder->in.width, encoder->in.height, - encoder->in.real_width, encoder->in.real_height); + if(opts->config->enable_logging_output) { + fprintf(stderr, "Input: %s, output: %s\n", opts->input, opts->output); + fprintf(stderr, " Video size: %dx%d (input=%dx%d)\n", + encoder->in.width, encoder->in.height, + encoder->in.real_width, encoder->in.real_height); + } if (opts->seek > 0 && !yuv_io_seek(input, opts->seek, opts->config->width, opts->config->height, opts->config->file_format)) { fprintf(stderr, "Failed to seek %d frames.\n", opts->seek); @@ -687,7 +689,7 @@ // Compute and print stats. double frame_psnr3 = { 0.0, 0.0, 0.0 }; - if (encoder->cfg.calc_psnr && encoder->cfg.source_scan_type == KVZ_INTERLACING_NONE) { + if (encoder->cfg.calc_psnr && encoder->cfg.source_scan_type == KVZ_INTERLACING_NONE && encoder->cfg.enable_logging_output) { // Do not compute PSNR for interlaced frames, because img_rec does not contain // the deinterlaced frame yet. compute_psnr(img_src, img_rec, frame_psnr); @@ -719,8 +721,10 @@ psnr_sum1 += frame_psnr1; psnr_sum2 += frame_psnr2; - print_frame_info(&info_out, frame_psnr, len_out, encoder->cfg.calc_psnr, - calc_avg_qp(qp_sum, frames_done)); + if (opts->config->enable_logging_output) { + print_frame_info(&info_out, frame_psnr, len_out, encoder->cfg.calc_psnr, + calc_avg_qp(qp_sum, frames_done)); + } } api->picture_free(cur_in_img); @@ -735,19 +739,20 @@ // All reconstructed pictures should have been output. assert(recon_buffer_size == 0); - - // Print statistics of the coding - fprintf(stderr, " Processed %d frames, %10llu bits", - frames_done, - (long long unsigned int)bitstream_length * 8); - if (encoder->cfg.calc_psnr && frames_done > 0) { - fprintf(stderr, " AVG PSNR Y %2.4f U %2.4f V %2.4f", - psnr_sum0 / frames_done, - psnr_sum1 / frames_done, - psnr_sum2 / frames_done); + if (opts->config->enable_logging_output) { + // Print statistics of the coding + fprintf(stderr, " Processed %d frames, %10llu bits", + frames_done, + (long long unsigned int)bitstream_length * 8); + if (encoder->cfg.calc_psnr && frames_done > 0) { + fprintf(stderr, " AVG PSNR Y %2.4f U %2.4f V %2.4f", + psnr_sum0 / frames_done, + psnr_sum1 / frames_done, + psnr_sum2 / frames_done); + } + fprintf(stderr, "\n"); + fprintf(stderr, " Total CPU time: %.3f s.\n", ((float)(clock() - start_time)) / CLOCKS_PER_SEC); } - fprintf(stderr, "\n"); - fprintf(stderr, " Total CPU time: %.3f s.\n", ((float)(clock() - start_time)) / CLOCKS_PER_SEC); { const double mega = (double)(1 << 20); @@ -774,14 +779,16 @@ encoding_cpu = 100.0; } #endif - fprintf(stderr, " Encoding time: %.3f s.\n", encoding_time); - fprintf(stderr, " Encoding wall time: %.3f s.\n", wall_time); + if (opts->config->enable_logging_output) { + fprintf(stderr, " Encoding time: %.3f s.\n", encoding_time); + fprintf(stderr, " Encoding wall time: %.3f s.\n", wall_time); - fprintf(stderr, " Encoding CPU usage: %.2f%%\n", encoding_cpu); - fprintf(stderr, " FPS: %.2f\n", encoding_fps); + fprintf(stderr, " Encoding CPU usage: %.2f%%\n", encoding_cpu); + fprintf(stderr, " FPS: %.2f\n", encoding_fps); - fprintf(stderr, " Bitrate: %.3f Mbps\n", bitrate_mbps); - fprintf(stderr, " AVG QP: %.1f\n", avg_qp); + fprintf(stderr, " Bitrate: %.3f Mbps\n", bitrate_mbps); + fprintf(stderr, " AVG QP: %.1f\n", avg_qp); + } } pthread_join(input_thread, NULL); }
View file
kvazaar-2.2.0.tar.gz/src/encoder.c -> kvazaar-2.3.0.tar.gz/src/encoder.c
Changed
@@ -216,12 +216,12 @@ // completed. encoder->cfg.owf += 2; - fprintf(stderr, "--owf=auto value set to %d.\n", encoder->cfg.owf); + if (cfg->enable_logging_output) fprintf(stderr, "--owf=auto value set to %d.\n", encoder->cfg.owf); } if (encoder->cfg.threads < 0) { encoder->cfg.threads = MIN(max_threads, get_max_parallelism(encoder)); - fprintf(stderr, "--threads=auto value set to %d.\n", encoder->cfg.threads); + if (cfg->enable_logging_output) fprintf(stderr, "--threads=auto value set to %d.\n", encoder->cfg.threads); } if (encoder->cfg.source_scan_type != KVZ_INTERLACING_NONE) {
View file
kvazaar-2.2.0.tar.gz/src/encoder_state-bitstream.c -> kvazaar-2.3.0.tar.gz/src/encoder_state-bitstream.c
Changed
@@ -179,7 +179,7 @@ uint32_t ref_matrix_id = UINT32_MAX; for (pred_list_idx = list_id; pred_list_idx >= 0; pred_list_idx--) { - const int32_t * const pred_list = (list_id == pred_list_idx) ? + const coeff_t* const pred_list = (list_id == pred_list_idx) ? kvz_scalinglist_get_default(size_id, pred_list_idx) : encoder->scaling_list.scaling_list_coeffsize_idpred_list_idx; @@ -200,7 +200,7 @@ const int32_t coef_num = MIN(MAX_MATRIX_COEF_NUM, kvz_g_scaling_list_sizesize_id); const uint32_t * const scan_cg = (size_id == 0) ? g_sig_last_scan_16x16 : g_sig_last_scan_32x32; int32_t next_coef = 8; - const int32_t * const coef_list = encoder->scaling_list.scaling_list_coeffsize_idlist_id; + const coeff_t* const coef_list = encoder->scaling_list.scaling_list_coeffsize_idlist_id; if (size_id >= SCALING_LIST_16x16) { WRITE_SE(stream, encoder->scaling_list.scaling_list_dcsize_idlist_id - 8, "scaling_list_dc_coef_minus8"); @@ -504,7 +504,9 @@ WRITE_U(stream, 0, 1, "constrained_intra_pred_flag"); WRITE_U(stream, encoder->cfg.trskip_enable, 1, "transform_skip_enabled_flag"); - if (state->frame->max_qp_delta_depth >= 0) { + // Check all the conditions for setting cu_qp_delta_enabled_flag here, since state->frame->max_qp_delta_depth might not be set yet. + if (encoder->cfg.target_bitrate > 0 || encoder->cfg.erp_aqp || encoder->cfg.roi.file_path || + encoder->cfg.set_qp_in_cu || encoder->cfg.vaq || (state->tile->frame->source && state->tile->frame->source->roi.roi_array) ) { // Use separate QP for each LCU when rate control is enabled. WRITE_U(stream, 1, 1, "cu_qp_delta_enabled_flag"); WRITE_UE(stream, state->frame->max_qp_delta_depth, "diff_cu_qp_delta_depth");
View file
kvazaar-2.2.0.tar.gz/src/encoder_state-ctors_dtors.c -> kvazaar-2.3.0.tar.gz/src/encoder_state-ctors_dtors.c
Changed
@@ -68,6 +68,9 @@ state->frame->rc_beta = -1.367; state->frame->icost = 0; + // Reset max_qp_delta_depth here, was causing problems when headers are requested before input is fed in + state->frame->max_qp_delta_depth = 0; + const encoder_control_t * const encoder = state->encoder_control; const int num_lcus = encoder->in.width_in_lcu * encoder->in.height_in_lcu; state->frame->lcu_stats = calloc(num_lcus, sizeof(lcu_stats_t));
View file
kvazaar-2.2.0.tar.gz/src/extras/libmd5.c -> kvazaar-2.3.0.tar.gz/src/extras/libmd5.c
Changed
@@ -27,11 +27,11 @@ #ifndef __BIG_ENDIAN__ # define byteReverse(buf, len) /* Nothing */ #else -void byteReverse(uint32_t *buf, unsigned len); +static void byteReverse(uint32_t *buf, unsigned len); /* * Note: this code is harmless on little-endian machines. */ -void byteReverse(uint32_t *buf, unsigned len) +static void byteReverse(uint32_t *buf, unsigned len) { uint32_t t; do {
View file
kvazaar-2.2.0.tar.gz/src/global.h -> kvazaar-2.3.0.tar.gz/src/global.h
Changed
@@ -47,6 +47,10 @@ #include "config.h" // IWYU pragma: export #endif +#ifdef CMAKE_BUILD +#include "version.h" +#endif + // Include some basics in all files, like assert, primitives and NULL. // If you add anything to this list with export pragma, think long and // and hard if it's actually a good idea to incude it for every c-file. @@ -215,13 +219,12 @@ #define QUOTE(x) #x #define QUOTE_EXPAND(x) QUOTE(x) -// NOTE: When making a release, check to see if incrementing libversion in -// configure.ac is necessary. #ifndef KVZ_VERSION -#define KVZ_VERSION 2.2.0 +#define KVZ_VERSION 2.3.0 #endif #define VERSION_STRING QUOTE_EXPAND(KVZ_VERSION) + //#define VERBOSE 1 #define SAO_ABS_OFFSET_MAX ((1 << (MIN(KVZ_BIT_DEPTH, 10) - 5)) - 1)
View file
kvazaar-2.2.0.tar.gz/src/kvazaar.c -> kvazaar-2.3.0.tar.gz/src/kvazaar.c
Changed
@@ -93,7 +93,7 @@ //Initialize strategies // TODO: Make strategies non-global - if (!kvz_strategyselector_init(cfg->cpuid, KVZ_BIT_DEPTH)) { + if (!kvz_strategyselector_init(cfg->cpuid, KVZ_BIT_DEPTH, cfg->enable_logging_output)) { fprintf(stderr, "Failed to initialize strategies.\n"); goto kvazaar_open_failure; }
View file
kvazaar-2.2.0.tar.gz/src/kvazaar.h -> kvazaar-2.3.0.tar.gz/src/kvazaar.h
Changed
@@ -492,6 +492,8 @@ uint8_t intra_chroma_search; uint8_t fast_bipred; + + uint8_t enable_logging_output; //!< \brief May be used to disable the logging output to stderr. Default: on. } kvz_config; /**
View file
kvazaar-2.2.0.tar.gz/src/kvazaar.pc.in -> kvazaar-2.3.0.tar.gz/src/kvazaar.pc.in
Changed
@@ -1,11 +1,12 @@ -prefix=@prefix@ +prefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=${prefix} -libdir=@libdir@ +libdir=${prefix}/lib incdir=${prefix}/include Name: libkvazaar -Description: Open-source HEVC encoder -Version: @VERSION@ +Description: @CMAKE_PROJECT_DESCRIPTION@ +URL: @CMAKE_PROJECT_HOMEPAGE_URL@ +Version: @PROJECT_VERSION@ Libs: -L${libdir} -lkvazaar Libs.private: @LIBS@ Cflags: -I${incdir}
View file
kvazaar-2.2.0.tar.gz/src/rate_control.c -> kvazaar-2.3.0.tar.gz/src/rate_control.c
Changed
@@ -189,7 +189,7 @@ bits_coded -= state->frame->cur_gop_bits_coded; } - smoothing_window = MAX(MIN_SMOOTHING_WINDOW, smoothing_window - encoder->cfg.gop_len / 2); + smoothing_window = MAX(MIN_SMOOTHING_WINDOW, smoothing_window - MAX(encoder->cfg.gop_len / 2, 1)); double gop_target_bits = -1; while( gop_target_bits < 0 && smoothing_window < 150) { @@ -375,7 +375,7 @@ else { alpha = 0.3; } - return MAX(100, alpha*pow(state->frame->icost * 4 / bits, beta)*bits); + return MIN(MAX(100, alpha*pow(state->frame->icost * 4 / bits, beta)*bits), encoder->cfg.gop_len >= 2 ? 0.85 * state->frame->cur_gop_target_bits : state->frame->cur_gop_target_bits); } if (encoder->cfg.gop_len <= 0) {
View file
kvazaar-2.2.0.tar.gz/src/rdo.c -> kvazaar-2.3.0.tar.gz/src/rdo.c
Changed
@@ -148,19 +148,6 @@ 0.027313232421875, 5.736968994140625, }; - -// This struct is for passing data to kvz_rdoq_sign_hiding -struct sh_rates_t { - // Bit cost of increasing rate by one. - int32_t inc32 * 32; - // Bit cost of decreasing rate by one. - int32_t dec32 * 32; - // Bit cost of going from zero to one. - int32_t sig_coeff_inc32 * 32; - // Coeff minus quantized coeff. - int32_t quant_delta32 * 32; -}; - int kvz_init_rdcost_outfiles(const char *dir_path) { #define RD_SAMPLING_MAX_FN_LENGTH 4095 @@ -532,7 +519,7 @@ const encoder_state_t *const state, const int32_t qp_scaled, const uint32_t *const scan2raster, - const struct sh_rates_t *const sh_rates, + const struct kvz_sh_rates_t *const sh_rates, const int32_t last_pos, const coeff_t *const coeffs, coeff_t *const quant_coeffs) @@ -686,7 +673,7 @@ int32_t q_bits = QUANT_SHIFT + qp_scaled/6 + transform_shift; - const int32_t *quant_coeff = encoder->scaling_list.quant_coefflog2_tr_size-2scalinglist_typeqp_scaled%6; + const coeff_t *quant_coeff = encoder->scaling_list.quant_coefflog2_tr_size-2scalinglist_typeqp_scaled%6; const double *err_scale = encoder->scaling_list.error_scalelog2_tr_size-2scalinglist_typeqp_scaled%6; double block_uncoded_cost = 0; @@ -695,7 +682,7 @@ double cost_sig 32 * 32 ; double cost_coeff0 32 * 32 ; - struct sh_rates_t sh_rates; + struct kvz_sh_rates_t sh_rates; const uint32_t *scan_cg = g_sig_last_scan_cglog2_block_size - 2scan_mode; const uint32_t cg_size = 16; @@ -744,29 +731,9 @@ //Find last cg and last scanpos int32_t cg_scanpos; - for (cg_scanpos = (cg_num - 1); cg_scanpos >= 0; cg_scanpos--) - { - for (int32_t scanpos_in_cg = (cg_size - 1); scanpos_in_cg >= 0; scanpos_in_cg--) - { - int32_t scanpos = cg_scanpos*cg_size + scanpos_in_cg; - uint32_t blkpos = scanscanpos; - int32_t q = quant_coeffblkpos; - int32_t level_double = coefblkpos; - level_double = MIN(abs(level_double) * q, MAX_INT - (1 << (q_bits - 1))); - uint32_t max_abs_level = (level_double + (1 << (q_bits - 1))) >> q_bits; - - if (max_abs_level > 0) { - last_scanpos = scanpos; - ctx_set = (scanpos > 0 && type == 0) ? 2 : 0; - cg_last_scanpos = cg_scanpos; - sh_rates.sig_coeff_incblkpos = 0; - break; - } - dest_coeffblkpos = 0; - } - if (last_scanpos != -1) break; - } - + kvz_find_last_scanpos(coef, dest_coeff, type, q_bits, quant_coeff, &sh_rates, cg_size, &ctx_set, scan, &cg_last_scanpos, + &last_scanpos, cg_num, &cg_scanpos, width, scan_mode); + if (last_scanpos == -1) { return; }
View file
kvazaar-2.2.0.tar.gz/src/rdo.h -> kvazaar-2.3.0.tar.gz/src/rdo.h
Changed
@@ -45,6 +45,19 @@ #include "search_inter.h" +// This struct is for passing data to kvz_rdoq_sign_hiding +struct kvz_sh_rates_t { + // Bit cost of increasing rate by one. + int32_t inc32 * 32; + // Bit cost of decreasing rate by one. + int32_t dec32 * 32; + // Bit cost of going from zero to one. + int32_t sig_coeff_inc32 * 32; + // Coeff minus quantized coeff. + int32_t quant_delta32 * 32; +}; + + extern const uint32_t kvz_g_go_rice_range5; extern const uint32_t kvz_g_go_rice_prefix_len5;
View file
kvazaar-2.2.0.tar.gz/src/scalinglist.c -> kvazaar-2.3.0.tar.gz/src/scalinglist.c
Changed
@@ -43,7 +43,7 @@ const uint16_t kvz_g_scaling_list_size4 = { 16, 64, 256,1024}; static const uint8_t g_scaling_list_size_x4 = { 4, 8,16,32}; -static const int32_t g_quant_default_4x416 = +static const coeff_t g_quant_default_4x416 = { 16,16,16,16, 16,16,16,16, @@ -51,7 +51,7 @@ 16,16,16,16 }; -static const int32_t g_quant_intra_default_8x864 = +static const coeff_t g_quant_intra_default_8x864 = { 16,16,16,16,17,18,21,24, 16,16,16,16,17,19,22,25, @@ -63,7 +63,7 @@ 24,25,29,36,47,65,88,115 }; -static const int32_t g_quant_inter_default_8x864 = +static const coeff_t g_quant_inter_default_8x864 = { 16,16,16,16,17,18,20,24, 16,16,16,17,18,20,24,25, @@ -75,8 +75,8 @@ 24,25,28,33,41,54,71,91 }; -const int16_t kvz_g_quant_scales6 = { 26214,23302,20560,18396,16384,14564 }; -const int16_t kvz_g_inv_quant_scales6 = { 40,45,51,57,64,72 }; +const coeff_t kvz_g_quant_scales6 = { 26214,23302,20560,18396,16384,14564 }; +const coeff_t kvz_g_inv_quant_scales6 = { 40,45,51,57,64,72 }; /** @@ -91,12 +91,12 @@ for (listId = 0; listId < kvz_g_scaling_list_numsizeId; listId++) { for (qp = 0; qp < 6; qp++) { if (!(sizeId == 3 && listId == 3)) { - scaling_list->quant_coeffsizeIdlistIdqp = (int32_t*)calloc(kvz_g_scaling_list_sizesizeId, sizeof(int32_t)); - scaling_list->de_quant_coeffsizeIdlistIdqp = (int32_t*)calloc(kvz_g_scaling_list_sizesizeId, sizeof(int32_t)); + scaling_list->quant_coeffsizeIdlistIdqp = (coeff_t*)calloc(kvz_g_scaling_list_sizesizeId, sizeof(int32_t)); + scaling_list->de_quant_coeffsizeIdlistIdqp = (coeff_t*)calloc(kvz_g_scaling_list_sizesizeId, sizeof(int32_t)); scaling_list->error_scalesizeIdlistIdqp = (double*)calloc(kvz_g_scaling_list_sizesizeId, sizeof(double)); } } - scaling_list->scaling_list_coeffsizeIdlistId = (int32_t*)calloc(MIN(MAX_MATRIX_COEF_NUM, kvz_g_scaling_list_sizesizeId), sizeof(int32_t)); + scaling_list->scaling_list_coeffsizeIdlistId = (coeff_t*)calloc(MIN(MAX_MATRIX_COEF_NUM, kvz_g_scaling_list_sizesizeId), sizeof(int32_t)); } } // alias, assign pointer to an existing array @@ -263,9 +263,9 @@ #undef LINE_BUFSIZE } -const int32_t *kvz_scalinglist_get_default(const uint32_t size_id, const uint32_t list_id) +const coeff_t *kvz_scalinglist_get_default(const uint32_t size_id, const uint32_t list_id) { - const int32_t *list_ptr = g_quant_intra_default_8x8; // Default to "8x8" intra + const coeff_t *list_ptr = g_quant_intra_default_8x8; // Default to "8x8" intra switch(size_id) { case SCALING_LIST_4x4: list_ptr = g_quant_default_4x4; @@ -286,7 +286,7 @@ * \brief get scaling list for decoder * */ -static void scalinglist_process_dec(const int32_t * const coeff, int32_t *dequantcoeff, +static void scalinglist_process_dec(const coeff_t * const coeff, coeff_t *dequantcoeff, int32_t inv_quant_scales, uint32_t height, uint32_t width, uint32_t ratio, int32_t size_num, uint32_t dc, @@ -315,7 +315,7 @@ * \brief get scaling list for encoder * */ -void kvz_scalinglist_process_enc(const int32_t * const coeff, int32_t* quantcoeff, const int32_t quant_scales, +void kvz_scalinglist_process_enc(const coeff_t * const coeff, coeff_t * quantcoeff, const int32_t quant_scales, const uint32_t height, const uint32_t width, const uint32_t ratio, const int32_t size_num, const uint32_t dc, const uint8_t flat) { @@ -354,7 +354,7 @@ int32_t transform_shift = MAX_TR_DYNAMIC_RANGE - bitdepth - log2_tr_size; // Represents scaling through forward transform uint32_t i,max_num_coeff = kvz_g_scaling_list_sizesize; - const int32_t *quantcoeff = scaling_list->quant_coeffsizelistqp; + const coeff_t *quantcoeff = scaling_list->quant_coeffsizelistqp; //This cast is allowed, since error_scale is a malloc'd pointer in kvz_scalinglist_init double *err_scale = (double *) scaling_list->error_scalesizelistqp; @@ -372,15 +372,15 @@ * \brief set scaling lists * */ -void kvz_scalinglist_set(scaling_list_t * const scaling_list, const int32_t * const coeff, uint32_t listId, uint32_t sizeId, uint32_t qp) +void kvz_scalinglist_set(scaling_list_t * const scaling_list, const coeff_t* const coeff, uint32_t listId, uint32_t sizeId, uint32_t qp) { const uint32_t width = g_scaling_list_size_xsizeId; const uint32_t height = g_scaling_list_size_xsizeId; const uint32_t ratio = g_scaling_list_size_xsizeId / MIN(8, g_scaling_list_size_xsizeId); const uint32_t dc = scaling_list->scaling_list_dcsizeIdlistId != 0 ? scaling_list->scaling_list_dcsizeIdlistId : 16; //These cast are allowed, since these are pointer's to malloc'd area in kvz_scalinglist_init - int32_t *quantcoeff = (int32_t*) scaling_list->quant_coeffsizeIdlistIdqp; - int32_t *dequantcoeff = (int32_t*) scaling_list->de_quant_coeffsizeIdlistIdqp; + coeff_t*quantcoeff = (coeff_t*) scaling_list->quant_coeffsizeIdlistIdqp; + coeff_t*dequantcoeff = (coeff_t*) scaling_list->de_quant_coeffsizeIdlistIdqp; // Encoder list kvz_scalinglist_process_enc(coeff, quantcoeff, kvz_g_quant_scalesqp<<4, height, width, ratio, @@ -410,7 +410,7 @@ for (size = 0; size < SCALING_LIST_SIZE_NUM; size++) { for (list = 0; list < kvz_g_scaling_list_numsize; list++) { - const int32_t * const list_ptr = scaling_list->use_default_list ? + const coeff_t* const list_ptr = scaling_list->use_default_list ? kvz_scalinglist_get_default(size, list) : scaling_list->scaling_list_coeffsizelist;
View file
kvazaar-2.2.0.tar.gz/src/scalinglist.h -> kvazaar-2.3.0.tar.gz/src/scalinglist.h
Changed
@@ -47,16 +47,16 @@ int8_t enable; int8_t use_default_list; int32_t scaling_list_dc SCALING_LIST_SIZE_NUMSCALING_LIST_NUM; - const int32_t *scaling_list_coeffSCALING_LIST_SIZE_NUMSCALING_LIST_NUM; - const int32_t *quant_coeff466; - const int32_t *de_quant_coeff SCALING_LIST_SIZE_NUMSCALING_LIST_NUMSCALING_LIST_REM_NUM; + const coeff_t *scaling_list_coeffSCALING_LIST_SIZE_NUMSCALING_LIST_NUM; + const coeff_t *quant_coeff466; + const coeff_t *de_quant_coeff SCALING_LIST_SIZE_NUMSCALING_LIST_NUMSCALING_LIST_REM_NUM; const double *error_scale466; } scaling_list_t; extern const uint8_t kvz_g_scaling_list_num4; extern const uint16_t kvz_g_scaling_list_size4; -const int32_t *kvz_scalinglist_get_default(const uint32_t size_id, const uint32_t list_id); +const coeff_t*kvz_scalinglist_get_default(const uint32_t size_id, const uint32_t list_id); void kvz_scalinglist_init(scaling_list_t * const scaling_list); void kvz_scalinglist_destroy(scaling_list_t * const scaling_list);
View file
kvazaar-2.2.0.tar.gz/src/strategies/avx2/quant-avx2.c -> kvazaar-2.3.0.tar.gz/src/strategies/avx2/quant-avx2.c
Changed
@@ -152,7 +152,7 @@ return _mm256_inserti128_si256(v, hi, 1); } -static INLINE void scanord_read_vector_32(const int32_t *__restrict quant_coeff, +static INLINE void scanord_read_vector_32(const coeff_t *__restrict quant_coeff, const uint32_t *__restrict scan, int8_t scan_mode, int32_t subpos, @@ -190,15 +190,14 @@ _mm256_setr_epi32(2, 6, 0, 4, 3, 7, 1, 5), }; - __m128i coeffs4 = { - _mm_loadu_si128((__m128i *)(quant_coeff + row_offsets0)), - _mm_loadu_si128((__m128i *)(quant_coeff + row_offsets1)), - _mm_loadu_si128((__m128i *)(quant_coeff + row_offsets2)), - _mm_loadu_si128((__m128i *)(quant_coeff + row_offsets3)), - }; + coeff_t coeffs16; + memcpy(coeffs, quant_coeff + row_offsets0, sizeof(coeff_t) * 4); + memcpy(coeffs + 4, quant_coeff + row_offsets1, sizeof(coeff_t) * 4); + memcpy(coeffs + 8, quant_coeff + row_offsets2, sizeof(coeff_t) * 4); + memcpy(coeffs + 12, quant_coeff + row_offsets3, sizeof(coeff_t) * 4); - __m256i coeffs_upper = concatenate_2x128i(coeffs0, coeffs1); - __m256i coeffs_lower = concatenate_2x128i(coeffs2, coeffs3); + __m256i coeffs_upper = _mm256_cvtepi16_epi32(_mm_load_si128((__m128i const *)(coeffs))); + __m256i coeffs_lower = _mm256_cvtepi16_epi32(_mm_load_si128((__m128i const*)(coeffs + 8))); __m256i lower_shuffled = _mm256_permutevar8x32_epi32(coeffs_lower, shufmasksscan_mode); @@ -368,7 +367,7 @@ int32_t qp_scaled = kvz_get_scaled_qp(type, state->qp, (encoder->bitdepth - 8) * 6); const uint32_t log2_tr_size = kvz_g_convert_to_bitwidth + 2; const int32_t scalinglist_type = (block_type == CU_INTRA ? 0 : 3) + (int8_t)("\0\3\1\2"type); - const int32_t *quant_coeff = encoder->scaling_list.quant_coefflog2_tr_size - 2scalinglist_typeqp_scaled % 6; + const coeff_t *quant_coeff = encoder->scaling_list.quant_coefflog2_tr_size - 2scalinglist_typeqp_scaled % 6; const int32_t transform_shift = MAX_TR_DYNAMIC_RANGE - encoder->bitdepth - log2_tr_size; //!< Represents scaling through forward transform const int32_t q_bits = QUANT_SHIFT + qp_scaled / 6 + transform_shift; const int32_t add = ((state->frame->slicetype == KVZ_SLICE_I) ? 171 : 85) << (q_bits - 9); @@ -393,8 +392,8 @@ v_sign = _mm256_or_si256(v_sign, _mm256_set1_epi16(1)); if (state->encoder_control->scaling_list.enable) { - __m256i v_quant_coeff_lo = _mm256_loadu_si256(((__m256i *)(quant_coeff + n)) + 0); - __m256i v_quant_coeff_hi = _mm256_loadu_si256(((__m256i *)(quant_coeff + n)) + 1); + __m256i v_quant_coeff_lo = _mm256_cvtepi16_epi32(_mm_loadu_si128(((__m128i *)(quant_coeff + n)) + 0)); + __m256i v_quant_coeff_hi = _mm256_cvtepi16_epi32(_mm_loadu_si128(((__m128i *)(quant_coeff + n)) + 1)); low_b = _mm256_permute2x128_si256(v_quant_coeff_lo, v_quant_coeff_hi, @@ -739,7 +738,7 @@ uint32_t log2_tr_size = kvz_g_convert_to_bit width + 2; int32_t scalinglist_type = (block_type == CU_INTRA ? 0 : 3) + (int8_t)("\0\3\1\2"type); - const int32_t *dequant_coef = encoder->scaling_list.de_quant_coefflog2_tr_size-2scalinglist_typeqp_scaled%6; + const coeff_t *dequant_coef = encoder->scaling_list.de_quant_coefflog2_tr_size-2scalinglist_typeqp_scaled%6; shift += 4; if (shift >qp_scaled / 6) { @@ -863,6 +862,72 @@ return (double)(temp) / 256.0; } +static void find_last_scanpos_avx2(coeff_t* coef, coeff_t* dest_coeff, int8_t type, int32_t q_bits, const coeff_t* quant_coeff, struct kvz_sh_rates_t* sh_rates, const uint32_t cg_size, + uint16_t* ctx_set, const uint32_t* scan, int32_t* cg_last_scanpos, int32_t* last_scanpos, uint32_t cg_num, int32_t* cg_scanpos, int32_t width, int8_t scan_mode) { + + __m256i min_q_bits = _mm256_set1_epi32(MAX_INT - (1 << (q_bits - 1))); + __m256i q_bits_v = _mm256_set1_epi32(1 << (q_bits - 1)); + for (*cg_scanpos = (cg_num - 1); *cg_scanpos >= 0; (*cg_scanpos)--) { + int32_t scan_pos = *cg_scanpos * cg_size; + int32_t block_pos = scanscan_pos; + coeff_t q_array16; + memcpy(q_array, &quant_coeffblock_pos, 4 * sizeof(coeff_t)); + memcpy(q_array + 4, &quant_coeffblock_pos + width, 4 * sizeof(coeff_t)); + memcpy(q_array + 8, &quant_coeffblock_pos + 2 * width, 4 * sizeof(coeff_t)); + memcpy(q_array + 12, &quant_coeffblock_pos + 3 * width, 4 * sizeof(coeff_t)); + + coeff_t coef_array16; + memcpy(coef_array, &coefblock_pos, 4 * sizeof(coeff_t)); + memcpy(coef_array + 4, &coefblock_pos + width, 4 * sizeof(coeff_t)); + memcpy(coef_array + 8, &coefblock_pos + 2 * width, 4 * sizeof(coeff_t)); + memcpy(coef_array + 12, &coefblock_pos + 3 * width, 4 * sizeof(coeff_t)); + + __m256i q = _mm256_loadu_si256((__m256i const*)q_array); + + __m256i level_double = _mm256_loadu_si256((__m256i const*)coef_array); + + __m256i abs_level_double = _mm256_abs_epi16(level_double); + + __m256i levels_mul_q_low = _mm256_mullo_epi16(abs_level_double, q); + __m256i levels_mul_q_high = _mm256_mulhi_epi16(abs_level_double, q); + + __m256i levels_mul_0 = _mm256_unpacklo_epi16(levels_mul_q_low, levels_mul_q_high); + __m256i levels_mul_1 = _mm256_unpackhi_epi16(levels_mul_q_low, levels_mul_q_high); + + __m256i min_mask = _mm256_cmpgt_epi32(min_q_bits, levels_mul_0); + levels_mul_0 = _mm256_blendv_epi8(min_q_bits, levels_mul_0, min_mask); + min_mask = _mm256_cmpgt_epi32(min_q_bits, levels_mul_1); + levels_mul_1 = _mm256_blendv_epi8(min_q_bits, levels_mul_1, min_mask); + + __m256i max_abs_level_low = _mm256_add_epi32(levels_mul_0, q_bits_v); + max_abs_level_low = _mm256_srai_epi32(max_abs_level_low, q_bits); + __m256i max_abs_level_high = _mm256_add_epi32(levels_mul_1, q_bits_v); + max_abs_level_high = _mm256_srai_epi32(max_abs_level_high, q_bits); + + memset(&dest_coeffblock_pos, 0, sizeof(coeff_t) * 4); + memset(&dest_coeffblock_pos + width, 0, sizeof(coeff_t) * 4); + memset(&dest_coeffblock_pos + 2 * width, 0, sizeof(coeff_t) * 4); + memset(&dest_coeffblock_pos + 3 * width, 0, sizeof(coeff_t) * 4); + if (!_mm256_testz_si256(max_abs_level_low, max_abs_level_low) || !_mm256_testz_si256(max_abs_level_high, max_abs_level_high)) { + uint32_t max_abs_level16; + _mm256_storeu2_m128i((__m128i*)(max_abs_level + 8), (__m128i*)(max_abs_level), max_abs_level_low); + _mm256_storeu2_m128i((__m128i*)(max_abs_level + 12), (__m128i*)(max_abs_level + 4), max_abs_level_high); + for (int sp = scan_pos + 15; sp >= scan_pos; sp--) { + uint32_t blkpos = kvz_g_sig_last_scanscan_mode1sp - scan_pos; + if (max_abs_levelblkpos > 0) { + *last_scanpos = sp; + *ctx_set = (sp > 0 && type == 0) ? 2 : 0; + *cg_last_scanpos = *cg_scanpos; + sh_rates->sig_coeff_incscansp = 0; + return; + } + } + } + } + *last_scanpos = -1; +} + + #endif //COMPILE_INTEL_AVX2 && defined X86_64 int kvz_strategy_register_quant_avx2(void* opaque, uint8_t bitdepth) @@ -879,6 +944,7 @@ success &= kvz_strategyselector_register(opaque, "quant", "avx2", 40, &kvz_quant_avx2); success &= kvz_strategyselector_register(opaque, "coeff_abs_sum", "avx2", 0, &coeff_abs_sum_avx2); success &= kvz_strategyselector_register(opaque, "fast_coeff_cost", "avx2", 40, &fast_coeff_cost_avx2); + success &= kvz_strategyselector_register(opaque, "find_last_scanpos", "avx2", 40, &find_last_scanpos_avx2); #endif //COMPILE_INTEL_AVX2 && defined X86_64 return success;
View file
kvazaar-2.2.0.tar.gz/src/strategies/generic/quant-generic.c -> kvazaar-2.3.0.tar.gz/src/strategies/generic/quant-generic.c
Changed
@@ -57,7 +57,7 @@ int32_t qp_scaled = kvz_get_scaled_qp(type, state->qp, (encoder->bitdepth - 8) * 6); const uint32_t log2_tr_size = kvz_g_convert_to_bitwidth + 2; const int32_t scalinglist_type = (block_type == CU_INTRA ? 0 : 3) + (int8_t)("\0\3\1\2"type); - const int32_t *quant_coeff = encoder->scaling_list.quant_coefflog2_tr_size - 2scalinglist_typeqp_scaled % 6; + const coeff_t *quant_coeff = encoder->scaling_list.quant_coefflog2_tr_size - 2scalinglist_typeqp_scaled % 6; const int32_t transform_shift = MAX_TR_DYNAMIC_RANGE - encoder->bitdepth - log2_tr_size; //!< Represents scaling through forward transform const int32_t q_bits = QUANT_SHIFT + qp_scaled / 6 + transform_shift; const int32_t add = ((state->frame->slicetype == KVZ_SLICE_I) ? 171 : 85) << (q_bits - 9); @@ -311,7 +311,7 @@ uint32_t log2_tr_size = kvz_g_convert_to_bit width + 2; int32_t scalinglist_type = (block_type == CU_INTRA ? 0 : 3) + (int8_t)("\0\3\1\2"type); - const int32_t *dequant_coef = encoder->scaling_list.de_quant_coefflog2_tr_size-2scalinglist_typeqp_scaled%6; + const coeff_t *dequant_coef = encoder->scaling_list.de_quant_coefflog2_tr_size-2scalinglist_typeqp_scaled%6; shift += 4; if (shift >qp_scaled / 6) { @@ -374,6 +374,31 @@ return (double) sum / 256.0; } + + +static void find_last_scanpos_generic(coeff_t* coef, coeff_t* dest_coeff, int8_t type, int32_t q_bits, const coeff_t* quant_coeff, struct kvz_sh_rates_t* sh_rates, const uint32_t cg_size, uint16_t* ctx_set, const uint32_t* scan, int32_t* cg_last_scanpos, int32_t* last_scanpos, uint32_t cg_num, int32_t* cg_scanpos, int32_t width, int8_t scan_mode) { + for (*cg_scanpos = (cg_num - 1); *cg_scanpos >= 0; (*cg_scanpos)--) { + for (int32_t scanpos_in_cg = (cg_size - 1); scanpos_in_cg >= 0; scanpos_in_cg--) { + int32_t scanpos = *cg_scanpos * cg_size + scanpos_in_cg; + uint32_t blkpos = scanscanpos; + int32_t q = quant_coeffblkpos; + int32_t level_double = coefblkpos; + level_double = MIN(abs(level_double) * q, MAX_INT - (1 << (q_bits - 1))); + uint32_t max_abs_level = (level_double + (1 << (q_bits - 1))) >> q_bits; + + if (max_abs_level > 0) { + *last_scanpos = scanpos; + *ctx_set = (scanpos > 0 && type == 0) ? 2 : 0; + *cg_last_scanpos = *cg_scanpos; + sh_rates->sig_coeff_incblkpos = 0; + return; + } + dest_coeffblkpos = 0; + } + } +} + + int kvz_strategy_register_quant_generic(void* opaque, uint8_t bitdepth) { bool success = true; @@ -383,6 +408,7 @@ success &= kvz_strategyselector_register(opaque, "dequant", "generic", 0, &kvz_dequant_generic); success &= kvz_strategyselector_register(opaque, "coeff_abs_sum", "generic", 0, &coeff_abs_sum_generic); success &= kvz_strategyselector_register(opaque, "fast_coeff_cost", "generic", 0, &fast_coeff_cost_generic); + success &= kvz_strategyselector_register(opaque, "find_last_scanpos", "generic", 0, &find_last_scanpos_generic); return success; }
View file
kvazaar-2.2.0.tar.gz/src/strategies/strategies-picture.c -> kvazaar-2.3.0.tar.gz/src/strategies/strategies-picture.c
Changed
@@ -37,7 +37,6 @@ #include "strategies/generic/picture-generic.h" #include "strategies/sse2/picture-sse2.h" #include "strategies/sse41/picture-sse41.h" -#include "strategies/x86_asm/picture-x86-asm.h" #include "strategyselector.h" @@ -93,9 +92,6 @@ if (kvz_g_hardware_flags.intel_flags.sse41) { success &= kvz_strategy_register_picture_sse41(opaque, bitdepth); } - if (kvz_g_hardware_flags.intel_flags.avx) { - success &= kvz_strategy_register_picture_x86_asm_avx(opaque, bitdepth); - } if (kvz_g_hardware_flags.intel_flags.avx2) { success &= kvz_strategy_register_picture_avx2(opaque, bitdepth); }
View file
kvazaar-2.2.0.tar.gz/src/strategies/strategies-quant.c -> kvazaar-2.3.0.tar.gz/src/strategies/strategies-quant.c
Changed
@@ -43,6 +43,7 @@ dequant_func *kvz_dequant; coeff_abs_sum_func *kvz_coeff_abs_sum; fast_coeff_cost_func *kvz_fast_coeff_cost; +find_last_scanpos_func* kvz_find_last_scanpos; int kvz_strategy_register_quant(void* opaque, uint8_t bitdepth) {
View file
kvazaar-2.2.0.tar.gz/src/strategies/strategies-quant.h -> kvazaar-2.3.0.tar.gz/src/strategies/strategies-quant.h
Changed
@@ -44,6 +44,7 @@ #include "kvazaar.h" #include "tables.h" +struct kvz_sh_rates_t; // Declare function pointers. typedef void (quant_func)(const encoder_state_t * const state, coeff_t *coef, coeff_t *q_coef, int32_t width, int32_t height, int8_t type, int8_t scan_idx, int8_t block_type); @@ -60,12 +61,16 @@ typedef uint32_t (coeff_abs_sum_func)(const coeff_t *coeffs, size_t length); +typedef void (find_last_scanpos_func)(coeff_t* coef, coeff_t* dest_coeff, int8_t type, int32_t q_bits, const coeff_t* quant_coeff, struct kvz_sh_rates_t* sh_rates, const uint32_t cg_size, + uint16_t* ctx_set, const uint32_t* scan, int32_t* cg_last_scanpos, int32_t* last_scanpos, uint32_t cg_num, int32_t* cg_scanpos, int32_t width, int8_t scan_mode); + // Declare function pointers. extern quant_func * kvz_quant; extern quant_residual_func * kvz_quantize_residual; extern dequant_func *kvz_dequant; extern coeff_abs_sum_func *kvz_coeff_abs_sum; extern fast_coeff_cost_func *kvz_fast_coeff_cost; +extern find_last_scanpos_func *kvz_find_last_scanpos; int kvz_strategy_register_quant(void* opaque, uint8_t bitdepth); @@ -76,6 +81,7 @@ {"dequant", (void**) &kvz_dequant}, \ {"coeff_abs_sum", (void**) &kvz_coeff_abs_sum}, \ {"fast_coeff_cost", (void**) &kvz_fast_coeff_cost}, \ + {"find_last_scanpos", (void**) &kvz_find_last_scanpos}, \
View file
kvazaar-2.2.0.tar.gz/src/strategyselector.c -> kvazaar-2.3.0.tar.gz/src/strategyselector.c
Changed
@@ -46,13 +46,13 @@ hardware_flags_t kvz_g_strategies_in_use; hardware_flags_t kvz_g_strategies_available; -static void set_hardware_flags(int32_t cpuid); +static void set_hardware_flags(int32_t cpuid, uint8_t logging); static void* strategyselector_choose_for(const strategy_list_t * const strategies, const char * const strategy_type); //Strategies to include (add new file here) //Returns 1 if successful -int kvz_strategyselector_init(int32_t cpuid, uint8_t bitdepth) { +int kvz_strategyselector_init(int32_t cpuid, uint8_t bitdepth, uint8_t logging) { const strategy_to_select_t *cur_strategy_to_select = strategies_to_select; strategy_list_t strategies; @@ -60,7 +60,7 @@ strategies.count = 0; strategies.strategies = NULL; - set_hardware_flags(cpuid); + set_hardware_flags(cpuid, logging); //Add new register function here if (!kvz_strategy_register_picture(&strategies, bitdepth)) { @@ -118,109 +118,109 @@ //Also check what optimizations are available and what are in use //SIMD optimizations available bool strategies_available = false; - fprintf(stderr, "Available: "); + if (logging) fprintf(stderr, "Available: "); if (kvz_g_strategies_available.intel_flags.avx != 0){ - fprintf(stderr, "avx(%d) ", kvz_g_strategies_available.intel_flags.avx); + if (logging) fprintf(stderr, "avx(%d) ", kvz_g_strategies_available.intel_flags.avx); strategies_available = true; } if (kvz_g_strategies_available.intel_flags.avx2 != 0){ - fprintf(stderr, "avx2(%d) ", kvz_g_strategies_available.intel_flags.avx2); + if (logging) fprintf(stderr, "avx2(%d) ", kvz_g_strategies_available.intel_flags.avx2); strategies_available = true; } if (kvz_g_strategies_available.intel_flags.mmx != 0) { - fprintf(stderr, "mmx(%d) ", kvz_g_strategies_available.intel_flags.mmx); + if (logging) fprintf(stderr, "mmx(%d) ", kvz_g_strategies_available.intel_flags.mmx); strategies_available = true; } if (kvz_g_strategies_available.intel_flags.sse != 0) { - fprintf(stderr, "sse(%d) ", kvz_g_strategies_available.intel_flags.sse); + if (logging) fprintf(stderr, "sse(%d) ", kvz_g_strategies_available.intel_flags.sse); strategies_available = true; } if (kvz_g_strategies_available.intel_flags.sse2 != 0) { - fprintf(stderr, "sse2(%d) ", kvz_g_strategies_available.intel_flags.sse2); + if (logging) fprintf(stderr, "sse2(%d) ", kvz_g_strategies_available.intel_flags.sse2); strategies_available = true; } if (kvz_g_strategies_available.intel_flags.sse3 != 0) { - fprintf(stderr, "sse3(%d) ", kvz_g_strategies_available.intel_flags.sse3); + if (logging) fprintf(stderr, "sse3(%d) ", kvz_g_strategies_available.intel_flags.sse3); strategies_available = true; } if (kvz_g_strategies_available.intel_flags.sse41 != 0) { - fprintf(stderr, "sse41(%d) ", kvz_g_strategies_available.intel_flags.sse41); + if (logging) fprintf(stderr, "sse41(%d) ", kvz_g_strategies_available.intel_flags.sse41); strategies_available = true; } if (kvz_g_strategies_available.intel_flags.sse42 != 0) { - fprintf(stderr, "sse42(%d) ", kvz_g_strategies_available.intel_flags.sse42); + if (logging) fprintf(stderr, "sse42(%d) ", kvz_g_strategies_available.intel_flags.sse42); strategies_available = true; } if (kvz_g_strategies_available.intel_flags.ssse3 != 0) { - fprintf(stderr, "ssse3(%d) ", kvz_g_strategies_available.intel_flags.ssse3); + if (logging) fprintf(stderr, "ssse3(%d) ", kvz_g_strategies_available.intel_flags.ssse3); strategies_available = true; } if (kvz_g_strategies_available.arm_flags.neon != 0) { - fprintf(stderr, "neon(%d) ", kvz_g_strategies_available.arm_flags.neon); + if (logging) fprintf(stderr, "neon(%d) ", kvz_g_strategies_available.arm_flags.neon); strategies_available = true; } if (kvz_g_strategies_available.powerpc_flags.altivec != 0) { - fprintf(stderr, "altivec(%d) ", kvz_g_strategies_available.powerpc_flags.altivec); + if (logging) fprintf(stderr, "altivec(%d) ", kvz_g_strategies_available.powerpc_flags.altivec); strategies_available = true; } //If there is no strategies available if (!strategies_available){ - fprintf(stderr, "no SIMD optimizations"); + if (logging) fprintf(stderr, "no SIMD optimizations"); } - fprintf(stderr, "\n"); + if (logging) fprintf(stderr, "\n"); //SIMD optimizations in use bool strategies_in_use = false; - fprintf(stderr, "In use: "); + if (logging) fprintf(stderr, "In use: "); if (kvz_g_strategies_in_use.intel_flags.avx != 0){ - fprintf(stderr, "avx(%d) ", kvz_g_strategies_in_use.intel_flags.avx); + if (logging) fprintf(stderr, "avx(%d) ", kvz_g_strategies_in_use.intel_flags.avx); strategies_in_use = true; } if (kvz_g_strategies_in_use.intel_flags.avx2 != 0){ - fprintf(stderr, "avx2(%d) ", kvz_g_strategies_in_use.intel_flags.avx2); + if (logging) fprintf(stderr, "avx2(%d) ", kvz_g_strategies_in_use.intel_flags.avx2); strategies_in_use = true; } if (kvz_g_strategies_in_use.intel_flags.mmx != 0) { - fprintf(stderr, "mmx(%d) ", kvz_g_strategies_in_use.intel_flags.mmx); + if (logging) fprintf(stderr, "mmx(%d) ", kvz_g_strategies_in_use.intel_flags.mmx); strategies_in_use = true; } if (kvz_g_strategies_in_use.intel_flags.sse != 0) { - fprintf(stderr, "sse(%d) ", kvz_g_strategies_in_use.intel_flags.sse); + if (logging) fprintf(stderr, "sse(%d) ", kvz_g_strategies_in_use.intel_flags.sse); strategies_in_use = true; } if (kvz_g_strategies_in_use.intel_flags.sse2 != 0) { - fprintf(stderr, "sse2(%d) ", kvz_g_strategies_in_use.intel_flags.sse2); + if (logging) fprintf(stderr, "sse2(%d) ", kvz_g_strategies_in_use.intel_flags.sse2); strategies_in_use = true; } if (kvz_g_strategies_in_use.intel_flags.sse3 != 0) { - fprintf(stderr, "sse3(%d) ", kvz_g_strategies_in_use.intel_flags.sse3); + if (logging) fprintf(stderr, "sse3(%d) ", kvz_g_strategies_in_use.intel_flags.sse3); strategies_in_use = true; } if (kvz_g_strategies_in_use.intel_flags.sse41 != 0) { - fprintf(stderr, "sse41(%d) ", kvz_g_strategies_in_use.intel_flags.sse41); + if (logging) fprintf(stderr, "sse41(%d) ", kvz_g_strategies_in_use.intel_flags.sse41); strategies_in_use = true; } if (kvz_g_strategies_in_use.intel_flags.sse42 != 0) { - fprintf(stderr, "sse42(%d) ", kvz_g_strategies_in_use.intel_flags.sse42); + if (logging) fprintf(stderr, "sse42(%d) ", kvz_g_strategies_in_use.intel_flags.sse42); strategies_in_use = true; } if (kvz_g_strategies_in_use.intel_flags.ssse3 != 0) { - fprintf(stderr, "ssse3(%d) ", kvz_g_strategies_in_use.intel_flags.ssse3); + if (logging) fprintf(stderr, "ssse3(%d) ", kvz_g_strategies_in_use.intel_flags.ssse3); strategies_in_use = true; } if (kvz_g_strategies_in_use.arm_flags.neon != 0) { - fprintf(stderr, "neon(%d) ", kvz_g_strategies_in_use.arm_flags.neon); + if (logging) fprintf(stderr, "neon(%d) ", kvz_g_strategies_in_use.arm_flags.neon); strategies_in_use = true; } if (kvz_g_strategies_in_use.powerpc_flags.altivec != 0) { - fprintf(stderr, "altivec(%d) ", kvz_g_strategies_in_use.powerpc_flags.altivec); + if (logging) fprintf(stderr, "altivec(%d) ", kvz_g_strategies_in_use.powerpc_flags.altivec); strategies_in_use = true; } //If there is no strategies in use if (!strategies_in_use){ - fprintf(stderr, "no SIMD optimizations"); + if (logging) fprintf(stderr, "no SIMD optimizations"); } - fprintf(stderr, "\n"); + if (logging) fprintf(stderr, "\n"); //Free memory free(strategies.strategies); @@ -449,7 +449,7 @@ # endif #endif //COMPILE_POWERPC -static void set_hardware_flags(int32_t cpuid) { +static void set_hardware_flags(int32_t cpuid, uint8_t logging) { FILL(kvz_g_hardware_flags, 0); #if COMPILE_INTEL @@ -535,59 +535,63 @@ } } - fprintf(stderr, "Compiled: INTEL, flags:"); + if (logging) { + fprintf(stderr, "Compiled: INTEL, flags:"); #if COMPILE_INTEL_MMX - fprintf(stderr, " MMX"); + fprintf(stderr, " MMX"); #endif #if COMPILE_INTEL_SSE - fprintf(stderr, " SSE"); + fprintf(stderr, " SSE"); #endif #if COMPILE_INTEL_SSE2 - fprintf(stderr, " SSE2"); + fprintf(stderr, " SSE2"); #endif #if COMPILE_INTEL_SSE3 - fprintf(stderr, " SSE3"); + fprintf(stderr, " SSE3"); #endif #if COMPILE_INTEL_SSSE3 - fprintf(stderr, " SSSE3"); + fprintf(stderr, " SSSE3"); #endif #if COMPILE_INTEL_SSE41
View file
kvazaar-2.2.0.tar.gz/src/strategyselector.h -> kvazaar-2.3.0.tar.gz/src/strategyselector.h
Changed
@@ -95,7 +95,7 @@ extern hardware_flags_t kvz_g_strategies_in_use; extern hardware_flags_t kvz_g_strategies_available; -int kvz_strategyselector_init(int32_t cpuid, uint8_t bitdepth); +int kvz_strategyselector_init(int32_t cpuid, uint8_t bitdepth, uint8_t enable_logging_output); int kvz_strategyselector_register(void *opaque, const char *type, const char *strategy_name, int priority, void *fptr);
View file
kvazaar-2.2.0.tar.gz/src/threads.h -> kvazaar-2.3.0.tar.gz/src/threads.h
Changed
@@ -42,6 +42,10 @@ #include <pthread.h> +#ifdef __APPLE__ +#include <AvailabilityMacros.h> +#endif + #if defined(__GNUC__) && !defined(__MINGW32__) #include <unistd.h> // IWYU pragma: export #include <time.h> // IWYU pragma: export @@ -84,9 +88,9 @@ #endif //__GNUC__ -#ifdef __APPLE__ -// POSIX semaphores are deprecated on Mac so we use Grand Central Dispatch -// semaphores instead. +#if defined(__APPLE__) && MAC_OS_X_VERSION_MIN_REQUIRED > 1050 && !defined(__ppc__) +// POSIX semaphores are deprecated on Mac so we use Grand Central Dispatch semaphores instead. +// However GCD is supported only on 10.6+, and is not supported on any ppc, including 10.6 Rosetta. #include <dispatch/dispatch.h> typedef dispatch_semaphore_t kvz_sem_t; @@ -113,7 +117,7 @@ } #else -// Use POSIX semaphores. +// Use POSIX semaphores. This is also a fallback for old Darwin. #include <semaphore.h> typedef sem_t kvz_sem_t;
View file
kvazaar-2.2.0.tar.gz/src/transform.c -> kvazaar-2.3.0.tar.gz/src/transform.c
Changed
@@ -340,7 +340,6 @@ const kvz_pixel *ref = NULL; // Pointers to current location in arrays with quantized coefficients. coeff_t *coeff = NULL; - switch (color) { case COLOR_Y: pred = &lcu->rec.yoffset;
View file
kvazaar-2.3.0.tar.gz/src/version.h.in
Added
@@ -0,0 +1,39 @@ +#pragma once +/***************************************************************************** + * This file is part of kvazaar HEVC encoder. + * + * Copyright (c) 2022, Tampere University, ITU/ISO/IEC, project contributors + * 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 Tampere University or 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 + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS + ****************************************************************************/ + +#ifndef KVZ_VERSION +#define KVZ_VERSION @PROJECT_VERSION@ +#endif +#define KVZ_COMPILER_STRING "@KVZ_COMPILER_STRING@" +#define KVZ_COMPILE_DATE "@CMAKE_BUILD_DATE@" +#define VERSION_STRING QUOTE_EXPAND(KVZ_VERSION)
View file
kvazaar-2.3.0.tar.gz/tests/CMakeLists.txt
Added
@@ -0,0 +1,43 @@ +file( GLOB TEST_SOURCES "*.c" ) + +# ToDo: fix the tests +list(REMOVE_ITEM TEST_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/inter_recon_bipred_tests.c") + +add_executable(kvazaar_tests ${TEST_SOURCES} ) + +target_include_directories(kvazaar_tests PUBLIC ${PROJECT_SOURCE_DIR}) +target_include_directories(kvazaar_tests PUBLIC ${PROJECT_SOURCE_DIR}/src) +target_include_directories(kvazaar_tests PUBLIC ${PROJECT_SOURCE_DIR}/src/extras) + +add_definitions(-DKVZ_DLL_EXPORTS) + +if(BUILD_SHARED_LIBS) + add_definitions(-DPIC) +endif() + +if(MSVC) + target_include_directories(kvazaar_tests PUBLIC ../src/threadwrapper/include) + + set_property( SOURCE ${TEST_SOURCES} APPEND PROPERTY COMPILE_FLAGS "/arch:AVX2" ) + add_definitions(-DWIN32_LEAN_AND_MEAN -D_WIN32 -DWIN32 -DWIN64) +else() + list(APPEND ALLOW_AVX2 "x86_64" "AMD64") + if(${CMAKE_SYSTEM_PROCESSOR} IN_LIST ALLOW_AVX2) + set_property( SOURCE ${TEST_SOURCES} APPEND PROPERTY COMPILE_FLAGS "-mavx2 -mbmi -mpopcnt -mlzcnt -mbmi2" ) + endif() + find_package(Threads REQUIRED) + target_link_libraries(kvazaar_tests PUBLIC Threads::Threads) + + include(CheckLibraryExists) + + CHECK_LIBRARY_EXISTS(m sin "" HAVE_LIB_M) + + if (HAVE_LIB_M) + set(EXTRA_LIBS ${EXTRA_LIBS} m) + endif (HAVE_LIB_M) + + target_link_libraries(kvazaar_tests PUBLIC ${EXTRA_LIBS}) +endif() + +target_link_libraries(kvazaar_tests PUBLIC kvazaar) +
View file
kvazaar-2.2.0.tar.gz/tests/test_strategies.c -> kvazaar-2.3.0.tar.gz/tests/test_strategies.c
Changed
@@ -45,7 +45,7 @@ strategies.strategies = NULL; // Init strategyselector because it sets hardware flags. - kvz_strategyselector_init(1, KVZ_BIT_DEPTH); + kvz_strategyselector_init(1, KVZ_BIT_DEPTH, 1); // Collect all strategies to be tested. if (!kvz_strategy_register_picture(&strategies, KVZ_BIT_DEPTH)) {
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.