[bipred] Fix reference list writing when gop==0 and bipred are used, add to CI also

This commit is contained in:
Marko Viitanen 2021-11-26 17:04:30 +02:00
parent e662a2747b
commit 36d302ba38
2 changed files with 68 additions and 60 deletions

View file

@ -1022,7 +1022,6 @@ static void encoder_state_write_picture_timing_sei_message(encoder_state_t * con
} }
// ToDo: Enable tiles/wpp
static void encoder_state_entry_points_explore(const encoder_state_t * const state, int * const r_count, int * const r_max_length) { static void encoder_state_entry_points_explore(const encoder_state_t * const state, int * const r_count, int * const r_max_length) {
int i; int i;
for (i = 0; state->children[i].encoder_control; ++i) { for (i = 0; state->children[i].encoder_control; ++i) {
@ -1198,6 +1197,11 @@ static void kvz_encoder_state_write_bitstream_ref_pic_list(
int last_poc = 0; int last_poc = 0;
int poc_shift = 0; int poc_shift = 0;
// We don't need to signal L1 list if it's copied from L0
bool copy_rpl1_from_rpl0 = (encoder->cfg.gop_len == 0 && encoder->cfg.bipred);
for (int list = 0; list < 1 + copy_rpl1_from_rpl0; list++) {
WRITE_UE(stream, ref_negative, "num_ref_entries[0]"); WRITE_UE(stream, ref_negative, "num_ref_entries[0]");
for (j = 0; j < ref_negative; j++) { for (j = 0; j < ref_negative; j++) {
@ -1227,12 +1231,15 @@ static void kvz_encoder_state_write_bitstream_ref_pic_list(
} }
*/ */
WRITE_UE(stream, delta_poc ? delta_poc - last_poc - 1 : 0, "abs_delta_poc_st"); WRITE_UE(stream, delta_poc ? delta_poc - last_poc - 1 : 0, "abs_delta_poc_st");
if (delta_poc+1) WRITE_U(stream, 1, 1, "strp_entry_sign_flag"); if (delta_poc + 1) WRITE_U(stream, 1, 1, "strp_entry_sign_flag");
last_poc = delta_poc; last_poc = delta_poc;
} }
last_poc = 0; last_poc = 0;
poc_shift = 0; poc_shift = 0;
}
if (!copy_rpl1_from_rpl0) {
WRITE_UE(stream, ref_positive, "num_ref_entries[1]"); WRITE_UE(stream, ref_positive, "num_ref_entries[1]");
for (j = 0; j < ref_positive; j++) { for (j = 0; j < ref_positive; j++) {
int8_t delta_poc = 0; int8_t delta_poc = 0;
@ -1262,9 +1269,10 @@ static void kvz_encoder_state_write_bitstream_ref_pic_list(
*/ */
WRITE_UE(stream, delta_poc ? delta_poc - last_poc - 1 : 0, "abs_delta_poc_st"); WRITE_UE(stream, delta_poc ? delta_poc - last_poc - 1 : 0, "abs_delta_poc_st");
if (delta_poc+1) WRITE_U(stream, 0, 1, "strp_entry_sign_flag"); if (delta_poc + 1) WRITE_U(stream, 0, 1, "strp_entry_sign_flag");
last_poc = delta_poc; last_poc = delta_poc;
} }
}
if (ref_negative > 1 || ref_positive > 1) { if (ref_negative > 1 || ref_positive > 1) {
WRITE_U(stream, 1, 1, "sh_num_ref_idx_active_override_flag"); WRITE_U(stream, 1, 1, "sh_num_ref_idx_active_override_flag");

View file

@ -8,6 +8,6 @@ set -eu
common_args='264x128 10 yuv420p -p0 -r1 --threads=2 --wpp --owf=1 --rd=0 --pu-depth-inter 0-3 --no-bipred --no-tmvp --no-deblock --gop=0' common_args='264x128 10 yuv420p -p0 -r1 --threads=2 --wpp --owf=1 --rd=0 --pu-depth-inter 0-3 --no-bipred --no-tmvp --no-deblock --gop=0'
valgrind_test $common_args --no-rdoq --no-deblock --no-sao --no-signhide --subme=1 --pu-depth-intra=2-3 valgrind_test $common_args --no-rdoq --no-deblock --no-sao --no-signhide --subme=1 --pu-depth-intra=2-3
valgrind_test $common_args --no-rdoq --no-signhide --subme=0 valgrind_test $common_args --no-rdoq --no-signhide --subme=0 --bipred
valgrind_test $common_args --rdoq --no-deblock --no-sao --subme=0 valgrind_test $common_args --rdoq --no-deblock --no-sao --subme=0
valgrind_test $common_args --gop=8 --subme=4 --bipred --tmvp valgrind_test $common_args --gop=8 --subme=4 --bipred --tmvp