- Mar 28, 2019
-
-
Thomas Daede authored
Moves all functions that previously used usize to this type. Instead of direct conversions to a slot number, use a to_index fn. This also changes the size of the global mv state and context ref counting arrays as they don't need LAST_FRAME.
-
- Mar 27, 2019
-
-
Enabled for speed <= 2, i.e. when fi.config.speed_settings.rdo_tx_decision == true. AWCY result for speed 2 PSNR | PSNR Cb | PSNR Cr | PSNR HVS | SSIM | MS SSIM | CIEDE 2000 -1.3858 | -1.1944 | -0.8549 | -0.9902 | -1.3141 | -0.9488 | -1.1913 With encoding time increased < ~5%.
-
- Mar 26, 2019
-
-
Subpartitioning the luma TX to sub-partition size broke the Chroma deblocking code. This patch implements proper luma/chroma tx size determination in the deblocking code.
-
-
Also add asserts to check the # of tx block for chroma is only one. Later, this asserts become not valid if partition size is > 64x64 and chroma format is not 420.
-
Requireed sub functions are: - get_tx_size_context() - tx_size_to_depth() - bsize_to_max_depth() - bsize_to_tx_size_cat() and etc. Also add sub_tx_size_map[] table.
-
Also add reset_left_tx_context() function to BlockContext.
-
-
-
-
-
Romain Vimont authored
BlockContext::checkpoint() returned a whole copy of BlockContext, while only a subset of its fields were actually part of the checkpoint. The other fields, unused, were filled by default values. Instead, use a structure dedicated to BlockContext checkpoints, containing only the relevant fields.
-
Romain Vimont authored
In BlockContext, the blocks were stored as Vec<Vec<Block>>. Use a dedicated structure instead. This will allow to provide a tiled view (TileBlocks).
-
Romain Vimont authored
BlockContext was borrowed but only read.
-
- Mar 25, 2019
-
-
David Michael Barr authored
Tidy up the loop as well.
-
- Mar 23, 2019
-
-
This shows a pretty nice improvement of ~15% on encode block benchmarks.
-
- Mar 22, 2019
-
-
Romain Vimont authored
Semantically, the functions want to receive either Some reference or None. They don't care whether the actual object happens to be atomically refcounted. As a downside, the caller is required to do some conversions.
-
Romain Vimont authored
> Don't pass a smart pointer as a function parameter unless you want to > use or manipulate the smart pointer itself, such as to share or > transfer ownership. (Herb Sutter) <https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/>
-
- Mar 21, 2019
-
-
Romain Vimont authored
This is redundant. For consistency, keep blk_w and blk_h.
-
-
Romain Vimont authored
An optional tempoary plane is passed from callers to callees to avoid reallocations. However, the callers of diamond_me_search() need not provide this plane; they just need a flag to enable subpixel motion estimation.
-
Romain Vimont authored
The temporary plane need not be provided by the caller of sub_pixel_me() and telescopic_subpel_search(). Expose it only when it allows to avoid reallocations between several function calls.
-
Romain Vimont authored
In motion estimation, several functions received both the offset expressed in blocks and in pixels for the luma plane. This information is redundant: a block offset is trivially convertible to a luma plane offset. With tiling, we need to manage both absolute offsets (relative to the frame) and offsets relative to the current tile. This will be more simple without duplication.
-
-
- Mar 20, 2019
-
-
Romain Vimont authored
Like previous commits did for BlockOffset and SuperBlockOffset.
-
Romain Vimont authored
Like previous commit did for BlockOffset.
-
Romain Vimont authored
BlockOffset has a size of 128 bits (the same as a slice), and is trivially copyable, so make it derive Copy. Once it derives Copy, clippy suggests to never pass it by reference: <https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref> So pass it by value everywhere to simplify usage. In particular, this avoids lifetimes bounds where not necessary (e.g. in get_sub_partitions()). See <https://github.com/xiph/rav1e/pull/1126#issuecomment-474532123>.
-
Adrien Maglo authored
-
Adrien Maglo authored
-
Adrien Maglo authored
Save them by reference frame types instead of picture slot. Do not add several times the zero motion vector to the predictor list.
-
- Mar 19, 2019
-
-
Romain Vimont authored
The motion vectors were stored in a Vec<Vec<MotionVector>>. The innermost Vec contains a flatten matrix (fi.w_in_b x fi.h_in_b) of MotionVectors, and there are REF_FRAMES instances of them (the outermost Vec). Introduce a typed structure to replace the innermost Vec: - this improves readability; - this allows to expose it as a 2D array, thanks to Index and IndexMut traits; - this will allow to split it into (non-overlapping) tiled views, containing only the motion vectors for a bounded region of the plane (see <https://github.com/xiph/rav1e/pull/1126>).
- Mar 18, 2019
-
-
David Michael Barr authored
* Inline constrain and msb for cdef_filter_block This reduces its average time by around 42%. * Inline round_shift for pred_directional and others This reduces its average time by around 10%. * Inline sgrproj_sum_finish to its various callers It is at the lowest level of a hot call graph and almost trivial. * Inline get_mv_rate in motion estimation It is almost trivial and called often.
-
- Mar 16, 2019
- Mar 15, 2019
-
-
Thomas Daede authored
Temporarily fixes #1115.
-
Adrien Maglo authored
-
Luca Barbato authored
-