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.test.suitebuilder.annotation.Suppress; 23 import android.util.Log; 24 25 import com.android.mediaframeworktest.MediaNames; 26 import com.android.mediaframeworktest.MediaProfileReader; 27 /** 28 * This metadata test suite test the basic functionality of the 29 * MediaMetadataRetriever 30 * 31 */ 32 public class MediaMetadataTest extends AndroidTestCase { 33 34 private static final String TAG = "MediaMetadataTest"; 35 36 public static enum METADATA_EXPECTEDRESULT{ 37 FILE_PATH,CD_TRACK, ALBUM, 38 ARTIST, AUTHOR, COMPOSER, 39 DATE, GENRE, TITLE, 40 YEAR, DURATION, NUM_TRACKS, WRITER 41 } 42 43 public static enum MP3_TEST_FILE{ 44 ID3V1V2, ID3V2, ID3V1, 45 CORRUPTED_ID3V1, CORRUPTED_ID3V2_TALB, CORRUPTED_ID3V2_TCOM, 46 CORRUPTED_ID3V2_TCOM_2, CORRUPTED_ID3V2_TRCK, CORRUPTED_D3V2_TRCK_2, 47 CORRUPTED_ID3V2_TYER, CORRUPTED_ID3V2_TYER_2, CORRUPTED_ID3V2_TIT 48 } 49 50 public static enum NON_MP3_TEST_FILE{ 51 THREE3GP, AMRNB, AMRWB, M4A1, M4V, MIDI, 52 H264, OGG1, OGG2, WAV, WMA9, WMA10, WMV9, WMV7 53 } 54 55 public static METADATA_EXPECTEDRESULT meta; 56 public static MP3_TEST_FILE mp3_test_file; 57 public static NON_MP3_TEST_FILE non_mp3_test_file; 58 59 @MediumTest 60 public static void testID3V1V2Metadata() throws Exception { 61 validateMetatData(mp3_test_file.ID3V1V2.ordinal(), MediaNames.META_DATA_MP3); 62 } 63 64 @MediumTest 65 public static void testID3V2Metadata() throws Exception { 66 validateMetatData(mp3_test_file.ID3V2.ordinal(), MediaNames.META_DATA_MP3); 67 } 68 69 @MediumTest 70 public static void testID3V1Metadata() throws Exception { 71 validateMetatData(mp3_test_file.ID3V1.ordinal(), MediaNames.META_DATA_MP3); 72 } 73 74 @MediumTest 75 public static void testCorruptedID3V1Metadata() throws Exception { 76 validateMetatData(mp3_test_file.CORRUPTED_ID3V1.ordinal(), MediaNames.META_DATA_MP3); 77 } 78 79 @MediumTest 80 public static void testCorrupted_ID3V2_TALBMetadata() throws Exception { 81 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TALB.ordinal(), MediaNames.META_DATA_MP3); 82 } 83 84 @MediumTest 85 public static void testCorrupted_ID3V2_TCOMMetadata() throws Exception { 86 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TCOM.ordinal(), MediaNames.META_DATA_MP3); 87 } 88 89 @MediumTest 90 public static void testCorrupted_ID3V2_TCOMM2etadata() throws Exception { 91 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TCOM_2.ordinal(), MediaNames.META_DATA_MP3); 92 } 93 94 @MediumTest 95 public static void testCorrupted_ID3V2_TRCKMetadata() throws Exception { 96 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TRCK.ordinal(), MediaNames.META_DATA_MP3); 97 } 98 99 @MediumTest 100 public static void testCorrupted_ID3V2_TRCK2Metadata() throws Exception { 101 validateMetatData(mp3_test_file.CORRUPTED_D3V2_TRCK_2.ordinal(), MediaNames.META_DATA_MP3); 102 } 103 104 @MediumTest 105 public static void testCorrupted_ID3V2_TYERMetadata() throws Exception { 106 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TYER.ordinal(), MediaNames.META_DATA_MP3); 107 } 108 109 @MediumTest 110 public static void testCorrupted_ID3V2_TYER2Metadata() throws Exception { 111 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TYER_2.ordinal(), MediaNames.META_DATA_MP3); 112 } 113 114 @MediumTest 115 public static void testCorrupted_ID3V2_TITMetadata() throws Exception { 116 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TIT.ordinal(), MediaNames.META_DATA_MP3); 117 } 118 119 @MediumTest 120 public static void test3gp_Metadata() throws Exception { 121 validateMetatData(non_mp3_test_file.THREE3GP.ordinal(), MediaNames.META_DATA_OTHERS); 122 } 123 124 @MediumTest 125 public static void testAmr_Metadata() throws Exception { 126 validateMetatData(non_mp3_test_file.AMRNB.ordinal(), MediaNames.META_DATA_OTHERS); 127 } 128 129 @MediumTest 130 public static void testAmrWb_Metadata() throws Exception { 131 validateMetatData(non_mp3_test_file.AMRWB.ordinal(), MediaNames.META_DATA_OTHERS); 132 } 133 134 @MediumTest 135 public static void testM4A1_Metadata() throws Exception { 136 validateMetatData(non_mp3_test_file.M4A1.ordinal(), MediaNames.META_DATA_OTHERS); 137 } 138 139 @MediumTest 140 public static void testM4v_Metadata() throws Exception { 141 validateMetatData(non_mp3_test_file.M4V.ordinal(), MediaNames.META_DATA_OTHERS); 142 } 143 144 @MediumTest 145 public static void testH264_Metadata() throws Exception { 146 validateMetatData(non_mp3_test_file.H264.ordinal(), MediaNames.META_DATA_OTHERS); 147 } 148 //bug# 1440489 149 @Suppress 150 @MediumTest 151 public static void testOgg1_Metadata() throws Exception { 152 validateMetatData(non_mp3_test_file.OGG1.ordinal(), MediaNames.META_DATA_OTHERS); 153 } 154 155 @Suppress 156 @MediumTest 157 public static void testOgg2_Metadata() throws Exception { 158 validateMetatData(non_mp3_test_file.OGG2.ordinal(), MediaNames.META_DATA_OTHERS); 159 } 160 161 @Suppress 162 @MediumTest 163 public static void testMidi_Metadata() throws Exception { 164 validateMetatData(non_mp3_test_file.MIDI.ordinal(), MediaNames.META_DATA_OTHERS); 165 } 166 167 @MediumTest 168 public static void testWav_Metadata() throws Exception { 169 validateMetatData(non_mp3_test_file.WAV.ordinal(), MediaNames.META_DATA_OTHERS); 170 } 171 172 @Suppress 173 @MediumTest 174 public static void testWma9_Metadata() throws Exception { 175 validateMetatData(non_mp3_test_file.WMA9.ordinal(), MediaNames.META_DATA_OTHERS); 176 } 177 178 @Suppress 179 @MediumTest 180 public static void testWma10_Metadata() throws Exception { 181 validateMetatData(non_mp3_test_file.WMA10.ordinal(), MediaNames.META_DATA_OTHERS); 182 } 183 184 @Suppress 185 @MediumTest 186 public static void testWmv9_Metadata() throws Exception { 187 validateMetatData(non_mp3_test_file.WMV9.ordinal(), MediaNames.META_DATA_OTHERS); 188 } 189 190 @Suppress 191 @MediumTest 192 public static void testWmv10_Metadata() throws Exception { 193 validateMetatData(non_mp3_test_file.WMV7.ordinal(), MediaNames.META_DATA_OTHERS); 194 } 195 196 private static void validateMetatData(int fileIndex, String meta_data_file[][]) { 197 Log.v(TAG, "filePath = "+ meta_data_file[fileIndex][0]); 198 if ((meta_data_file[fileIndex][0].endsWith("wma") && !MediaProfileReader.getWMAEnable()) || 199 (meta_data_file[fileIndex][0].endsWith("wmv") && !MediaProfileReader.getWMVEnable())) { 200 Log.v(TAG, "Skip test since windows media is not supported"); 201 return; 202 } 203 String value = null; 204 MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 205 retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY); 206 try { 207 retriever.setDataSource(meta_data_file[fileIndex][0]); 208 } catch(Exception e) { 209 Log.v(TAG, "Failed: "+meta_data_file[fileIndex][0] + " " + e.toString()); 210 //Set the test case failure whenever it failed to setDataSource 211 assertTrue("Failed to setDataSource ", false); 212 } 213 214 //METADATA_KEY_CD_TRACK_NUMBER should return the TCRK value 215 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER); 216 Log.v(TAG, "CD_TRACK_NUMBER : " + value); 217 assertEquals(TAG, meta_data_file[fileIndex][meta.CD_TRACK.ordinal()], value); 218 219 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); 220 Log.v(TAG, "Album : "+ value); 221 assertEquals(TAG, meta_data_file[fileIndex][meta.ALBUM.ordinal()], value); 222 223 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); 224 Log.v(TAG, "Artist : "+ value); 225 assertEquals(TAG, meta_data_file[fileIndex][meta.ARTIST.ordinal()], value); 226 227 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR); 228 Log.v(TAG, "Author : "+ value); 229 assertEquals(TAG, meta_data_file[fileIndex][meta.AUTHOR.ordinal()], value); 230 231 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER); 232 Log.v(TAG, "Composer : "+ value); 233 assertEquals(TAG, meta_data_file[fileIndex][meta.COMPOSER.ordinal()], value); 234 235 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE); 236 Log.v(TAG, "Date : "+ value); 237 assertEquals(TAG, meta_data_file[fileIndex][meta.DATE.ordinal()], value); 238 239 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE); 240 Log.v(TAG, "Genre : "+ value); 241 assertEquals(TAG, meta_data_file[fileIndex][meta.GENRE.ordinal()], value); 242 243 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); 244 Log.v(TAG, "Title : "+ value); 245 assertEquals(TAG, meta_data_file[fileIndex][meta.TITLE.ordinal()], value); 246 247 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR); 248 Log.v(TAG, "Year : "+ value); 249 assertEquals(TAG, meta_data_file[fileIndex][meta.YEAR.ordinal()], value); 250 251 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 252 Log.v(TAG, "Expected = " + meta_data_file[fileIndex][meta.DURATION.ordinal()] + "reult = " + value); 253 // Only require that the returned duration is within 100ms of the expected 254 // one as PV and stagefright differ slightly in their implementation. 255 assertTrue(TAG, Math.abs(Integer.parseInt( 256 meta_data_file[fileIndex][meta.DURATION.ordinal()]) 257 - Integer.parseInt(value)) < 100); 258 259 //METADATA_KEY_NUM_TRACKS should return the total number of tracks in the media 260 //include the video and audio 261 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS); 262 Log.v(TAG, "Track : "+ value); 263 assertEquals(TAG,meta_data_file[fileIndex][meta.NUM_TRACKS.ordinal()], value); 264 265 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_WRITER); 266 Log.v(TAG, "Writer : "+ value); 267 assertEquals(TAG,meta_data_file[fileIndex][meta.WRITER.ordinal()], value); 268 269 retriever.release(); 270 } 271 } 272