- Mar 28, 2019
-
-
Romain Vimont authored
The methods above_of(), left_of() and above_left_of() returned the matching block by value, or a default block if the offset resulted in a block outside boundaries. The Block structure is quite big (std::mem::size_of::<Block>() == 120). For reading a field, it is probably not optimal to return a whole Block copy or a new default block (although the compiler might optimize such accesses). Moreover, the boundaries checks were often redundant, because already done by the callers. Instead, let the callers check boundaries and return a reference to the matching block.
-
Romain Vimont authored
Rewrite conditions to make them easier to read.
-
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.
-