Merge "Fix SAD validation condition"

This commit is contained in:
Nathalie Le Clair
2022-06-30 15:23:01 +00:00
committed by Android (Google) Code Review
3 changed files with 66 additions and 57 deletions

View File

@@ -337,6 +337,8 @@ final class Constants {
static final int AUDIO_CODEC_WMAPRO = 0xE; // Support WMA-Pro
static final int AUDIO_CODEC_MAX = 0xF;
static final int AUDIO_FORMAT_MASK = 0b0111_1000;
@StringDef({
AUDIO_DEVICE_ARC_IN,
AUDIO_DEVICE_SPDIF,

View File

@@ -200,8 +200,14 @@ final class RequestSadAction extends HdmiCecFeatureAction {
}
private boolean isValidCodec(byte codec) {
return Constants.AUDIO_CODEC_NONE < (codec & 0xFF)
&& (codec & 0xFF) <= Constants.AUDIO_CODEC_MAX;
// Bit 7 needs to be 0.
if ((codec & (1 << 7)) != 0) {
return false;
}
// Bit [6, 3] is the audio format code.
int audioFormatCode = (codec & Constants.AUDIO_FORMAT_MASK) >> 3;
return Constants.AUDIO_CODEC_NONE < audioFormatCode
&& audioFormatCode <= Constants.AUDIO_CODEC_MAX;
}
private void updateResult(byte[] sad) {

View File

@@ -295,10 +295,10 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_1.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_1 = new byte[]{
0x01, 0x18, 0x4A,
0x02, 0x64, 0x5A,
0x03, 0x4B, 0x00,
0x04, 0x20, 0x0A};
0x0F, 0x18, 0x4A,
0x17, 0x64, 0x5A,
0x1F, 0x4B, 0x00,
0x27, 0x20, 0x0A};
HdmiCecMessage response1 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_1);
assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
@@ -310,10 +310,10 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_2.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_2 = new byte[]{
0x05, 0x18, 0x4A,
0x06, 0x64, 0x5A,
0x07, 0x4B, 0x00,
0x08, 0x20, 0x0A};
0x2F, 0x18, 0x4A,
0x37, 0x64, 0x5A,
0x3F, 0x4B, 0x00,
0x47, 0x20, 0x0A};
HdmiCecMessage response2 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_2);
assertThat(mNativeWrapper.getResultMessages()).contains(expected2);
@@ -325,10 +325,10 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_3.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_3 = new byte[]{
0x09, 0x18, 0x4A,
0x0A, 0x64, 0x5A,
0x0B, 0x4B, 0x00,
0x0C, 0x20, 0x0A};
0x4F, 0x18, 0x4A,
0x57, 0x64, 0x5A,
0x5F, 0x4B, 0x00,
0x67, 0x20, 0x0A};
HdmiCecMessage response3 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_3);
assertThat(mNativeWrapper.getResultMessages()).contains(expected3);
@@ -340,9 +340,9 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_4.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_4 = new byte[]{
0x0D, 0x18, 0x4A,
0x0E, 0x64, 0x5A,
0x0F, 0x4B, 0x00};
0x6F, 0x18, 0x4A,
0x77, 0x64, 0x5A,
0x7F, 0x4B, 0x00};
HdmiCecMessage response4 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_4);
assertThat(mNativeWrapper.getResultMessages()).contains(expected4);
@@ -371,9 +371,9 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_1.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_1 = new byte[]{
0x01, 0x18, 0x4A,
0x03, 0x4B, 0x00,
0x04, 0x20, 0x0A};
0x0F, 0x18, 0x4A,
0x1F, 0x4B, 0x00,
0x27, 0x20, 0x0A};
HdmiCecMessage response1 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_1);
assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
@@ -385,7 +385,7 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_2.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_2 = new byte[]{
0x08, 0x20, 0x0A};
0x2F, 0x20, 0x0A};
HdmiCecMessage response2 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_2);
assertThat(mNativeWrapper.getResultMessages()).contains(expected2);
@@ -397,10 +397,10 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_3.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_3 = new byte[]{
0x09, 0x18, 0x4A,
0x0A, 0x64, 0x5A,
0x0B, 0x4B, 0x00,
0x0C, 0x20, 0x0A};
0x4F, 0x18, 0x4A,
0x57, 0x64, 0x5A,
0x5F, 0x4B, 0x00,
0x67, 0x20, 0x0A};
HdmiCecMessage response3 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_3);
assertThat(mNativeWrapper.getResultMessages()).contains(expected3);
@@ -412,7 +412,7 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_4.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_4 = new byte[]{
0x0F, 0x4B, 0x00};
0x7F, 0x4B, 0x00};
HdmiCecMessage response4 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_4);
assertThat(mNativeWrapper.getResultMessages()).contains(expected4);
@@ -440,11 +440,12 @@ public class RequestSadActionTest {
HdmiCecMessage expected1 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_1.stream().mapToInt(i -> i).toArray());
// Negative values require explicit casting
byte[] sadsToRespond_1 = new byte[]{
0x20, 0x18, 0x4A,
0x21, 0x64, 0x5A,
0x22, 0x4B, 0x00,
0x23, 0x20, 0x0A};
(byte) 0x80, 0x18, 0x4A,
(byte) 0x82, 0x64, 0x5A,
(byte) 0x87, 0x4B, 0x00,
(byte) 0x8F, 0x20, 0x0A};
HdmiCecMessage response1 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_1);
assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
@@ -456,10 +457,10 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_2.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_2 = new byte[]{
0x24, 0x18, 0x4A,
0x25, 0x64, 0x5A,
0x26, 0x4B, 0x00,
0x27, 0x20, 0x0A};
(byte) 0x92, 0x18, 0x4A,
(byte) 0x98, 0x64, 0x5A,
(byte) 0xA1, 0x4B, 0x00,
(byte) 0xA4, 0x20, 0x0A};
HdmiCecMessage response2 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_2);
assertThat(mNativeWrapper.getResultMessages()).contains(expected2);
@@ -471,10 +472,10 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_3.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_3 = new byte[]{
0x28, 0x18, 0x4A,
0x29, 0x64, 0x5A,
0x2A, 0x4B, 0x00,
0x2B, 0x20, 0x0A};
(byte) 0xB3, 0x18, 0x4A,
(byte) 0xBA, 0x64, 0x5A,
(byte) 0xCB, 0x4B, 0x00,
(byte) 0xCF, 0x20, 0x0A};
HdmiCecMessage response3 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_3);
assertThat(mNativeWrapper.getResultMessages()).contains(expected3);
@@ -486,9 +487,9 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_4.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_4 = new byte[]{
0x2C, 0x18, 0x4A,
0x2D, 0x64, 0x5A,
0x2E, 0x4B, 0x00};
(byte) 0xF0, 0x18, 0x4A,
(byte) 0xF1, 0x64, 0x5A,
(byte) 0xF3, 0x4B, 0x00};
HdmiCecMessage response4 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_4);
assertThat(mNativeWrapper.getResultMessages()).contains(expected4);
@@ -510,10 +511,10 @@ public class RequestSadActionTest {
mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_1.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_1 = new byte[]{
0x01, 0x18,
0x02, 0x64, 0x5A,
0x03, 0x4B, 0x00,
0x04, 0x20, 0x0A};
0x0F, 0x18,
0x17, 0x64, 0x5A,
0x1F, 0x4B, 0x00,
0x27, 0x20, 0x0A};
HdmiCecMessage response1 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_1);
assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
@@ -580,10 +581,10 @@ public class RequestSadActionTest {
new int[]{Constants.AUDIO_CODEC_LPCM, Constants.AUDIO_CODEC_DD,
Constants.AUDIO_CODEC_MP3, Constants.AUDIO_CODEC_MPEG2});
byte[] sadsToRespond_1 = new byte[]{
0x01, 0x18, 0x4A,
0x02, 0x64, 0x5A,
0x04, 0x20, 0x0A,
0x05, 0x18, 0x4A};
0x0F, 0x18, 0x4A,
0x17, 0x64, 0x5A,
0x27, 0x20, 0x0A,
0x2F, 0x18, 0x4A};
HdmiCecMessage response1 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_1);
assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
@@ -596,10 +597,10 @@ public class RequestSadActionTest {
new int[]{Constants.AUDIO_CODEC_AAC, Constants.AUDIO_CODEC_DTS,
Constants.AUDIO_CODEC_ATRAC, Constants.AUDIO_CODEC_DDP});
byte[] sadsToRespond_2 = new byte[]{
0x06, 0x64, 0x5A,
0x07, 0x4B, 0x00,
0x08, 0x20, 0x0A,
0x09, 0x18, 0x4A};
0x37, 0x64, 0x5A,
0x3F, 0x4B, 0x00,
0x47, 0x20, 0x0A,
0x4F, 0x18, 0x4A};
HdmiCecMessage response2 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_2);
assertThat(mNativeWrapper.getResultMessages()).contains(expected2);
@@ -612,10 +613,10 @@ public class RequestSadActionTest {
new int[]{Constants.AUDIO_CODEC_DTSHD, Constants.AUDIO_CODEC_TRUEHD,
Constants.AUDIO_CODEC_DST, Constants.AUDIO_CODEC_MAX});
byte[] sadsToRespond_3 = new byte[]{
0x0B, 0x4B, 0x00,
0x0C, 0x20, 0x0A,
0x0D, 0x18, 0x4A,
0x0F, 0x4B, 0x00};
0x5F, 0x4B, 0x00,
0x67, 0x20, 0x0A,
0x6F, 0x18, 0x4A,
0x7F, 0x4B, 0x00};
HdmiCecMessage response3 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_3);
assertThat(mNativeWrapper.getResultMessages()).contains(expected3);