mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-27 19:24:06 +00:00
[mtt] Remove work_tree_copy_down and change work_tree_copy_up not to require the whole work tree as input parameter
This commit is contained in:
parent
27726dc375
commit
3e119d5338
58
src/search.c
58
src/search.c
|
@ -84,10 +84,35 @@ static INLINE void initialize_partial_work_tree(lcu_t* from, lcu_t *to, const cu
|
||||||
to->left_ref = from->left_ref;
|
to->left_ref = from->left_ref;
|
||||||
*LCU_GET_TOP_RIGHT_CU(to) = *LCU_GET_TOP_RIGHT_CU(from);
|
*LCU_GET_TOP_RIGHT_CU(to) = *LCU_GET_TOP_RIGHT_CU(from);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if(tree_type != UVG_CHROMA_T) {
|
||||||
|
uvg_pixels_blit(from->rec.y, to->rec.y, cu_loc->local_x, LCU_WIDTH, LCU_WIDTH, LCU_WIDTH);
|
||||||
|
}
|
||||||
|
if(tree_type != UVG_LUMA_T && from->ref.chroma_format != UVG_CSP_400) {
|
||||||
|
uvg_pixels_blit(from->rec.u, to->rec.u, cu_loc->local_x / 2, LCU_WIDTH_C, LCU_WIDTH_C, LCU_WIDTH_C);
|
||||||
|
uvg_pixels_blit(from->rec.v, to->rec.v, cu_loc->local_x / 2, LCU_WIDTH_C, LCU_WIDTH_C, LCU_WIDTH_C);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (cu_loc->local_y == 0) {
|
if (cu_loc->local_y == 0) {
|
||||||
to->top_ref = from->top_ref;
|
to->top_ref = from->top_ref;
|
||||||
*LCU_GET_TOP_RIGHT_CU(to) = *LCU_GET_TOP_RIGHT_CU(from);
|
*LCU_GET_TOP_RIGHT_CU(to) = *LCU_GET_TOP_RIGHT_CU(from);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (tree_type != UVG_CHROMA_T) {
|
||||||
|
uvg_pixels_blit(&from->rec.y[cu_loc->local_x], &to->rec.y[cu_loc->local_x],
|
||||||
|
LCU_WIDTH - cu_loc->local_x, cu_loc->local_y,
|
||||||
|
LCU_WIDTH, LCU_WIDTH);
|
||||||
|
}
|
||||||
|
if (tree_type != UVG_LUMA_T && from->ref.chroma_format != UVG_CSP_400) {
|
||||||
|
uvg_pixels_blit(&from->rec.u[cu_loc->local_x / 2], &to->rec.u[cu_loc->local_x / 2],
|
||||||
|
LCU_WIDTH_C - cu_loc->local_x / 2, cu_loc->local_y / 2,
|
||||||
|
LCU_WIDTH_C, LCU_WIDTH_C);
|
||||||
|
uvg_pixels_blit(&from->rec.v[cu_loc->local_x / 2], &to->rec.v[cu_loc->local_x / 2],
|
||||||
|
LCU_WIDTH_C - cu_loc->local_x / 2, cu_loc->local_y / 2,
|
||||||
|
LCU_WIDTH_C, LCU_WIDTH_C);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
to->ref.chroma_format = from->ref.chroma_format;
|
to->ref.chroma_format = from->ref.chroma_format;
|
||||||
to->rec.chroma_format = from->rec.chroma_format;
|
to->rec.chroma_format = from->rec.chroma_format;
|
||||||
|
@ -173,36 +198,19 @@ static INLINE void copy_cu_coeffs(const cu_loc_t *cu_loc, lcu_t *from, lcu_t *to
|
||||||
* Copy all non-reference CU data from next level to current level.
|
* Copy all non-reference CU data from next level to current level.
|
||||||
*/
|
*/
|
||||||
static void work_tree_copy_up(
|
static void work_tree_copy_up(
|
||||||
lcu_t *work_tree,
|
lcu_t *from,
|
||||||
|
lcu_t* to,
|
||||||
bool joint,
|
bool joint,
|
||||||
enum
|
enum
|
||||||
uvg_tree_type tree_type,
|
uvg_tree_type tree_type,
|
||||||
const cu_loc_t* const cu_loc,
|
|
||||||
const int depth)
|
|
||||||
{
|
|
||||||
copy_cu_info (&work_tree[depth + 1], &work_tree[depth], cu_loc, tree_type);
|
|
||||||
copy_cu_pixels(&work_tree[depth + 1], &work_tree[depth], cu_loc, tree_type);
|
|
||||||
copy_cu_coeffs(cu_loc, &work_tree[depth + 1], &work_tree[depth], joint, tree_type);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy all non-reference CU data from current level to all lower levels.
|
|
||||||
*/
|
|
||||||
static void work_tree_copy_down(
|
|
||||||
int depth,
|
|
||||||
lcu_t *work_tree,
|
|
||||||
enum uvg_tree_type
|
|
||||||
tree_type,
|
|
||||||
const cu_loc_t* const cu_loc)
|
const cu_loc_t* const cu_loc)
|
||||||
{
|
{
|
||||||
for (int i = depth + 1; i <= MAX_PU_DEPTH; i++) {
|
copy_cu_info (from, to, cu_loc, tree_type);
|
||||||
copy_cu_info (&work_tree[depth], &work_tree[i], cu_loc, tree_type);
|
copy_cu_pixels(from, to, cu_loc, tree_type);
|
||||||
copy_cu_pixels(&work_tree[depth], &work_tree[i], cu_loc, tree_type);
|
copy_cu_coeffs(cu_loc, from, to, joint, tree_type);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void lcu_fill_cu_info(lcu_t *lcu, int x_local, int y_local, int width, int height, const cu_info_t *cu)
|
static void lcu_fill_cu_info(lcu_t *lcu, int x_local, int y_local, int width, int height, const cu_info_t *cu)
|
||||||
{
|
{
|
||||||
// Set mode in every CU covered by part_mode in this depth.
|
// Set mode in every CU covered by part_mode in this depth.
|
||||||
|
@ -1425,7 +1433,7 @@ static double search_cu(
|
||||||
if (split_cost < cost) {
|
if (split_cost < cost) {
|
||||||
// Copy split modes to this depth.
|
// Copy split modes to this depth.
|
||||||
cost = split_cost;
|
cost = split_cost;
|
||||||
work_tree_copy_up(work_tree, state->encoder_control->cfg.jccr, tree_type, cu_loc, depth);
|
work_tree_copy_up(&work_tree[depth + 1], &work_tree[depth], state->encoder_control->cfg.jccr, tree_type, cu_loc);
|
||||||
#if UVG_DEBUG
|
#if UVG_DEBUG
|
||||||
//debug_split = 1;
|
//debug_split = 1;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1433,7 +1441,6 @@ static double search_cu(
|
||||||
// Copy this CU's mode all the way down for use in adjacent CUs mode
|
// Copy this CU's mode all the way down for use in adjacent CUs mode
|
||||||
// search.
|
// search.
|
||||||
memcpy(&state->search_cabac, &post_seach_cabac, sizeof(post_seach_cabac));
|
memcpy(&state->search_cabac, &post_seach_cabac, sizeof(post_seach_cabac));
|
||||||
work_tree_copy_down(depth, work_tree, tree_type, cu_loc);
|
|
||||||
downsample_cclm_rec(
|
downsample_cclm_rec(
|
||||||
state, x, y, cu_width / 2, cu_width / 2, lcu->rec.y, lcu->left_ref.y[64]
|
state, x, y, cu_width / 2, cu_width / 2, lcu->rec.y, lcu->left_ref.y[64]
|
||||||
);
|
);
|
||||||
|
@ -1453,7 +1460,6 @@ static double search_cu(
|
||||||
} else if (cur_cu->log2_height + cur_cu->log2_width > 4) {
|
} else if (cur_cu->log2_height + cur_cu->log2_width > 4) {
|
||||||
// Need to copy modes down since the lower level of the work tree is used
|
// Need to copy modes down since the lower level of the work tree is used
|
||||||
// when searching SMP and AMP blocks.
|
// when searching SMP and AMP blocks.
|
||||||
work_tree_copy_down(depth, work_tree, tree_type, cu_loc);
|
|
||||||
if(tree_type != UVG_CHROMA_T) {
|
if(tree_type != UVG_CHROMA_T) {
|
||||||
downsample_cclm_rec(
|
downsample_cclm_rec(
|
||||||
state, x, y, cu_width / 2, cu_width / 2, lcu->rec.y, lcu->left_ref.y[64]
|
state, x, y, cu_width / 2, cu_width / 2, lcu->rec.y, lcu->left_ref.y[64]
|
||||||
|
|
Loading…
Reference in a new issue