OSDN Git Service

MediaFrameworkTest: compare media type only for supported media check
authorWonsik Kim <wonsik@google.com>
Fri, 21 Apr 2017 23:07:34 +0000 (16:07 -0700)
committerHyungtae Kim <hyungtaekim@google.com>
Wed, 26 Apr 2017 17:23:53 +0000 (17:23 +0000)
This is a CL to fix media test that is needed to
ensure the local media playback works.
This doesn't affect any OC feature.

Bug: 36699113
Test: adb shell am instrument -w -r -e class com.android.mediaframeworktest.stress.MediaPlayerStressTest com.android.mediaframeworktest/.MediaPlayerStressTestRunner
Change-Id: If1200e7f9a8c734b07f3f2a0420b3942920c948b
(cherry picked from commit 09fc83c8f820e231056141ecaeb54cffb334663e)

media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java

index 48b2878..4361b96 100644 (file)
@@ -25,6 +25,7 @@ import com.android.mediaframeworktest.MediaNames;
 import android.content.res.AssetFileDescriptor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.media.MediaCodecInfo;
 import android.media.MediaCodecList;
 import android.media.MediaExtractor;
 import android.media.MediaFormat;
@@ -42,7 +43,9 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.Writer;
 import java.io.FileOutputStream;
+import java.util.HashSet;
 import java.util.Random;
+import java.util.Set;
 /**
  * Junit / Instrumentation test case for the media player api
 
@@ -69,6 +72,7 @@ public class CodecTest {
     public static int mMediaInfoBadInterleavingCount = 0;
     public static int mMediaInfoNotSeekableCount = 0;
     public static int mMediaInfoMetdataUpdateCount = 0;
+    private static Set<String> mSupportedTypes = new HashSet<>();
 
     public static String printCpuInfo(){
         String cm = "dumpsys cpuinfo";
@@ -792,7 +796,7 @@ public class CodecTest {
         return playMediaSamples(filePath, 2000, false /* streamingTest */);
     }
 
-    // For each media file, forward twice and backward once, then play to the end
+    // For each media file, just play to the end
     public static boolean playMediaSamples(String filePath, int buffertime, boolean streamingTest)
             throws Exception {
         int duration = 0;
@@ -812,7 +816,14 @@ public class CodecTest {
         boolean hasSupportedVideo = false;
 
         if (!streamingTest) {
-            final MediaCodecList list = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
+            if (mSupportedTypes.isEmpty()) {
+                final MediaCodecList list = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
+                for (MediaCodecInfo info : list.getCodecInfos()) {
+                    for (String type : info.getSupportedTypes()) {
+                        mSupportedTypes.add(type);
+                    }
+                }
+            }
             final MediaExtractor extractor = new MediaExtractor();
 
             try {
@@ -820,12 +831,12 @@ public class CodecTest {
 
                 for (int index = 0; index < extractor.getTrackCount(); ++index) {
                     MediaFormat format = extractor.getTrackFormat(index);
-                    String mime = format.getString(MediaFormat.KEY_MIME);
-                    if (!mime.startsWith("video/")) {
+                    String type = format.getString(MediaFormat.KEY_MIME);
+                    if (!type.startsWith("video/")) {
                         continue;
                     }
 
-                    if (list.findDecoderForFormat(format) != null) {
+                    if (mSupportedTypes.contains(type)) {
                         hasSupportedVideo = true;
                         break;
                     }