Disallow 4:4:0 subsampling BUG=aomedia:1233 Change-Id: Ib740ee063b87003cf8c6cbd8f2ae4b917892e41c
diff --git a/av1/av1_dx_iface.c b/av1/av1_dx_iface.c index dbeaa7c..8fad588 100644 --- a/av1/av1_dx_iface.c +++ b/av1/av1_dx_iface.c
@@ -240,7 +240,10 @@ } else if (profile == PROFILE_2) { if (bit_depth == AOM_BITS_12) { subsampling_x = aom_rb_read_bit(rb); - subsampling_y = aom_rb_read_bit(rb); + if (subsampling_x == 0) + subsampling_y = 0; + else + subsampling_y = aom_rb_read_bit(rb); } else { subsampling_x = 1; subsampling_y = 0;
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c index 159b9d6..5ad2e52 100644 --- a/av1/decoder/decodeframe.c +++ b/av1/decoder/decodeframe.c
@@ -2237,7 +2237,10 @@ } else if (cm->profile == PROFILE_2) { if (cm->bit_depth == AOM_BITS_12) { cm->subsampling_x = aom_rb_read_bit(rb); - cm->subsampling_y = aom_rb_read_bit(rb); + if (cm->subsampling_x == 0) + cm->subsampling_y = 0; // 444 + else + cm->subsampling_y = aom_rb_read_bit(rb); // 422 or 420 } else { // 422 cm->subsampling_x = 1;
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c index 48cc8fa..a939e60 100644 --- a/av1/encoder/bitstream.c +++ b/av1/encoder/bitstream.c
@@ -3303,7 +3303,12 @@ if (cm->bit_depth == AOM_BITS_12) { // 420, 444 or 422 aom_wb_write_bit(wb, cm->subsampling_x); - aom_wb_write_bit(wb, cm->subsampling_y); + if (cm->subsampling_x == 0) { + assert(cm->subsampling_y == 0 && + "4:4:0 subsampling not allowed in AV1"); + } else { + aom_wb_write_bit(wb, cm->subsampling_y); + } } else { // 422 only assert(cm->subsampling_x == 1 && cm->subsampling_y == 0);