cts: Skip encodeDecode tests when there is no needed encoder
Bug: 24345906
Change-Id: I81f9f7b8934a99a50690e6bcbbd2a17b64d36714
diff --git a/libs/deviceutil/src/android/cts/util/MediaUtils.java b/libs/deviceutil/src/android/cts/util/MediaUtils.java
index b3ebbad..0a454b6 100755
--- a/libs/deviceutil/src/android/cts/util/MediaUtils.java
+++ b/libs/deviceutil/src/android/cts/util/MediaUtils.java
@@ -160,6 +160,14 @@
return null;
}
+ public static boolean canEncode(MediaFormat format) {
+ if (sMCL.findEncoderForFormat(format) == null) {
+ Log.i(TAG, "no encoder for " + format);
+ return false;
+ }
+ return true;
+ }
+
public static boolean canDecode(MediaFormat format) {
if (sMCL.findDecoderForFormat(format) == null) {
Log.i(TAG, "no decoder for " + format);
@@ -407,6 +415,10 @@
return canDecode(format);
}
+ public static boolean checkEncoderForFormat(MediaFormat format) {
+ return check(canEncode(format), "no encoder for " + format);
+ }
+
public static boolean checkDecoderForFormat(MediaFormat format) {
return check(canDecode(format), "no decoder for " + format);
}
diff --git a/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java b/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java
index 40934f5..7c4d1fb 100644
--- a/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java
+++ b/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java
@@ -16,6 +16,7 @@
package android.media.cts;
+import android.cts.util.MediaUtils;
import android.graphics.ImageFormat;
import android.media.Image;
import android.media.MediaCodec;
@@ -284,6 +285,10 @@
@Override
public void run() {
+ if (mTest.shouldSkip()) {
+ return;
+ }
+
InputSurface inputSurface = null;
try {
if (!mUsePersistentInput) {
@@ -339,6 +344,22 @@
mAllowBT709 = allowBT709;
}
+ private boolean shouldSkip() {
+ if (!MediaUtils.hasEncoder(mMimeType)) {
+ return true;
+ }
+
+ MediaFormat format = MediaFormat.createVideoFormat(mMimeType, mWidth, mHeight);
+ format.setInteger(MediaFormat.KEY_BIT_RATE, mBitRate);
+ format.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
+ format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, IFRAME_INTERVAL);
+ if (!MediaUtils.checkEncoderForFormat(format)) {
+ return true;
+ }
+
+ return false;
+ }
+
/**
* Tests encoding and subsequently decoding video from frames generated into a buffer.
* <p>
@@ -348,6 +369,10 @@
* See http://b.android.com/37769 for a discussion of input format pitfalls.
*/
private void encodeDecodeVideoFromBuffer(boolean toSurface) throws Exception {
+ if (shouldSkip()) {
+ return;
+ }
+
MediaCodec encoder = null;
MediaCodec decoder = null;