mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-27 19:24:06 +00:00
Fixed inter mv_ref propagation and merge candidate mv_ref matching
This commit is contained in:
parent
e6212110a1
commit
cda60897e1
|
@ -2702,7 +2702,7 @@ void encode_block_residual(encoder_control *encoder,
|
|||
|
||||
} else {
|
||||
int16_t mv_cand[2][2];
|
||||
|
||||
|
||||
// Search for merge mode candidate
|
||||
int16_t merge_cand[MRG_MAX_NUM_CANDS][3];
|
||||
// Get list of candidates
|
||||
|
@ -2711,13 +2711,12 @@ void encode_block_residual(encoder_control *encoder,
|
|||
for(cur_cu->merge_idx = 0; cur_cu->merge_idx < num_cand; cur_cu->merge_idx++) {
|
||||
if(merge_cand[cur_cu->merge_idx][0] == cur_cu->inter.mv[0] &&
|
||||
merge_cand[cur_cu->merge_idx][1] == cur_cu->inter.mv[1] &&
|
||||
merge_cand[cur_cu->merge_idx][3] == cur_cu->inter.mv[3]) {
|
||||
merge_cand[cur_cu->merge_idx][3] == cur_cu->inter.mv_ref) {
|
||||
cur_cu->merged = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Get MV candidates
|
||||
inter_get_mv_cand(encoder, x_ctb, y_ctb, depth, mv_cand, cur_cu);
|
||||
|
||||
|
|
10
src/inter.c
10
src/inter.c
|
@ -58,6 +58,7 @@ void inter_set_block(picture* pic, uint32_t x_cu, uint32_t y_cu, uint8_t depth,
|
|||
pic->cu_array[MAX_DEPTH][cu_pos + x].inter.mv[0] = cur_cu->inter.mv[0];
|
||||
pic->cu_array[MAX_DEPTH][cu_pos + x].inter.mv[1] = cur_cu->inter.mv[1];
|
||||
pic->cu_array[MAX_DEPTH][cu_pos + x].inter.mv_dir = cur_cu->inter.mv_dir;
|
||||
pic->cu_array[MAX_DEPTH][cu_pos + x].inter.mv_ref = cur_cu->inter.mv_ref;
|
||||
pic->cu_array[MAX_DEPTH][cu_pos + x].tr_depth = tr_depth;
|
||||
}
|
||||
}
|
||||
|
@ -358,7 +359,7 @@ void inter_get_mv_cand(encoder_control *encoder, int32_t x_cu, int32_t y_cu, int
|
|||
} else if(b2 && b2->type == CU_INTER && b2->inter.mv_ref == cur_cu->inter.mv_ref) {
|
||||
mv_cand[candidates][0] = b2->inter.mv[0];
|
||||
mv_cand[candidates][1] = b2->inter.mv[1];
|
||||
b_candidates++;
|
||||
b_candidates++;
|
||||
}
|
||||
candidates += b_candidates;
|
||||
|
||||
|
@ -372,14 +373,13 @@ void inter_get_mv_cand(encoder_control *encoder, int32_t x_cu, int32_t y_cu, int
|
|||
} else if (b1 && b1->type == CU_INTER) {
|
||||
mv_cand[candidates][0] = b1->inter.mv[0];
|
||||
mv_cand[candidates][1] = b1->inter.mv[1];
|
||||
APPLY_MV_SCALING(b1, candidates);
|
||||
APPLY_MV_SCALING(b1, candidates);
|
||||
candidates++;
|
||||
|
||||
} else if(b2 && b2->type == CU_INTER) {
|
||||
mv_cand[candidates][0] = b2->inter.mv[0];
|
||||
mv_cand[candidates][1] = b2->inter.mv[1];
|
||||
APPLY_MV_SCALING(b2, candidates);
|
||||
candidates++;
|
||||
APPLY_MV_SCALING(b2, candidates);
|
||||
candidates++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue