1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.mediaframeworktest.functional; 18 19 import android.media.MediaMetadataRetriever; 20 import android.test.AndroidTestCase; 21 import android.test.suitebuilder.annotation.MediumTest; 22 import android.util.Log; 23 24 import com.android.mediaframeworktest.MediaNames; 25 import com.android.mediaframeworktest.MediaProfileReader; 26 27 import java.io.IOException; 28 29 /** This metadata test suite test the basic functionality of the MediaMetadataRetriever */ 30 public class MediaMetadataTest extends AndroidTestCase { 31 32 private static final String TAG = "MediaMetadataTest"; 33 34 public enum METADATA_EXPECTEDRESULT { 35 FILE_PATH, 36 CD_TRACK, 37 ALBUM, 38 ARTIST, 39 AUTHOR, 40 COMPOSER, 41 DATE, 42 GENRE, 43 TITLE, 44 YEAR, 45 DURATION, 46 NUM_TRACKS, 47 WRITER 48 } 49 50 public enum MP3_TEST_FILE { 51 ID3V1V2, 52 ID3V2, 53 ID3V1 54 } 55 56 public static METADATA_EXPECTEDRESULT meta; 57 public static MP3_TEST_FILE mp3_test_file; 58 59 @MediumTest testID3V1V2Metadata()60 public static void testID3V1V2Metadata() throws Exception { 61 validateMetatData(mp3_test_file.ID3V1V2.ordinal(), MediaNames.META_DATA_MP3); 62 } 63 64 @MediumTest testID3V2Metadata()65 public static void testID3V2Metadata() throws Exception { 66 validateMetatData(mp3_test_file.ID3V2.ordinal(), MediaNames.META_DATA_MP3); 67 } 68 69 @MediumTest testID3V1Metadata()70 public static void testID3V1Metadata() throws Exception { 71 validateMetatData(mp3_test_file.ID3V1.ordinal(), MediaNames.META_DATA_MP3); 72 } 73 validateMetatData(int fileIndex, String[][] metadataFile)74 private static void validateMetatData(int fileIndex, String[][] metadataFile) 75 throws IOException { 76 Log.v(TAG, "filePath = " + metadataFile[fileIndex][0]); 77 if ((metadataFile[fileIndex][0].endsWith("wma") && !MediaProfileReader.getWMAEnable()) 78 || (metadataFile[fileIndex][0].endsWith("wmv") 79 && !MediaProfileReader.getWMVEnable())) { 80 return; 81 } 82 String value = null; 83 MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 84 try { 85 retriever.setDataSource(metadataFile[fileIndex][0]); 86 } catch (Exception e) { 87 Log.v(TAG, "Failed: " + metadataFile[fileIndex][0] + " " + e.toString()); 88 // Set the test case failure whenever it failed to setDataSource 89 assertTrue("Failed to setDataSource ", false); 90 } 91 92 // METADATA_KEY_CD_TRACK_NUMBER should return the TCRK value 93 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER); 94 Log.v(TAG, "CD_TRACK_NUMBER : " + value); 95 assertEquals(TAG, metadataFile[fileIndex][meta.CD_TRACK.ordinal()], value); 96 97 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); 98 Log.v(TAG, "Album : " + value); 99 assertEquals(TAG, metadataFile[fileIndex][meta.ALBUM.ordinal()], value); 100 101 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); 102 Log.v(TAG, "Artist : " + value); 103 assertEquals(TAG, metadataFile[fileIndex][meta.ARTIST.ordinal()], value); 104 105 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR); 106 Log.v(TAG, "Author : " + value); 107 assertEquals(TAG, metadataFile[fileIndex][meta.AUTHOR.ordinal()], value); 108 109 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER); 110 Log.v(TAG, "Composer : " + value); 111 assertEquals(TAG, metadataFile[fileIndex][meta.COMPOSER.ordinal()], value); 112 113 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE); 114 Log.v(TAG, "Date : " + value); 115 assertEquals(TAG, metadataFile[fileIndex][meta.DATE.ordinal()], value); 116 117 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE); 118 Log.v(TAG, "Genre : " + value); 119 assertEquals(TAG, metadataFile[fileIndex][meta.GENRE.ordinal()], value); 120 121 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); 122 Log.v(TAG, "Title : " + value); 123 assertEquals(TAG, metadataFile[fileIndex][meta.TITLE.ordinal()], value); 124 125 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR); 126 Log.v(TAG, "Year : " + value); 127 assertEquals(TAG, metadataFile[fileIndex][meta.YEAR.ordinal()], value); 128 129 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 130 Log.v( 131 TAG, 132 "Expected = " 133 + metadataFile[fileIndex][meta.DURATION.ordinal()] 134 + "reult = " 135 + value); 136 // Only require that the returned duration is within 100ms of the expected 137 // one as PV and stagefright differ slightly in their implementation. 138 int durationDifferenceMs = 139 Math.abs( 140 Integer.parseInt(metadataFile[fileIndex][meta.DURATION.ordinal()]) 141 - Integer.parseInt(value)); 142 assertTrue(TAG, durationDifferenceMs < 100); 143 144 // METADATA_KEY_NUM_TRACKS should return the total number of tracks in the media 145 // include the video and audio 146 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS); 147 Log.v(TAG, "Track : " + value); 148 assertEquals(TAG, metadataFile[fileIndex][meta.NUM_TRACKS.ordinal()], value); 149 150 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_WRITER); 151 Log.v(TAG, "Writer : " + value); 152 assertEquals(TAG, metadataFile[fileIndex][meta.WRITER.ordinal()], value); 153 154 retriever.release(); 155 } 156 } 157