MediaCodec CTS: validate metrics
Bug: 147573846
Test: atest android.mediav2.cts.CodecEncoderTest \
android.mediav2.cts.CodecDecoderTest
Change-Id: I93ec0182586f01d93d73ff8cc844118e5a68b628
Merged-In: I93ec0182586f01d93d73ff8cc844118e5a68b628
diff --git a/tests/media/src/android/mediav2/cts/CodecDecoderTest.java b/tests/media/src/android/mediav2/cts/CodecDecoderTest.java
index 1317e60..1fc3126 100644
--- a/tests/media/src/android/mediav2/cts/CodecDecoderTest.java
+++ b/tests/media/src/android/mediav2/cts/CodecDecoderTest.java
@@ -23,6 +23,7 @@
import android.media.MediaExtractor;
import android.media.MediaFormat;
import android.os.Build;
+import android.os.PersistableBundle;
import android.util.Log;
import android.util.Pair;
@@ -323,6 +324,14 @@
mSaveToMem = false;
}
+ @Override
+ PersistableBundle validateMetrics(String decoder, MediaFormat format) {
+ PersistableBundle metrics = super.validateMetrics(decoder, format);
+ assertTrue(metrics.getString(MediaCodec.MetricsConstants.MIME_TYPE).equals(mMime));
+ assertTrue(metrics.getInt(MediaCodec.MetricsConstants.ENCODER) == 0);
+ return metrics;
+ }
+
@Parameterized.Parameters(name = "{index}({0})")
public static Collection<Object[]> input() {
final List<String> cddRequiredMimeList =
@@ -469,6 +478,7 @@
mCodec.getName().equals(decoder));
assertTrue("error! codec canonical name is null",
mCodec.getCanonicalName() != null && !mCodec.getCanonicalName().isEmpty());
+ validateMetrics(decoder);
int loopCounter = 0;
for (boolean eosType : boolStates) {
for (boolean isAsync : boolStates) {
@@ -491,6 +501,7 @@
doWork(Integer.MAX_VALUE);
queueEOS();
waitForAllOutputs();
+ validateMetrics(decoder, format);
/* TODO(b/147348711) */
if (false) mCodec.stop();
else mCodec.reset();
@@ -604,8 +615,11 @@
assertTrue(log + " pts is not strictly increasing",
test.isPtsStrictlyIncreasing(mPrevOutputPts));
+ boolean checkMetrics = (mOutputCount != 0);
+
/* test flush in running state */
flushCodec();
+ if (checkMetrics) validateMetrics(decoder, format);
if (mIsCodecInAsyncMode) mCodec.start();
mSaveToMem = true;
test.reset();
@@ -719,14 +733,17 @@
mCodec.start();
doWork(23);
- if (validateFormat) {
- assertTrue(log + "not received format change",
- mIsCodecInAsyncMode ? mAsyncHandle.hasOutputFormatChanged() :
- mSignalledOutFormatChanged);
- assertTrue(log + "configured format and output format are not similar",
- isFormatSimilar(format,
- mIsCodecInAsyncMode ? mAsyncHandle.getOutputFormat() :
- mOutFormat));
+ if (mOutputCount != 0) {
+ if (validateFormat) {
+ assertTrue(log + "not received format change",
+ mIsCodecInAsyncMode ? mAsyncHandle.hasOutputFormatChanged() :
+ mSignalledOutFormatChanged);
+ assertTrue(log + "configured format and output format are not similar",
+ isFormatSimilar(format,
+ mIsCodecInAsyncMode ? mAsyncHandle.getOutputFormat() :
+ mOutFormat));
+ }
+ validateMetrics(decoder, format);
}
/* test reconfigure codec in running state */
@@ -806,6 +823,7 @@
doWork(Integer.MAX_VALUE);
queueEOS();
waitForAllOutputs();
+ validateMetrics(decoder, newFormat);
/* TODO(b/147348711) */
if (false) mCodec.stop();
else mCodec.reset();
@@ -935,6 +953,7 @@
doWork(Integer.MAX_VALUE);
queueEOS();
waitForAllOutputs();
+ validateMetrics(decoder);
/* TODO(b/147348711) */
if (false) mCodec.stop();
else mCodec.reset();
diff --git a/tests/media/src/android/mediav2/cts/CodecEncoderTest.java b/tests/media/src/android/mediav2/cts/CodecEncoderTest.java
index 45cac5d..3bce40c 100644
--- a/tests/media/src/android/mediav2/cts/CodecEncoderTest.java
+++ b/tests/media/src/android/mediav2/cts/CodecEncoderTest.java
@@ -23,6 +23,7 @@
import android.media.MediaCodecList;
import android.media.MediaFormat;
import android.os.Build;
+import android.os.PersistableBundle;
import android.util.Log;
import androidx.test.filters.LargeTest;
@@ -304,6 +305,14 @@
mSaveToMem = false;
}
+ @Override
+ PersistableBundle validateMetrics(String codec, MediaFormat format) {
+ PersistableBundle metrics = super.validateMetrics(codec, format);
+ assertTrue(metrics.getString(MediaCodec.MetricsConstants.MIME_TYPE).equals(mMime));
+ assertTrue(metrics.getInt(MediaCodec.MetricsConstants.ENCODER) == 1);
+ return metrics;
+ }
+
@Parameterized.Parameters(name = "{index}({0})")
public static Collection<Object[]> input() {
final List<String> cddRequiredMimeList =
@@ -475,11 +484,13 @@
(eosType ? "eos with last frame" : "eos separate"));
mOutputBuff = loopCounter == 0 ? ref : test;
mOutputBuff.reset();
+ validateMetrics(encoder);
configureCodec(format, isAsync, eosType, true);
mCodec.start();
doWork(Integer.MAX_VALUE);
queueEOS();
waitForAllOutputs();
+ validateMetrics(encoder, format);
/* TODO(b/147348711) */
if (false) mCodec.stop();
else mCodec.reset();
@@ -549,10 +560,13 @@
assertTrue(log + " pts is not strictly increasing",
mOutputBuff.isPtsStrictlyIncreasing(mPrevOutputPts));
+ boolean checkMetrics = (mOutputCount != 0);
+
/* test flush in running state */
flushCodec();
mOutputBuff.reset();
if (mIsCodecInAsyncMode) mCodec.start();
+ if (checkMetrics) validateMetrics(encoder, inpFormat);
doWork(Integer.MAX_VALUE);
queueEOS();
waitForAllOutputs();
@@ -646,6 +660,8 @@
mCodec.start();
doWork(23);
+ if (mOutputCount != 0) validateMetrics(encoder, format);
+
/* test reconfigure codec in running state */
reConfigureCodec(format, isAsync, true, true);
mCodec.start();
diff --git a/tests/media/src/android/mediav2/cts/CodecTestBase.java b/tests/media/src/android/mediav2/cts/CodecTestBase.java
index f4568fa..a30a239 100644
--- a/tests/media/src/android/mediav2/cts/CodecTestBase.java
+++ b/tests/media/src/android/mediav2/cts/CodecTestBase.java
@@ -24,6 +24,7 @@
import android.media.MediaCodecList;
import android.media.MediaFormat;
import android.os.Build;
+import android.os.PersistableBundle;
import android.util.Log;
import android.util.Pair;
@@ -686,4 +687,28 @@
}
return true;
}
+
+ PersistableBundle validateMetrics(String codec) {
+ PersistableBundle metrics = mCodec.getMetrics();
+ assertTrue("metrics is null", metrics != null);
+ assertTrue(metrics.getString(MediaCodec.MetricsConstants.CODEC).equals(codec));
+ if (mIsAudio) {
+ assertTrue(metrics.getString(MediaCodec.MetricsConstants.MODE)
+ .equals(MediaCodec.MetricsConstants.MODE_AUDIO));
+ } else {
+ assertTrue(metrics.getString(MediaCodec.MetricsConstants.MODE)
+ .equals(MediaCodec.MetricsConstants.MODE_VIDEO));
+ }
+ return metrics;
+ }
+
+ PersistableBundle validateMetrics(String codec, MediaFormat format) {
+ PersistableBundle metrics = validateMetrics(codec);
+ if (!mIsAudio) {
+ assertTrue(metrics.getInt(MediaCodec.MetricsConstants.WIDTH) == getWidth(format));
+ assertTrue(metrics.getInt(MediaCodec.MetricsConstants.HEIGHT) == getHeight(format));
+ }
+ assertTrue(metrics.getInt(MediaCodec.MetricsConstants.SECURE) == 0);
+ return metrics;
+ }
}