[NORMATIVE] Add tier signaling BUG=aomedia:1861 Change-Id: I8e376fb39f2a6c3abe82865e3b02366dc087e5c6
diff --git a/av1/av1_dx_iface.c b/av1/av1_dx_iface.c index e361eb5..98ecf89 100644 --- a/av1/av1_dx_iface.c +++ b/av1/av1_dx_iface.c
@@ -168,7 +168,8 @@ int operating_point_idc; operating_point_idc = aom_rb_read_literal(rb, OP_POINTS_IDC_BITS); if (i == 0) operating_point_idc0 = operating_point_idc; - aom_rb_read_literal(rb, LEVEL_BITS); // level + int seq_level_idx = aom_rb_read_literal(rb, LEVEL_BITS); // level + if (seq_level_idx > 7) aom_rb_read_bit(rb); // tier #if !CONFIG_BUFFER_MODEL if (aom_rb_read_literal(rb, 1)) { // decoder_rate_model_param_present_flag
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h index d08a2a1..fa8620f 100644 --- a/av1/common/onyxc_int.h +++ b/av1/common/onyxc_int.h
@@ -232,6 +232,7 @@ int enable_restoration; // To turn on/off loop restoration int operating_point_idc[MAX_NUM_OPERATING_POINTS]; BitstreamLevel level[MAX_NUM_OPERATING_POINTS]; + int tier[MAX_NUM_OPERATING_POINTS]; int decoder_rate_model_param_present_flag[MAX_NUM_OPERATING_POINTS]; #if !CONFIG_BUFFER_MODEL int decode_to_display_rate_ratio[MAX_NUM_OPERATING_POINTS];
diff --git a/av1/decoder/obu.c b/av1/decoder/obu.c index 4ffc859..b40ddfb 100644 --- a/av1/decoder/obu.c +++ b/av1/decoder/obu.c
@@ -170,6 +170,10 @@ aom_rb_read_literal(rb, OP_POINTS_IDC_BITS); if (!read_bitstream_level(&seq_params->level[i], rb)) return AOM_CODEC_UNSUP_BITSTREAM; + if (seq_params->level[i].major > 3) + seq_params->tier[i] = aom_rb_read_bit(rb); + else + seq_params->tier[i] = 0; #if !CONFIG_BUFFER_MODEL seq_params->decoder_rate_model_param_present_flag[i] = aom_rb_read_literal(rb, 1);
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c index 4deb4ce..f4f65d7 100644 --- a/av1/encoder/bitstream.c +++ b/av1/encoder/bitstream.c
@@ -3584,6 +3584,8 @@ aom_wb_write_literal(&wb, cm->seq_params.operating_point_idc[i], OP_POINTS_IDC_BITS); write_bitstream_level(cm->seq_params.level[i], &wb); + if (cm->seq_params.level[i].major > 3) + aom_wb_write_bit(&wb, cm->seq_params.tier[i]); #if !CONFIG_BUFFER_MODEL aom_wb_write_literal(&wb, 0, 1); // decoder_rate_model_present_flag[i] #endif
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c index 304091c..d22db4d 100644 --- a/av1/encoder/encoder.c +++ b/av1/encoder/encoder.c
@@ -908,8 +908,8 @@ height <= lvl_height * lvl_dim_mult; } -static void set_bitstream_level(SequenceHeader *seq, - const AV1EncoderConfig *oxcf) { +static void set_bitstream_level_tier(SequenceHeader *seq, + const AV1EncoderConfig *oxcf) { // TODO(any): This is a placeholder function that only addresses dimensions // and max display sample rates. // Need to add checks for max bit rate, max decoded luma sample rate, header @@ -979,6 +979,7 @@ } for (int i = 0; i < MAX_NUM_OPERATING_POINTS; ++i) { seq->level[i] = bl; + seq->tier[i] = 0; // setting main tier by default } } @@ -1013,7 +1014,7 @@ seq->enable_intra_edge_filter = 1; seq->enable_filter_intra = 1; - set_bitstream_level(seq, oxcf); + set_bitstream_level_tier(seq, oxcf); } static void init_config(struct AV1_COMP *cpi, AV1EncoderConfig *oxcf) {