mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-23 18:14:06 +00:00
Update README and other documents, rename github workflow from kvazaar.yml to uvg266.yml
This commit is contained in:
parent
f691ed22c3
commit
a8c458469c
77
README.md
77
README.md
|
@ -8,8 +8,8 @@ uvg266 is still under development. Speed and RD-quality will continue to improve
|
||||||
|
|
||||||
http://ultravideo.fi/#encoder for more information.
|
http://ultravideo.fi/#encoder for more information.
|
||||||
|
|
||||||
- Linux [![Kvazaar_tests](https://github.com/ultravideo/kvazaar/actions/workflows/kvazaar.yml/badge.svg)](https://github.com/ultravideo/kvazaar/actions/workflows/kvazaar.yml)
|
- Linux [![uvg266_tests](https://github.com/ultravideo/uvg266/actions/workflows/uvg266.yml/badge.svg)](https://github.com/ultravideo/uvg266/actions/workflows/uvg266.yml)
|
||||||
- Windows [![Build status](https://ci.appveyor.com/api/projects/status/88sg1h25lp0k71pu?svg=true)](https://ci.appveyor.com/project/Ultravideo/kvazaar)
|
- Windows [![Build status](https://ci.appveyor.com/api/projects/status/88sg1h25lp0k71pu?svg=true)](https://ci.appveyor.com/project/Ultravideo/uvg266)
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
|
@ -20,13 +20,8 @@ http://ultravideo.fi/#encoder for more information.
|
||||||
- [Presets](#presets)
|
- [Presets](#presets)
|
||||||
- [uvg266 library](#uvg266-library)
|
- [uvg266 library](#uvg266-library)
|
||||||
- [Compiling uvg266](#compiling-uvg266)
|
- [Compiling uvg266](#compiling-uvg266)
|
||||||
- [Required libraries](#required-libraries)
|
- [CMake](#cmake)
|
||||||
- [Autotools](#autotools)
|
|
||||||
- [Autotools on MinGW](#autotools-on-mingw)
|
|
||||||
- [OS X](#os-x)
|
|
||||||
- [Visual Studio](#visual-studio)
|
|
||||||
- [Docker](#docker)
|
- [Docker](#docker)
|
||||||
- [Visualization (Windows only)](#visualization-windows-only)
|
|
||||||
- [Paper](#paper)
|
- [Paper](#paper)
|
||||||
- [Contributing to uvg266](#contributing-to-uvg266)
|
- [Contributing to uvg266](#contributing-to-uvg266)
|
||||||
- [Code documentation](#code-documentation)
|
- [Code documentation](#code-documentation)
|
||||||
|
@ -273,7 +268,8 @@ Compression tools:
|
||||||
--(no-)tmvp : Temporal motion vector prediction [enabled]
|
--(no-)tmvp : Temporal motion vector prediction [enabled]
|
||||||
--(no-)mrl : Enable use of multiple reference lines in intra
|
--(no-)mrl : Enable use of multiple reference lines in intra
|
||||||
predictions.
|
predictions.
|
||||||
--(no-)mip : Enable matrix weighted intra prediction. --mts <string> : Multiple Transform Selection [off].
|
--(no-)mip : Enable matrix weighted intra prediction.
|
||||||
|
--mts <string> : Multiple Transform Selection [off].
|
||||||
(Currently only implemented for intra
|
(Currently only implemented for intra
|
||||||
and has effect only when rd >= 2)
|
and has effect only when rd >= 2)
|
||||||
- off: MTS disabled
|
- off: MTS disabled
|
||||||
|
@ -282,7 +278,8 @@ Compression tools:
|
||||||
- both: MTS applied for both intra and inter blocks.
|
- both: MTS applied for both intra and inter blocks.
|
||||||
- implicit: uses implicit MTS. Applies DST7 instead
|
- implicit: uses implicit MTS. Applies DST7 instead
|
||||||
of DCT2 to certain intra blocks.
|
of DCT2 to certain intra blocks.
|
||||||
--(no-)jccr : Joint coding of chroma residual. Requires rdo> = 2. [disabled]
|
--(no-)jccr : Joint coding of chroma residual.
|
||||||
|
Requires rdo> = 2. [disabled]
|
||||||
--(no-)cclm : Cross component linear model.
|
--(no-)cclm : Cross component linear model.
|
||||||
Extra chroma prediction modes that are formed
|
Extra chroma prediction modes that are formed
|
||||||
via linear transformation from the luma
|
via linear transformation from the luma
|
||||||
|
@ -406,10 +403,10 @@ where the names have been abbreviated to fit the layout in GitHub.
|
||||||
|
|
||||||
|
|
||||||
## uvg266 library
|
## uvg266 library
|
||||||
See [kvazaar.h](src/kvazaar.h) for the library API and its
|
See [uvg266.h](src/uvg266.h) for the library API and its
|
||||||
documentation.
|
documentation.
|
||||||
|
|
||||||
When using the static uvg266 library on Windows, macro `KVZ_STATIC_LIB`
|
When using the static uvg266 library on Windows, macro `UVG_STATIC_LIB`
|
||||||
must be defined. On other platforms it's not strictly required.
|
must be defined. On other platforms it's not strictly required.
|
||||||
|
|
||||||
The needed linker and compiler flags can be obtained with pkg-config.
|
The needed linker and compiler flags can be obtained with pkg-config.
|
||||||
|
@ -423,39 +420,45 @@ improve in the build process. We want to make this as simple as
|
||||||
possible.
|
possible.
|
||||||
|
|
||||||
|
|
||||||
### Autotools
|
### CMake
|
||||||
Depending on the platform, some additional tools are required for compiling uvg266 with autotools.
|
Depending on the platform, some additional tools are required for compiling uvg266 with CMake.
|
||||||
For Ubuntu, the required packages are `automake autoconf libtool m4 build-essential yasm`. Yasm is
|
For Ubuntu, the required packages are `automake autoconf build-essential`.
|
||||||
optional, but some of the optimization will not be compiled in if it's missing.
|
|
||||||
|
|
||||||
Run the following commands to compile and install uvg266.
|
Run the following commands to compile and install uvg266.
|
||||||
|
|
||||||
./autogen.sh
|
cd build
|
||||||
./configure
|
cmake ..
|
||||||
make
|
make
|
||||||
sudo make install
|
sudo make install
|
||||||
|
|
||||||
See `./configure --help` for more options.
|
Visual Studio natively supports opening the `CMakeLists.txt` of the CMake build package has been installed.
|
||||||
|
Otherwise CMake-CLI can be used to generate the Visual Studio project files.
|
||||||
|
|
||||||
### Autotools on MinGW
|
### Docker
|
||||||
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
|
This project includes a [Dockerfile](./Dockerfile), which enables building for Docker.
|
||||||
|
Build using Docker: `docker build -t uvg266 .`
|
||||||
|
Example usage: `docker run -i -a STDIN -a STDOUT uvg266 -i - --input-res=320x240 -o - < testfile_320x240.yuv > out.266`
|
||||||
|
For other examples, see [Dockerfile](./Dockerfile)
|
||||||
|
|
||||||
CC=clang ./configure
|
## Paper
|
||||||
|
|
||||||
to build uvg266 using Clang.
|
Please cite [this paper](https://ieeexplore.ieee.org/document/9690938) for uvg266:
|
||||||
|
|
||||||
### OS X
|
```M. Viitanen, J. Sainio, A. Mercat, A. Lemmetti, and J. Vanne, “From HEVC to VVC: the First Development Steps of a Practical Intra Video Encoder,” Accepted to IEEE Transactions on Consumer Electronics```
|
||||||
- Install Homebrew
|
|
||||||
- run ```brew install automake libtool yasm```
|
|
||||||
- Refer to Autotools instructions
|
|
||||||
|
|
||||||
|
Or in BibTex:
|
||||||
|
|
||||||
### Visual Studio
|
```
|
||||||
- At least VisualStudio 2015.2 is required.
|
@ARTICLE{uvg266_2022,
|
||||||
- Project files can be found under build/.
|
author={Viitanen, Marko and Sainio, Joose and Mercat, Alexandre and Lemmetti, Ari and Vanne, Jarno},
|
||||||
- Requires external [vsyasm.exe](http://yasm.tortall.net/Download.html)
|
journal={IEEE Transactions on Consumer Electronics},
|
||||||
in %PATH%
|
title={From HEVC to VVC: the First Development Steps of a Practical Intra Video Encoder},
|
||||||
|
year={2022},
|
||||||
|
volume={},
|
||||||
|
number={},
|
||||||
|
doi={10.1109/TCE.2022.3146016}}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Contributing to uvg266
|
## Contributing to uvg266
|
||||||
We are happy to look at pull requests in Github. There is still lots of work to be done.
|
We are happy to look at pull requests in Github. There is still lots of work to be done.
|
||||||
|
@ -469,7 +472,7 @@ You can generate Doxygen documentation pages by running the command
|
||||||
|
|
||||||
### For version control we try to follow these conventions:
|
### For version control we try to follow these conventions:
|
||||||
- Master branch always produces a working bitstream (can be decoded with
|
- Master branch always produces a working bitstream (can be decoded with
|
||||||
HM).
|
VTM).
|
||||||
- Commits for new features and major changes/fixes put to a sensibly
|
- Commits for new features and major changes/fixes put to a sensibly
|
||||||
named feature branch first and later merged to the master branch.
|
named feature branch first and later merged to the master branch.
|
||||||
- Always merge the feature branch to the master branch, not the other
|
- Always merge the feature branch to the master branch, not the other
|
||||||
|
@ -478,13 +481,13 @@ You can generate Doxygen documentation pages by running the command
|
||||||
|
|
||||||
|
|
||||||
### Testing
|
### Testing
|
||||||
- Main automatic way of testing is with Travis CI. Commits, branches
|
- Main automatic way of testing is with Github Actions. Commits, branches
|
||||||
and pull requests are tested automatically.
|
and pull requests are tested automatically.
|
||||||
- Uninitialized variables and such are checked with Valgrind.
|
- Uninitialized variables and such are checked with Valgrind.
|
||||||
- Bitstream validity is checked with HM.
|
- Bitstream validity is checked with HM.
|
||||||
- Compilation is checked on GCC and Clang on Linux, and Clang on OSX.
|
- Compilation is checked on GCC and Clang on Linux, and Clang on OSX.
|
||||||
- Windows msys2 and msvc builds are checked automatically on Appveyor.
|
- Windows msys2 and msvc builds are checked automatically on Appveyor.
|
||||||
- If your changes change the bitstream, decode with HM to check that
|
- If your changes change the bitstream, decode with VTM to check that
|
||||||
it doesn't throw checksum errors or asserts.
|
it doesn't throw checksum errors or asserts.
|
||||||
- If your changes shouldn't alter the bitstream, check that they don't.
|
- If your changes shouldn't alter the bitstream, check that they don't.
|
||||||
- Automatic compression quality testing is in the works.
|
- Automatic compression quality testing is in the works.
|
||||||
|
@ -518,5 +521,5 @@ We try to follow the following conventions:
|
||||||
- Functions only used inside the module shouldn't be defined in the
|
- Functions only used inside the module shouldn't be defined in the
|
||||||
module header. They can be defined in the beginning of the .c file if
|
module header. They can be defined in the beginning of the .c file if
|
||||||
necessary.
|
necessary.
|
||||||
- Symbols defined in headers prefixed with kvz_ or KVZ_.
|
- Symbols defined in headers prefixed with uvg_ or UVG_.
|
||||||
- Includes in alphabetic order.
|
- Includes in alphabetic order.
|
||||||
|
|
|
@ -376,7 +376,8 @@ Enable use of multiple reference lines in intra
|
||||||
predictions.
|
predictions.
|
||||||
.TP
|
.TP
|
||||||
\fB\-\-(no\-)mip
|
\fB\-\-(no\-)mip
|
||||||
Enable matrix weighted intra prediction. \-\-mts <string>
|
Enable matrix weighted intra prediction.
|
||||||
|
\fB\-\-mts <string>
|
||||||
Multiple Transform Selection [off].
|
Multiple Transform Selection [off].
|
||||||
(Currently only implemented for intra
|
(Currently only implemented for intra
|
||||||
and has effect only when rd >= 2)
|
and has effect only when rd >= 2)
|
||||||
|
@ -388,7 +389,8 @@ and has effect only when rd >= 2)
|
||||||
of DCT2 to certain intra blocks.
|
of DCT2 to certain intra blocks.
|
||||||
.TP
|
.TP
|
||||||
\fB\-\-(no\-)jccr
|
\fB\-\-(no\-)jccr
|
||||||
Joint coding of chroma residual. Requires rdo> = 2. [disabled]
|
Joint coding of chroma residual.
|
||||||
|
Requires rdo> = 2. [disabled]
|
||||||
.TP
|
.TP
|
||||||
\fB\-\-(no\-)cclm
|
\fB\-\-(no\-)cclm
|
||||||
Cross component linear model.
|
Cross component linear model.
|
||||||
|
|
|
@ -628,7 +628,7 @@ void print_help(void)
|
||||||
" --(no-)tmvp : Temporal motion vector prediction [enabled]\n"
|
" --(no-)tmvp : Temporal motion vector prediction [enabled]\n"
|
||||||
" --(no-)mrl : Enable use of multiple reference lines in intra\n"
|
" --(no-)mrl : Enable use of multiple reference lines in intra\n"
|
||||||
" predictions.\n"
|
" predictions.\n"
|
||||||
" --(no-)mip : Enable matrix weighted intra prediction."
|
" --(no-)mip : Enable matrix weighted intra prediction.\n"
|
||||||
" --mts <string> : Multiple Transform Selection [off].\n"
|
" --mts <string> : Multiple Transform Selection [off].\n"
|
||||||
" (Currently only implemented for intra\n"
|
" (Currently only implemented for intra\n"
|
||||||
" and has effect only when rd >= 2)\n"
|
" and has effect only when rd >= 2)\n"
|
||||||
|
@ -638,7 +638,7 @@ void print_help(void)
|
||||||
" - both: MTS applied for both intra and inter blocks.\n"
|
" - both: MTS applied for both intra and inter blocks.\n"
|
||||||
" - implicit: uses implicit MTS. Applies DST7 instead \n"
|
" - implicit: uses implicit MTS. Applies DST7 instead \n"
|
||||||
" of DCT2 to certain intra blocks.\n"
|
" of DCT2 to certain intra blocks.\n"
|
||||||
" --(no-)jccr : Joint coding of chroma residual. "
|
" --(no-)jccr : Joint coding of chroma residual.\n"
|
||||||
" Requires rdo> = 2. [disabled]\n"
|
" Requires rdo> = 2. [disabled]\n"
|
||||||
" --(no-)cclm : Cross component linear model. \n"
|
" --(no-)cclm : Cross component linear model. \n"
|
||||||
" Extra chroma prediction modes that are formed\n"
|
" Extra chroma prediction modes that are formed\n"
|
||||||
|
|
Loading…
Reference in a new issue