Merge "HDMICEC: Add utility to invoke OTP on device"
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/voicemail/OWNERS b/apps/CtsVerifier/src/com/android/cts/verifier/voicemail/OWNERS
new file mode 100644
index 0000000..541e891
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/voicemail/OWNERS
@@ -0,0 +1,2 @@
+# Bug component: 31245
+twyen@google.com
\ No newline at end of file
diff --git a/hostsidetests/deviceidle/src/com/android/cts/deviceidle/DeviceIdleWhitelistTest.java b/hostsidetests/deviceidle/src/com/android/cts/deviceidle/DeviceIdleWhitelistTest.java
index bdba196..def9d75 100644
--- a/hostsidetests/deviceidle/src/com/android/cts/deviceidle/DeviceIdleWhitelistTest.java
+++ b/hostsidetests/deviceidle/src/com/android/cts/deviceidle/DeviceIdleWhitelistTest.java
@@ -91,7 +91,9 @@
final List<String> packages = new ArrayList<>();
for (String line : output.split("\n")) {
final int i = line.indexOf(',');
- packages.add(line.substring(0, i));
+ if (i > 0) {
+ packages.add(line.substring(0, i));
+ }
}
return packages;
}
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecStartupTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecStartupTest.java
index 06b62f9..4aad656 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecStartupTest.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecStartupTest.java
@@ -34,6 +34,7 @@
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import javax.annotation.Nullable;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.rules.RuleChain;
import org.junit.runner.RunWith;
@@ -74,6 +75,7 @@
* Tests that the device sends all the messages that should be sent on startup. It also ensures
* that only the device only sends messages which are allowed by the spec.
*/
+ @Ignore("b/149519706")
@Test
public void cectVerifyStartupMessages() throws Exception {
ITestDevice device = getDevice();
diff --git a/tests/JobScheduler/JobTestApp/src/android/jobscheduler/cts/jobtestapp/TestActivity.java b/tests/JobScheduler/JobTestApp/src/android/jobscheduler/cts/jobtestapp/TestActivity.java
index 0368f05..1bb500da 100644
--- a/tests/JobScheduler/JobTestApp/src/android/jobscheduler/cts/jobtestapp/TestActivity.java
+++ b/tests/JobScheduler/JobTestApp/src/android/jobscheduler/cts/jobtestapp/TestActivity.java
@@ -27,7 +27,7 @@
import android.util.Log;
/**
- * Just a dummy activity to keep the test app process in the foreground state when desired.
+ * Just a no-op activity to keep the test app process in the foreground state when desired.
*/
public class TestActivity extends Activity {
private static final String TAG = TestActivity.class.getSimpleName();
diff --git a/tests/JobSchedulerSharedUid/JobSharedUidTestApp/src/android/jobscheduler/cts/jobtestapp/TestActivity.java b/tests/JobSchedulerSharedUid/JobSharedUidTestApp/src/android/jobscheduler/cts/jobtestapp/TestActivity.java
index 77107c2..595f6a6 100644
--- a/tests/JobSchedulerSharedUid/JobSharedUidTestApp/src/android/jobscheduler/cts/jobtestapp/TestActivity.java
+++ b/tests/JobSchedulerSharedUid/JobSharedUidTestApp/src/android/jobscheduler/cts/jobtestapp/TestActivity.java
@@ -27,7 +27,7 @@
import android.util.Log;
/**
- * Just a dummy activity to keep the test app process in the foreground state when desired.
+ * Just a no-op activity to keep the test app process in the foreground state when desired.
*/
public class TestActivity extends Activity {
private static final String TAG = TestActivity.class.getSimpleName();
diff --git a/tests/contentcaptureservice/src/android/contentcaptureservice/cts/unit/ViewNodeTest.java b/tests/contentcaptureservice/src/android/contentcaptureservice/cts/unit/ViewNodeTest.java
index 5ece59f..4a78e61 100644
--- a/tests/contentcaptureservice/src/android/contentcaptureservice/cts/unit/ViewNodeTest.java
+++ b/tests/contentcaptureservice/src/android/contentcaptureservice/cts/unit/ViewNodeTest.java
@@ -133,7 +133,7 @@
ViewStructureImpl structure = new ViewStructureImpl(view);
ViewNode node = structure.getNode();
- assertThat(node.getAutofillId()).isEqualTo(initialId); // sanity check
+ assertThat(node.getAutofillId()).isEqualTo(initialId); // confidence check
assertThrows(NullPointerException.class, () -> structure.setAutofillId(null));
assertThat(node.getAutofillId()).isEqualTo(initialId); // invariant
@@ -156,7 +156,7 @@
public void testValidProperties_throughParcel() {
ViewStructureImpl structure = newSimpleStructure();
final ViewNode node = structure.getNode();
- assertSimpleNode(node); // sanity check
+ assertSimpleNode(node); // confidence check
final ViewNode clone = cloneThroughParcel(node);
assertSimpleNode(clone);
@@ -173,7 +173,7 @@
public void testComplexText_throughParcel() {
ViewStructureImpl structure = newStructureWithComplexText();
final ViewNode node = structure.getNode();
- assertNodeWithComplexText(node); // sanity check
+ assertNodeWithComplexText(node); // confidence check
ViewNode clone = cloneThroughParcel(node);
assertNodeWithComplexText(clone);
@@ -401,7 +401,7 @@
try {
// Write to parcel
- parcel.setDataPosition(0); // Sanity / paranoid check
+ parcel.setDataPosition(0); // Confidence check
ViewNode.writeToParcel(parcel, node, 0);
// Read from parcel
diff --git a/tests/inputmethod/src/android/view/inputmethod/cts/BaseInputConnectionTest.java b/tests/inputmethod/src/android/view/inputmethod/cts/BaseInputConnectionTest.java
index 8d9890d..9530c2d 100644
--- a/tests/inputmethod/src/android/view/inputmethod/cts/BaseInputConnectionTest.java
+++ b/tests/inputmethod/src/android/view/inputmethod/cts/BaseInputConnectionTest.java
@@ -117,7 +117,7 @@
assertNotNull(text);
assertEquals(0, text.length());
- // Test commitText, not dummy mode
+ // Test commitText, not default fake mode
CharSequence str = "TestCommit ";
Editable inputText = Editable.Factory.getInstance().newEditable(str);
connection.commitText(inputText, inputText.length());
@@ -160,7 +160,7 @@
Editable inputText = Editable.Factory.getInstance().newEditable(str);
connection.commitText(inputText, inputText.length());
final Editable text = connection.getEditable();
- // Test finishComposingText, not dummy mode
+ // Test finishComposingText, not default fake mode
BaseInputConnection.setComposingSpans(text);
assertTrue(BaseInputConnection.getComposingSpanStart(text) > -1);
assertTrue(BaseInputConnection.getComposingSpanEnd(text) > -1);
diff --git a/tests/media/AndroidTest.xml b/tests/media/AndroidTest.xml
index a618ac0..5ff8efb 100644
--- a/tests/media/AndroidTest.xml
+++ b/tests/media/AndroidTest.xml
@@ -25,7 +25,7 @@
</target_preparer>
<target_preparer class="com.android.compatibility.common.tradefed.targetprep.MediaPreparer">
<option name="push-all" value="true" />
- <option name="media-folder-name" value="CtsMediaV2TestCases-1.2" />
+ <option name="media-folder-name" value="CtsMediaV2TestCases-1.3" />
<option name="dynamic-config-module" value="CtsMediaV2TestCases" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
diff --git a/tests/media/DynamicConfig.xml b/tests/media/DynamicConfig.xml
index 384d3d7..3f1e626 100644
--- a/tests/media/DynamicConfig.xml
+++ b/tests/media/DynamicConfig.xml
@@ -1,6 +1,6 @@
<dynamicConfig>
<entry key="media_files_url">
- <value>https://storage.googleapis.com/android_media/cts/tests/media/CtsMediaV2TestCases-1.2.zip</value>
+ <value>https://storage.googleapis.com/android_media/cts/tests/media/CtsMediaV2TestCases-1.3.zip</value>
</entry>
</dynamicConfig>
diff --git a/tests/media/src/android/mediav2/cts/CodecDecoderExtTest.java b/tests/media/src/android/mediav2/cts/CodecDecoderExtTest.java
index 51a83ef..0f7fe55 100644
--- a/tests/media/src/android/mediav2/cts/CodecDecoderExtTest.java
+++ b/tests/media/src/android/mediav2/cts/CodecDecoderExtTest.java
@@ -49,6 +49,9 @@
@Parameterized.Parameters(name = "{index}({0})")
public static Collection<Object[]> input() {
+ final boolean isEncoder = false;
+ final boolean needAudio = false;
+ final boolean needVideo = true;
final List<Object[]> exhaustiveArgsList = Arrays.asList(new Object[][]{
{MediaFormat.MIMETYPE_VIDEO_VP9,
//show and no-show frames are sent as separate inputs
@@ -66,19 +69,7 @@
//show and no-show frames are sent as one input
"bbb_512x288_30fps_1mbps_mpeg2_interlaced_nob_2fields.mp4"},
});
-
- Set<String> list = new HashSet<>();
- if (isHandheld() || isTv() || isAutomotive()) {
- // sec 2.2.2, 2.3.2, 2.5.2
- list.add(MediaFormat.MIMETYPE_VIDEO_VP9);
- }
- if (isTv()) {
- // sec 2.3.2
- list.add(MediaFormat.MIMETYPE_VIDEO_MPEG2);
- }
- ArrayList<String> cddRequiredMimeList = new ArrayList<>(list);
-
- return prepareParamList(cddRequiredMimeList, exhaustiveArgsList, false);
+ return prepareParamList(exhaustiveArgsList, isEncoder, needAudio, needVideo, false);
}
/**
diff --git a/tests/media/src/android/mediav2/cts/CodecDecoderSurfaceTest.java b/tests/media/src/android/mediav2/cts/CodecDecoderSurfaceTest.java
index 096b5c1..c0aeaf4 100644
--- a/tests/media/src/android/mediav2/cts/CodecDecoderSurfaceTest.java
+++ b/tests/media/src/android/mediav2/cts/CodecDecoderSurfaceTest.java
@@ -38,9 +38,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -128,25 +126,9 @@
@Parameterized.Parameters(name = "{index}({0})")
public static Collection<Object[]> input() {
- Set<String> list = new HashSet<>();
- if (isHandheld() || isTv() || isAutomotive()) {
- // sec 2.2.2, 2.3.2, 2.5.2
- list.add(MediaFormat.MIMETYPE_VIDEO_AVC);
- list.add(MediaFormat.MIMETYPE_VIDEO_MPEG4);
- list.add(MediaFormat.MIMETYPE_VIDEO_H263);
- list.add(MediaFormat.MIMETYPE_VIDEO_VP8);
- list.add(MediaFormat.MIMETYPE_VIDEO_VP9);
- }
- if (isHandheld()) {
- // sec 2.2.2
- list.add(MediaFormat.MIMETYPE_VIDEO_HEVC);
- }
- if (isTv()) {
- // sec 2.3.2
- list.add(MediaFormat.MIMETYPE_VIDEO_HEVC);
- list.add(MediaFormat.MIMETYPE_VIDEO_MPEG2);
- }
- ArrayList<String> cddRequiredMimeList = new ArrayList<>(list);
+ final boolean isEncoder = false;
+ final boolean needAudio = false;
+ final boolean needVideo = true;
final List<Object[]> exhaustiveArgsList = Arrays.asList(new Object[][]{
{MediaFormat.MIMETYPE_VIDEO_MPEG2, "bbb_340x280_768kbps_30fps_mpeg2.mp4",
"bbb_520x390_1mbps_30fps_mpeg2.mp4"},
@@ -180,7 +162,7 @@
{MediaFormat.MIMETYPE_VIDEO_AV1, "bbb_340x280_768kbps_30fps_av1.mp4",
"bbb_520x390_1mbps_30fps_av1.mp4"},
});
- return prepareParamList(cddRequiredMimeList, exhaustiveArgsList, false);
+ return prepareParamList(exhaustiveArgsList, isEncoder, needAudio, needVideo, true);
}
/**
diff --git a/tests/media/src/android/mediav2/cts/CodecDecoderTest.java b/tests/media/src/android/mediav2/cts/CodecDecoderTest.java
index 30ddd29..81216ec 100644
--- a/tests/media/src/android/mediav2/cts/CodecDecoderTest.java
+++ b/tests/media/src/android/mediav2/cts/CodecDecoderTest.java
@@ -41,9 +41,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -125,37 +123,9 @@
@Parameterized.Parameters(name = "{index}({0})")
public static Collection<Object[]> input() {
- Set<String> list = new HashSet<>();
- if (hasAudioOutput()) {
- // sec 5.1.2
- list.add(MediaFormat.MIMETYPE_AUDIO_AAC);
- list.add(MediaFormat.MIMETYPE_AUDIO_FLAC);
- list.add(MediaFormat.MIMETYPE_AUDIO_MPEG);
- list.add(MediaFormat.MIMETYPE_AUDIO_VORBIS);
- list.add(MediaFormat.MIMETYPE_AUDIO_RAW);
- list.add(MediaFormat.MIMETYPE_AUDIO_OPUS);
- }
- if (isHandheld() || isTv() || isAutomotive()) {
- // sec 2.2.2, 2.3.2, 2.5.2
- list.add(MediaFormat.MIMETYPE_AUDIO_AAC);
- list.add(MediaFormat.MIMETYPE_VIDEO_AVC);
- list.add(MediaFormat.MIMETYPE_VIDEO_MPEG4);
- list.add(MediaFormat.MIMETYPE_VIDEO_H263);
- list.add(MediaFormat.MIMETYPE_VIDEO_VP8);
- list.add(MediaFormat.MIMETYPE_VIDEO_VP9);
- }
- if (isHandheld()) {
- // sec 2.2.2
- list.add(MediaFormat.MIMETYPE_AUDIO_AMR_NB);
- list.add(MediaFormat.MIMETYPE_AUDIO_AMR_WB);
- list.add(MediaFormat.MIMETYPE_VIDEO_HEVC);
- }
- if (isTv()) {
- // sec 2.3.2
- list.add(MediaFormat.MIMETYPE_VIDEO_HEVC);
- list.add(MediaFormat.MIMETYPE_VIDEO_MPEG2);
- }
- ArrayList<String> cddRequiredMimeList = new ArrayList<>(list);
+ final boolean isEncoder = false;
+ final boolean needAudio = true;
+ final boolean needVideo = true;
final List<Object[]> exhaustiveArgsList = Arrays.asList(new Object[][]{
{MediaFormat.MIMETYPE_AUDIO_MPEG, "bbb_1ch_8kHz_lame_cbr.mp3",
"bbb_1ch_8kHz_s16le.raw", "bbb_2ch_44kHz_lame_vbr.mp3",
@@ -220,7 +190,7 @@
{MediaFormat.MIMETYPE_VIDEO_AV1, "bbb_340x280_768kbps_30fps_av1.mp4", null,
"bbb_520x390_1mbps_30fps_av1.mp4", -1.0f},
});
- return prepareParamList(cddRequiredMimeList, exhaustiveArgsList, false);
+ return prepareParamList(exhaustiveArgsList, isEncoder, needAudio, needVideo, true);
}
/**
diff --git a/tests/media/src/android/mediav2/cts/CodecEncoderSurfaceTest.java b/tests/media/src/android/mediav2/cts/CodecEncoderSurfaceTest.java
index f2501c0..7a9fde1 100644
--- a/tests/media/src/android/mediav2/cts/CodecEncoderSurfaceTest.java
+++ b/tests/media/src/android/mediav2/cts/CodecEncoderSurfaceTest.java
@@ -22,7 +22,6 @@
import android.media.MediaExtractor;
import android.media.MediaFormat;
import android.media.MediaMuxer;
-import android.os.Build;
import android.util.Log;
import android.util.Pair;
import android.view.Surface;
@@ -38,9 +37,9 @@
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.List;
-import java.util.Map;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -99,13 +98,10 @@
@Parameterized.Parameters(name = "{index}({0})")
public static Collection<Object[]> input() {
- ArrayList<String> cddRequiredMimeList = new ArrayList<>();
- if (CodecTestBase.isHandheld() || CodecTestBase.isTv() || CodecTestBase.isAutomotive()) {
- // sec 2.2.2, 2.3.2, 2.5.2
- cddRequiredMimeList.add(MediaFormat.MIMETYPE_VIDEO_AVC);
- cddRequiredMimeList.add(MediaFormat.MIMETYPE_VIDEO_VP8);
- }
- final Object[][] exhaustiveArgsList = new Object[][]{
+ final boolean isEncoder = true;
+ final boolean needAudio = false;
+ final boolean needVideo = true;
+ final List<Object[]> exhaustiveArgsList = Arrays.asList(new Object[][]{
// Video - CodecMime, test file, bit rate, frame rate
{MediaFormat.MIMETYPE_VIDEO_H263, "bbb_176x144_128kbps_15fps_h263.3gp", 128000, 15},
{MediaFormat.MIMETYPE_VIDEO_MPEG4, "bbb_128x96_64kbps_12fps_mpeg4.mp4", 64000, 12},
@@ -114,60 +110,9 @@
{MediaFormat.MIMETYPE_VIDEO_VP8, "bbb_cif_768kbps_30fps_avc.mp4", 512000, 30},
{MediaFormat.MIMETYPE_VIDEO_VP9, "bbb_cif_768kbps_30fps_avc.mp4", 512000, 30},
{MediaFormat.MIMETYPE_VIDEO_AV1, "bbb_cif_768kbps_30fps_avc.mp4", 512000, 30},
- };
- ArrayList<String> mimes = new ArrayList<>();
- if (CodecTestBase.codecSelKeys.contains(CodecTestBase.CODEC_SEL_VALUE)) {
- MediaCodecList codecList = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
- MediaCodecInfo[] codecInfos = codecList.getCodecInfos();
- for (MediaCodecInfo codecInfo : codecInfos) {
- if (!codecInfo.isEncoder()) continue;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && codecInfo.isAlias()) continue;
- String[] types = codecInfo.getSupportedTypes();
- for (String type : types) {
- if (!mimes.contains(type) && type.startsWith("video/")) {
- mimes.add(type);
- }
- }
- }
- // TODO(b/154423708): add checks for video o/p port and display length >= 2.5"
- /* sec 5.2: device implementations include an embedded screen display with the diagonal
- length of at least 2.5inches or include a video output port or declare the support of a
- camera */
- if (CodecTestBase.hasCamera() && !mimes.contains(MediaFormat.MIMETYPE_VIDEO_AVC) &&
- !mimes.contains(MediaFormat.MIMETYPE_VIDEO_VP8)) {
- fail("device must support at least one of VP8 or AVC video encoders");
- }
- for (String mime : cddRequiredMimeList) {
- if (!mimes.contains(mime)) {
- fail("no codec found for mime " + mime + " as required by cdd");
- }
- }
- } else {
- for (Map.Entry<String, String> entry : CodecTestBase.codecSelKeyMimeMap.entrySet()) {
- String key = entry.getKey();
- String value = entry.getValue();
- if (CodecTestBase.codecSelKeys.contains(key) && !mimes.contains(value)) {
- mimes.add(value);
- }
- }
- }
- final List<Object[]> argsList = new ArrayList<>();
- for (String mime : mimes) {
- boolean miss = true;
- for (Object[] arg : exhaustiveArgsList) {
- if (mime.equals(arg[0])) {
- argsList.add(arg);
- miss = false;
- }
- }
- if (miss) {
- if (cddRequiredMimeList.contains(mime)) {
- fail("no test vectors for required mimetype " + mime);
- }
- Log.w(LOG_TAG, "no test vectors available for optional mime type " + mime);
- }
- }
- return argsList;
+ });
+ return CodecTestBase.prepareParamList(exhaustiveArgsList, isEncoder, needAudio, needVideo,
+ true);
}
private boolean hasSeenError() {
diff --git a/tests/media/src/android/mediav2/cts/CodecEncoderTest.java b/tests/media/src/android/mediav2/cts/CodecEncoderTest.java
index 2d9da22..38eea01 100644
--- a/tests/media/src/android/mediav2/cts/CodecEncoderTest.java
+++ b/tests/media/src/android/mediav2/cts/CodecEncoderTest.java
@@ -35,9 +35,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -159,26 +157,9 @@
@Parameterized.Parameters(name = "{index}({0})")
public static Collection<Object[]> input() {
- Set<String> list = new HashSet<>();
- if (hasMicrophone()) {
- // sec 5.1.1
- // TODO(b/154423550)
- // list.add(MediaFormat.MIMETYPE_AUDIO_RAW);
- list.add(MediaFormat.MIMETYPE_AUDIO_FLAC);
- list.add(MediaFormat.MIMETYPE_AUDIO_OPUS);
- }
- if (isHandheld() || isTv() || isAutomotive()) {
- // sec 2.2.2, 2.3.2, 2.5.2
- list.add(MediaFormat.MIMETYPE_AUDIO_AAC);
- list.add(MediaFormat.MIMETYPE_VIDEO_AVC);
- list.add(MediaFormat.MIMETYPE_VIDEO_VP8);
- }
- if (isHandheld()) {
- // sec 2.2.2
- list.add(MediaFormat.MIMETYPE_AUDIO_AMR_NB);
- list.add(MediaFormat.MIMETYPE_AUDIO_AMR_WB);
- }
- ArrayList<String> cddRequiredMimeList = new ArrayList<>(list);
+ final boolean isEncoder = true;
+ final boolean needAudio = true;
+ final boolean needVideo = true;
final List<Object[]> exhaustiveArgsList = Arrays.asList(new Object[][]{
// Audio - CodecMime, arrays of bit-rates, sample rates, channel counts
{MediaFormat.MIMETYPE_AUDIO_AAC, new int[]{64000, 128000}, new int[]{8000, 11025,
@@ -208,7 +189,7 @@
{MediaFormat.MIMETYPE_VIDEO_AV1, new int[]{256000, 512000}, new int[]{176, 352,
352, 480}, new int[]{144, 240, 288, 360}},
});
- return prepareParamList(cddRequiredMimeList, exhaustiveArgsList, true);
+ return prepareParamList(exhaustiveArgsList, isEncoder, needAudio, needVideo, true);
}
private void setUpParams(int limit) {
diff --git a/tests/media/src/android/mediav2/cts/CodecTestBase.java b/tests/media/src/android/mediav2/cts/CodecTestBase.java
index a47ede1..9d37910 100644
--- a/tests/media/src/android/mediav2/cts/CodecTestBase.java
+++ b/tests/media/src/android/mediav2/cts/CodecTestBase.java
@@ -44,9 +44,11 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@@ -533,8 +535,82 @@
!isAutomotive();
}
- static List<Object[]> prepareParamList(ArrayList<String> cddRequiredMimeList,
- List<Object[]> exhaustiveArgsList, boolean isEncoder) {
+ static boolean hasDecoder(String mime) {
+ return CodecTestBase.selectCodecs(mime, null, null, false).size() != 0;
+ }
+
+ static ArrayList<String> prepareRequiredArgsList(boolean isEncoder, boolean needAudio,
+ boolean needVideo) {
+ Set<String> list = new HashSet<>();
+ if (!isEncoder) {
+ if (hasAudioOutput() && needAudio) {
+ // sec 5.1.2
+ list.add(MediaFormat.MIMETYPE_AUDIO_AAC);
+ list.add(MediaFormat.MIMETYPE_AUDIO_FLAC);
+ list.add(MediaFormat.MIMETYPE_AUDIO_MPEG);
+ list.add(MediaFormat.MIMETYPE_AUDIO_VORBIS);
+ list.add(MediaFormat.MIMETYPE_AUDIO_RAW);
+ list.add(MediaFormat.MIMETYPE_AUDIO_OPUS);
+ }
+ if (isHandheld() || isTv() || isAutomotive()) {
+ // sec 2.2.2, 2.3.2, 2.5.2
+ if (needAudio) {
+ list.add(MediaFormat.MIMETYPE_AUDIO_AAC);
+ }
+ if (needVideo) {
+ list.add(MediaFormat.MIMETYPE_VIDEO_AVC);
+ list.add(MediaFormat.MIMETYPE_VIDEO_MPEG4);
+ list.add(MediaFormat.MIMETYPE_VIDEO_H263);
+ list.add(MediaFormat.MIMETYPE_VIDEO_VP8);
+ list.add(MediaFormat.MIMETYPE_VIDEO_VP9);
+ }
+ }
+ if (isHandheld()) {
+ // sec 2.2.2
+ if (needAudio) {
+ list.add(MediaFormat.MIMETYPE_AUDIO_AMR_NB);
+ list.add(MediaFormat.MIMETYPE_AUDIO_AMR_WB);
+ }
+ if (needVideo) {
+ list.add(MediaFormat.MIMETYPE_VIDEO_HEVC);
+ }
+ }
+ if (isTv() && needVideo) {
+ // sec 2.3.2
+ list.add(MediaFormat.MIMETYPE_VIDEO_HEVC);
+ list.add(MediaFormat.MIMETYPE_VIDEO_MPEG2);
+ }
+ } else {
+ if (hasMicrophone() && needAudio) {
+ // sec 5.1.1
+ // TODO(b/154423550)
+ // list.add(MediaFormat.MIMETYPE_AUDIO_RAW);
+ list.add(MediaFormat.MIMETYPE_AUDIO_FLAC);
+ list.add(MediaFormat.MIMETYPE_AUDIO_OPUS);
+ }
+ if (isHandheld() || isTv() || isAutomotive()) {
+ // sec 2.2.2, 2.3.2, 2.5.2
+ if (needAudio) {
+ list.add(MediaFormat.MIMETYPE_AUDIO_AAC);
+ }
+ if (needVideo) {
+ list.add(MediaFormat.MIMETYPE_VIDEO_AVC);
+ list.add(MediaFormat.MIMETYPE_VIDEO_VP8);
+ }
+ }
+ if (isHandheld() && needAudio) {
+ // sec 2.2.2
+ list.add(MediaFormat.MIMETYPE_AUDIO_AMR_NB);
+ list.add(MediaFormat.MIMETYPE_AUDIO_AMR_WB);
+ }
+ }
+ return new ArrayList<>(list);
+ }
+
+ static List<Object[]> prepareParamList(List<Object[]> exhaustiveArgsList, boolean isEncoder,
+ boolean needAudio, boolean needVideo, boolean mustTestRequiredArgsList) {
+ ArrayList<String> cddRequiredMimeList =
+ prepareRequiredArgsList(isEncoder, needAudio, needVideo);
ArrayList<String> mimes = new ArrayList<>();
if (codecSelKeys.contains(CODEC_SEL_VALUE)) {
MediaCodecList codecList = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
@@ -544,6 +620,8 @@
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && codecInfo.isAlias()) continue;
String[] types = codecInfo.getSupportedTypes();
for (String type : types) {
+ if (!needAudio && type.startsWith("audio/")) continue;
+ if (!needVideo && type.startsWith("video/")) continue;
if (!mimes.contains(type)) {
mimes.add(type);
}
@@ -553,7 +631,8 @@
/* sec 5.2: device implementations include an embedded screen display with the
diagonal length of at least 2.5inches or include a video output port or declare the
support of a camera */
- if (isEncoder && hasCamera() && !mimes.contains(MediaFormat.MIMETYPE_VIDEO_AVC) &&
+ if (isEncoder && hasCamera() && needVideo &&
+ !mimes.contains(MediaFormat.MIMETYPE_VIDEO_AVC) &&
!mimes.contains(MediaFormat.MIMETYPE_VIDEO_VP8)) {
fail("device must support at least one of VP8 or AVC video encoders");
}
@@ -578,7 +657,7 @@
miss = false;
}
}
- if (miss) {
+ if (miss && mustTestRequiredArgsList) {
if (cddRequiredMimeList.contains(mime)) {
fail("no test vectors for required mimetype " + mime);
}
diff --git a/tests/media/src/android/mediav2/cts/EncoderColorAspectsTest.java b/tests/media/src/android/mediav2/cts/EncoderColorAspectsTest.java
index 24ef99f..dabb07e 100644
--- a/tests/media/src/android/mediav2/cts/EncoderColorAspectsTest.java
+++ b/tests/media/src/android/mediav2/cts/EncoderColorAspectsTest.java
@@ -108,34 +108,27 @@
@Parameterized.Parameters(name = "{index}({0}{3}{4}{5})")
public static Collection<Object[]> input() {
- ArrayList<String> testMimeList = new ArrayList<>();
- testMimeList.add(MediaFormat.MIMETYPE_VIDEO_AVC);
- testMimeList.add(MediaFormat.MIMETYPE_VIDEO_HEVC);
- testMimeList.add(MediaFormat.MIMETYPE_VIDEO_VP8);
- testMimeList.add(MediaFormat.MIMETYPE_VIDEO_VP9);
- ArrayList<String> mimes = new ArrayList<>();
- if (CodecTestBase.codecSelKeys.contains(CodecTestBase.CODEC_SEL_VALUE)) {
- MediaCodecList codecList = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
- MediaCodecInfo[] codecInfos = codecList.getCodecInfos();
- for (MediaCodecInfo codecInfo : codecInfos) {
- if (!codecInfo.isEncoder()) continue;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && codecInfo.isAlias()) continue;
- String[] types = codecInfo.getSupportedTypes();
- for (String type : types) {
- if (testMimeList.contains(type) && !mimes.contains(type)) {
- mimes.add(type);
- }
- }
- }
- }
- int[] ranges =
- {-1, UNSPECIFIED, MediaFormat.COLOR_RANGE_FULL, MediaFormat.COLOR_RANGE_LIMITED};
- int[] standards =
- {-1, UNSPECIFIED, MediaFormat.COLOR_STANDARD_BT709,
- MediaFormat.COLOR_STANDARD_BT601_PAL,
- MediaFormat.COLOR_STANDARD_BT601_NTSC, MediaFormat.COLOR_STANDARD_BT2020};
- int[] transfers =
- {-1, UNSPECIFIED, MediaFormat.COLOR_TRANSFER_LINEAR, MediaFormat.COLOR_TRANSFER_SDR_VIDEO};
+ final boolean isEncoder = true;
+ final boolean needAudio = false;
+ final boolean needVideo = true;
+ String[] mimes = {MediaFormat.MIMETYPE_VIDEO_AVC,
+ MediaFormat.MIMETYPE_VIDEO_HEVC,
+ MediaFormat.MIMETYPE_VIDEO_VP8,
+ MediaFormat.MIMETYPE_VIDEO_VP9};
+ int[] ranges = {-1,
+ UNSPECIFIED,
+ MediaFormat.COLOR_RANGE_FULL,
+ MediaFormat.COLOR_RANGE_LIMITED};
+ int[] standards = {-1,
+ UNSPECIFIED,
+ MediaFormat.COLOR_STANDARD_BT709,
+ MediaFormat.COLOR_STANDARD_BT601_PAL,
+ MediaFormat.COLOR_STANDARD_BT601_NTSC,
+ MediaFormat.COLOR_STANDARD_BT2020};
+ int[] transfers = {-1,
+ UNSPECIFIED,
+ MediaFormat.COLOR_TRANSFER_LINEAR,
+ MediaFormat.COLOR_TRANSFER_SDR_VIDEO};
// TODO: COLOR_TRANSFER_ST2084, COLOR_TRANSFER_HLG are for 10 bit and above. Should these
// be tested as well?
List<Object[]> exhaustiveArgsList = new ArrayList<>();
@@ -150,7 +143,8 @@
}
}
}
- return exhaustiveArgsList;
+ return CodecTestBase
+ .prepareParamList(exhaustiveArgsList, isEncoder, needAudio, needVideo, false);
}
@SmallTest
diff --git a/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java b/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java
index d0e4030..f3e9ad7 100644
--- a/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java
+++ b/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java
@@ -74,13 +74,9 @@
@Parameterized.Parameters(name = "{index}({0})")
public static Collection<Object[]> input() {
- ArrayList<String> cddRequiredMimeList = new ArrayList<>();
- if (isHandheld() || isTv() || isAutomotive()) {
- // sec 2.2.2, 2.3.2, 2.5.2
- cddRequiredMimeList.add(MediaFormat.MIMETYPE_AUDIO_AAC);
- cddRequiredMimeList.add(MediaFormat.MIMETYPE_VIDEO_AVC);
- cddRequiredMimeList.add(MediaFormat.MIMETYPE_VIDEO_VP8);
- }
+ final boolean isEncoder = true;
+ final boolean needAudio = true;
+ final boolean needVideo = true;
final List<Object[]> exhaustiveArgsList = Arrays.asList(new Object[][]{
// Audio - CodecMime, bit-rate, sample rate, channel count
{MediaFormat.MIMETYPE_AUDIO_AAC, 64000, 48000, 1, -1},
@@ -193,7 +189,7 @@
{MediaFormat.MIMETYPE_VIDEO_VP8, 512000, 176, 144, 20},
{MediaFormat.MIMETYPE_VIDEO_VP8, 512000, 480, 360, 20},
});
- return prepareParamList(cddRequiredMimeList, exhaustiveArgsList, true);
+ return prepareParamList(exhaustiveArgsList, isEncoder, needAudio, needVideo, false);
}
static {
diff --git a/tests/media/src/android/mediav2/cts/ExtractorTest.java b/tests/media/src/android/mediav2/cts/ExtractorTest.java
index cbfc9c6..282f3f9 100644
--- a/tests/media/src/android/mediav2/cts/ExtractorTest.java
+++ b/tests/media/src/android/mediav2/cts/ExtractorTest.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.MediaCodec;
+import android.media.MediaCodecInfo;
import android.media.MediaDataSource;
import android.media.MediaExtractor;
import android.media.MediaFormat;
@@ -53,6 +54,8 @@
import java.util.List;
import java.util.Random;
+import static android.mediav2.cts.CodecTestBase.hasDecoder;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeTrue;
@@ -1125,4 +1128,236 @@
}
}
}
+
+ /**
+ * Test if extractor populates key-value pairs correctly
+ */
+ @RunWith(Parameterized.class)
+ public static class ValidateKeyValuePairs {
+ private static final String mInpPrefix = WorkDir.getMediaDirString();
+ private final String mMime;
+ private final String[] mInpFiles;
+ private final int mProfile;
+ private final int mLevel;
+ private final int mWR;
+ private final int mHCh;
+
+ public ValidateKeyValuePairs(String mime, String[] inpFiles, int profile, int level, int wr,
+ int hCh) {
+ mMime = mime;
+ mInpFiles = inpFiles;
+ mProfile = profile;
+ mLevel = level;
+ mWR = wr;
+ mHCh = hCh;
+ }
+
+ @Parameterized.Parameters(name = "{index}({0})")
+ public static Collection<Object[]> input() {
+ // mime, clips, profile, level, width/sample rate, height/channel count
+ List<Object[]> exhaustiveArgsList = new ArrayList<>();
+
+ if (hasDecoder(MediaFormat.MIMETYPE_VIDEO_MPEG2)) {
+ // profile and level constraints as per sec 2.3.2 of cdd
+ /* TODO(b/159582475)
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_MPEG2, new String[]{
+ "bbb_1920x1080_mpeg2_main_high.mp4",
+ "bbb_1920x1080_mpeg2_main_high.mkv"},
+ MediaCodecInfo.CodecProfileLevel.MPEG2ProfileMain,
+ MediaCodecInfo.CodecProfileLevel.MPEG2LevelHL, 1920, 1080});*/
+ }
+
+ if (hasDecoder(MediaFormat.MIMETYPE_VIDEO_AVC)) {
+ // profile and level constraints as per sec 2.3.2 of cdd
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_AVC, new String[]{
+ "bbb_1920x1080_avc_baseline_l42.mp4",
+ "bbb_1920x1080_avc_baseline_l42.mkv",
+ "bbb_1920x1080_avc_baseline_l42.3gp"},
+ MediaCodecInfo.CodecProfileLevel.AVCProfileConstrainedBaseline,
+ MediaCodecInfo.CodecProfileLevel.AVCLevel42, 1920, 1080});
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_AVC, new String[]{
+ "bbb_1920x1080_avc_main_l42.mp4",
+ "bbb_1920x1080_avc_main_l42.mkv",
+ "bbb_1920x1080_avc_main_l42.3gp"},
+ MediaCodecInfo.CodecProfileLevel.AVCProfileMain,
+ MediaCodecInfo.CodecProfileLevel.AVCLevel42, 1920, 1080});
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_AVC, new String[]{
+ "bbb_1920x1080_avc_high_l42.mp4",
+ "bbb_1920x1080_avc_high_l42.mkv",
+ "bbb_1920x1080_avc_high_l42.3gp"},
+ MediaCodecInfo.CodecProfileLevel.AVCProfileHigh,
+ MediaCodecInfo.CodecProfileLevel.AVCLevel42, 1920, 1080});
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_AVC, new String[]{
+ "video_dovi_1920x1080_60fps_dvav_09.mp4"},
+ MediaCodecInfo.CodecProfileLevel.AVCProfileHigh,
+ MediaCodecInfo.CodecProfileLevel.AVCLevel42, 1920, 1080});
+ // profile/level constraints for avc as per sec 5.3.4 of cdd
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_AVC, new String[]{
+ "bbb_1920x1080_avc_baseline_l40.mp4",
+ "bbb_1920x1080_avc_baseline_l40.mkv",
+ "bbb_1920x1080_avc_baseline_l40.3gp"},
+ MediaCodecInfo.CodecProfileLevel.AVCProfileConstrainedBaseline,
+ MediaCodecInfo.CodecProfileLevel.AVCLevel4, 1920, 1080});
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_AVC, new String[]{
+ "bbb_1920x1080_avc_main_l40.mp4",
+ "bbb_1920x1080_avc_main_l40.mkv",
+ "bbb_1920x1080_avc_main_l40.3gp"},
+ MediaCodecInfo.CodecProfileLevel.AVCProfileMain,
+ MediaCodecInfo.CodecProfileLevel.AVCLevel4, 1920, 1080});
+ }
+
+ if (hasDecoder(MediaFormat.MIMETYPE_VIDEO_HEVC)) {
+ // profile and level constraints as per sec 2.3.2 of cdd
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_HEVC, new String[]{
+ "bbb_1920x1080_hevc_main_l41.mp4",
+ "bbb_1920x1080_hevc_main_l41.mkv"},
+ MediaCodecInfo.CodecProfileLevel.HEVCProfileMain,
+ MediaCodecInfo.CodecProfileLevel.HEVCMainTierLevel41, 1920, 1080});
+ // profile/level constraints for hevc as per sec 5.3.5 of cdd
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_HEVC, new String[]{
+ "bbb_1920x1080_hevc_main_l40.mp4",
+ "bbb_1920x1080_hevc_main_l40.mkv"},
+ MediaCodecInfo.CodecProfileLevel.HEVCProfileMain,
+ MediaCodecInfo.CodecProfileLevel.HEVCMainTierLevel4, 1920, 1080});
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_HEVC, new String[]{
+ "video_dovi_1920x1080_30fps_dvhe_04.mp4"},
+ MediaCodecInfo.CodecProfileLevel.HEVCProfileMain10,
+ MediaCodecInfo.CodecProfileLevel.HEVCMainTierLevel4, 1920, 1080});
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_HEVC, new String[]{
+ "video_dovi_1920x1080_60fps_dvhe_08.mp4"},
+ MediaCodecInfo.CodecProfileLevel.HEVCProfileMain10,
+ MediaCodecInfo.CodecProfileLevel.HEVCMainTierLevel41, 1920, 1080});
+ }
+
+ if (hasDecoder(MediaFormat.MIMETYPE_VIDEO_VP9)) {
+ // profile and level constraints as per sec 2.3.2 of cdd
+ /* TODO(b/159582475)
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_VP9, new String[]{
+ "bbb_1920x1080_vp9_main_l41.webm",
+ "bbb_1920x1080_vp9_main_l41.mkv"},
+ MediaCodecInfo.CodecProfileLevel.VP9Profile0,
+ MediaCodecInfo.CodecProfileLevel.VP9Level41, 1920, 1080});*/
+ // profile/level constraints for vp9 as per sec 5.3.6 of cdd
+ /* TODO(b/159582475)
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_VP9, new String[]{
+ "bbb_1920x1080_vp9_main_l40.webm",
+ "bbb_1920x1080_vp9_main_l40.mkv"},
+ MediaCodecInfo.CodecProfileLevel.VP9Profile0,
+ MediaCodecInfo.CodecProfileLevel.VP9Level4, 1920, 1080});*/
+ }
+
+ if (hasDecoder(MediaFormat.MIMETYPE_VIDEO_H263)) {
+ // profile/level constraints for h263 as per sec 5.3.2 of cdd
+ /* TODO(b/159582475)
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_H263, new String[]{
+ "bbb_352x288_384kbps_30fps_h263_baseline_l3.3gp",
+ "bbb_352x288_384kbps_30fps_h263_baseline_l3.mp4",
+ "bbb_352x288_384kbps_30fps_h263_baseline_l3.mkv"},
+ MediaCodecInfo.CodecProfileLevel.H263ProfileBaseline,
+ MediaCodecInfo.CodecProfileLevel.H263Level30, 352, 288});*/
+ }
+
+ if (hasDecoder(MediaFormat.MIMETYPE_VIDEO_MPEG4)) {
+ // profile/level constraints for mpeg4 as per sec 5.3.3 of cdd
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_MPEG4, new String[]{
+ "bbb_352x288_384kbps_30fps_mpeg4_simple_l3.mp4",
+ "bbb_352x288_384kbps_30fps_mpeg4_simple_l3.3gp",
+ "bbb_352x288_384kbps_30fps_mpeg4_simple_l3.mkv"},
+ MediaCodecInfo.CodecProfileLevel.MPEG4ProfileSimple,
+ MediaCodecInfo.CodecProfileLevel.MPEG4Level3, 352, 288});
+ }
+
+ if (hasDecoder(MediaFormat.MIMETYPE_AUDIO_AAC)) {
+ // profile and level constraints for devices that have audio output as per sec 2.2.2,
+ // sec 2.3.2, sec 2.5.2, sec 5.1.2 of cdd
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_AUDIO_AAC, new String[]{
+ "bbb_stereo_44kHz_192kbps_aac_lc.mp4",
+ "bbb_stereo_44kHz_192kbps_aac_lc.3gp",
+ "bbb_stereo_44kHz_192kbps_aac_lc.mkv"},
+ MediaCodecInfo.CodecProfileLevel.AACObjectLC, 0, 44100, 2});
+ /* TODO(b/159582475)
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_AUDIO_AAC, new String[]{
+ "bbb_stereo_44kHz_192kbps_aac_he.mp4",
+ "bbb_stereo_44kHz_192kbps_aac_he.3gp",
+ "bbb_stereo_44kHz_192kbps_aac_he.mkv"},
+ MediaCodecInfo.CodecProfileLevel.AACObjectHE, 0, 44100, 2});*/
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_AUDIO_AAC, new String[] {
+ "bbb_stereo_44kHz_192kbps_aac_eld.mp4",
+ "bbb_stereo_44kHz_192kbps_aac_eld.3gp",
+ "bbb_stereo_44kHz_192kbps_aac_eld.mkv"},
+ MediaCodecInfo.CodecProfileLevel.AACObjectELD, 0, 44100, 2});
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_AUDIO_AAC, new String[]{
+ "bbb_stereo_44kHz_192kbps_aac_ld.mp4",
+ "bbb_stereo_44kHz_192kbps_aac_ld.3gp",
+ "bbb_stereo_44kHz_192kbps_aac_ld.mkv"},
+ MediaCodecInfo.CodecProfileLevel.AACObjectLD, 0, 44100, 2});
+ /*TODO(b/159582475)
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_AUDIO_AAC, new String[]{
+ "bbb_stereo_44kHz_192kbps_aac_hev2.mp4",
+ "bbb_stereo_44kHz_192kbps_aac_hev2.3gp",
+ "bbb_stereo_44kHz_192kbps_aac_hev2.mkv"},
+ MediaCodecInfo.CodecProfileLevel.AACObjectHE_PS, 0, 44100, 2});*/
+ }
+
+ // Miscellaneous
+ if (hasDecoder(MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION)) {
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION,
+ new String[]{"video_dovi_1920x1080_30fps_dvhe_04.mp4"},
+ MediaCodecInfo.CodecProfileLevel.DolbyVisionProfileDvheDtr,
+ MediaCodecInfo.CodecProfileLevel.DolbyVisionLevelFhd30, 1920, 1080});
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION,
+ new String[]{"video_dovi_1920x1080_60fps_dvhe_05.mp4"},
+ MediaCodecInfo.CodecProfileLevel.DolbyVisionProfileDvheStn,
+ MediaCodecInfo.CodecProfileLevel.DolbyVisionLevelFhd60, 1920, 1080});
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION,
+ new String[]{"video_dovi_1920x1080_60fps_dvhe_08.mp4"},
+ MediaCodecInfo.CodecProfileLevel.DolbyVisionProfileDvheSt,
+ MediaCodecInfo.CodecProfileLevel.DolbyVisionLevelFhd60, 1920, 1080});
+ exhaustiveArgsList.add(new Object[]{MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION,
+ new String[]{"video_dovi_1920x1080_60fps_dvav_09.mp4"},
+ MediaCodecInfo.CodecProfileLevel.DolbyVisionProfileDvavSe,
+ MediaCodecInfo.CodecProfileLevel.DolbyVisionLevelFhd60, 1920, 1080});
+ }
+
+ return exhaustiveArgsList;
+ }
+
+ @Test
+ public void validateKeyValuePairs() throws IOException {
+ for (String file : mInpFiles) {
+ MediaFormat format = null;
+ MediaExtractor extractor = new MediaExtractor();
+ extractor.setDataSource(mInpPrefix + file);
+ for (int trackID = 0; trackID < extractor.getTrackCount(); trackID++) {
+ MediaFormat fmt = extractor.getTrackFormat(trackID);
+ if (mMime.equalsIgnoreCase(fmt.getString(MediaFormat.KEY_MIME))) {
+ format = fmt;
+ break;
+ }
+ }
+ extractor.release();
+ assertTrue(format != null);
+ if (mMime.equals(MediaFormat.MIMETYPE_AUDIO_AAC)) {
+ assertTrue(format.containsKey(MediaFormat.KEY_AAC_PROFILE) ||
+ format.containsKey(MediaFormat.KEY_PROFILE));
+ if (format.containsKey(MediaFormat.KEY_AAC_PROFILE)) {
+ assertEquals(mProfile, format.getInteger(MediaFormat.KEY_AAC_PROFILE));
+ }
+ if (format.containsKey(MediaFormat.KEY_PROFILE)) {
+ assertEquals(mProfile, format.getInteger(MediaFormat.KEY_PROFILE));
+ }
+ } else {
+ assertEquals(mProfile, format.getInteger(MediaFormat.KEY_PROFILE));
+ assertEquals(mLevel, format.getInteger(MediaFormat.KEY_LEVEL));
+ }
+ if (mMime.startsWith("audio/")) {
+ assertEquals(mWR, format.getInteger(MediaFormat.KEY_SAMPLE_RATE));
+ assertEquals(mHCh, format.getInteger(MediaFormat.KEY_CHANNEL_COUNT));
+ } else if (mMime.startsWith("video/")) {
+ assertEquals(mWR, format.getInteger(MediaFormat.KEY_WIDTH));
+ assertEquals(mHCh, format.getInteger(MediaFormat.KEY_HEIGHT));
+ }
+ }
+ }
+ }
}
diff --git a/tests/media/src/android/mediav2/cts/WorkDir.java b/tests/media/src/android/mediav2/cts/WorkDir.java
index a5e635c..7192c5c 100644
--- a/tests/media/src/android/mediav2/cts/WorkDir.java
+++ b/tests/media/src/android/mediav2/cts/WorkDir.java
@@ -40,7 +40,7 @@
// user has specified the mediaDirString via instrumentation-arg
return mediaDirString + ((mediaDirString.endsWith("/")) ? "" : "/");
} else {
- return (getTopDirString() + "test/CtsMediaV2TestCases-1.2/");
+ return (getTopDirString() + "test/CtsMediaV2TestCases-1.3/");
}
}
}
\ No newline at end of file
diff --git a/tests/tests/nativemidi/jni/native-lib.cpp b/tests/tests/nativemidi/jni/native-lib.cpp
index f482eee..5a2f0ca 100644
--- a/tests/tests/nativemidi/jni/native-lib.cpp
+++ b/tests/tests/nativemidi/jni/native-lib.cpp
@@ -278,6 +278,8 @@
JNIEXPORT jlong JNICALL Java_android_nativemidi_cts_NativeMidiEchoTest_allocTestContext(
JNIEnv* env, jclass) {
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "allocTestContext()");
+
TestContext* context = new TestContext;
if (!context->initN(env)) {
delete context;
@@ -289,6 +291,7 @@
JNIEXPORT void JNICALL Java_android_nativemidi_cts_NativeMidiEchoTest_freeTestContext(
JNIEnv*, jclass, jlong context) {
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "freeTestContext()");
delete (TestContext*)context;
}
@@ -469,6 +472,11 @@
// __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "++++ startReadingMidi()");
TestContext* context = (TestContext*)ctx;
+ if (context == nullptr) {
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG,
+ "Test Context is null in startReadingMidi()");
+ return AMEDIA_ERROR_INVALID_OBJECT;
+ }
AMidiOutputPort* outputPort;
media_status_t status = AMidiOutputPort_open(context->nativeDevice, portNumber, &outputPort);
@@ -494,6 +502,11 @@
// __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "++++ stopReadingMidi()");
TestContext* context = (TestContext*)ctx;
+ if (context == nullptr) {
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG,
+ "Test Context is null in stopReadingMidi()");
+ return AMEDIA_ERROR_INVALID_OBJECT;
+ }
context->mReading = false;
context->mReadThread->join();
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
index 3c99a2a..c0b75e6 100755
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
@@ -2441,6 +2441,17 @@
assertEquals(kRequest, (long) WebkitUtils.waitForFuture(visualStateFuture));
}
+ private static boolean setSafeBrowsingAllowlistSync(List<String> allowlist) {
+ final SettableFuture<Boolean> safeBrowsingAllowlistFuture = SettableFuture.create();
+ WebView.setSafeBrowsingWhitelist(allowlist, new ValueCallback<Boolean>() {
+ @Override
+ public void onReceiveValue(Boolean success) {
+ safeBrowsingAllowlistFuture.set(success);
+ }
+ });
+ return WebkitUtils.waitForFuture(safeBrowsingAllowlistFuture);
+ }
+
/**
* This should remain functionally equivalent to
* androidx.webkit.WebViewCompatTest#testSetSafeBrowsingAllowlistWithMalformedList.
@@ -2455,14 +2466,7 @@
List allowlist = new ArrayList<String>();
// Protocols are not supported in the allowlist
allowlist.add("http://google.com");
- final SettableFuture<Boolean> safeBrowsingAllowlistFuture = SettableFuture.create();
- WebView.setSafeBrowsingWhitelist(allowlist, new ValueCallback<Boolean>() {
- @Override
- public void onReceiveValue(Boolean success) {
- safeBrowsingAllowlistFuture.set(success);
- }
- });
- assertFalse(WebkitUtils.waitForFuture(safeBrowsingAllowlistFuture));
+ assertFalse("Malformed list entry should fail", setSafeBrowsingAllowlistSync(allowlist));
}
/**
@@ -2478,14 +2482,7 @@
List allowlist = new ArrayList<String>();
allowlist.add("safe-browsing");
- final SettableFuture<Boolean> safeBrowsingAllowlistFuture = SettableFuture.create();
- WebView.setSafeBrowsingWhitelist(allowlist, new ValueCallback<Boolean>() {
- @Override
- public void onReceiveValue(Boolean success) {
- safeBrowsingAllowlistFuture.set(success);
- }
- });
- assertTrue(WebkitUtils.waitForFuture(safeBrowsingAllowlistFuture));
+ assertTrue("Valid allowlist should be successful", setSafeBrowsingAllowlistSync(allowlist));
final SettableFuture<Void> pageFinishedFuture = SettableFuture.create();
mOnUiThread.setWebViewClient(new WebViewClient() {