MediaMetadataTest.java revision d1d17b165139681dc66c000fdfe9e14fb1bc35c0
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 17package com.android.mediaframeworktest.functional; 18 19import android.media.MediaMetadataRetriever; 20import android.test.AndroidTestCase; 21import android.test.suitebuilder.annotation.MediumTest; 22import android.test.suitebuilder.annotation.Suppress; 23import android.util.Log; 24 25import com.android.mediaframeworktest.MediaNames; 26import com.android.mediaframeworktest.MediaProfileReader; 27/** 28 * This metadata test suite test the basic functionality of the 29 * MediaMetadataRetriever 30 * 31 */ 32public 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 METADATA_EXPECTEDRESULT meta; 51 public static MP3_TEST_FILE mp3_test_file; 52 53 @MediumTest 54 public static void testID3V1V2Metadata() throws Exception { 55 validateMetatData(mp3_test_file.ID3V1V2.ordinal(), MediaNames.META_DATA_MP3); 56 } 57 58 @MediumTest 59 public static void testID3V2Metadata() throws Exception { 60 validateMetatData(mp3_test_file.ID3V2.ordinal(), MediaNames.META_DATA_MP3); 61 } 62 63 @MediumTest 64 public static void testID3V1Metadata() throws Exception { 65 validateMetatData(mp3_test_file.ID3V1.ordinal(), MediaNames.META_DATA_MP3); 66 } 67 68 @MediumTest 69 public static void testCorruptedID3V1Metadata() throws Exception { 70 validateMetatData(mp3_test_file.CORRUPTED_ID3V1.ordinal(), MediaNames.META_DATA_MP3); 71 } 72 73 @MediumTest 74 public static void testCorrupted_ID3V2_TALBMetadata() throws Exception { 75 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TALB.ordinal(), MediaNames.META_DATA_MP3); 76 } 77 78 @MediumTest 79 public static void testCorrupted_ID3V2_TCOMMetadata() throws Exception { 80 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TCOM.ordinal(), MediaNames.META_DATA_MP3); 81 } 82 83 @MediumTest 84 public static void testCorrupted_ID3V2_TCOMM2etadata() throws Exception { 85 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TCOM_2.ordinal(), MediaNames.META_DATA_MP3); 86 } 87 88 @MediumTest 89 public static void testCorrupted_ID3V2_TRCKMetadata() throws Exception { 90 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TRCK.ordinal(), MediaNames.META_DATA_MP3); 91 } 92 93 @MediumTest 94 public static void testCorrupted_ID3V2_TRCK2Metadata() throws Exception { 95 validateMetatData(mp3_test_file.CORRUPTED_D3V2_TRCK_2.ordinal(), MediaNames.META_DATA_MP3); 96 } 97 98 @MediumTest 99 public static void testCorrupted_ID3V2_TYERMetadata() throws Exception { 100 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TYER.ordinal(), MediaNames.META_DATA_MP3); 101 } 102 103 @MediumTest 104 public static void testCorrupted_ID3V2_TYER2Metadata() throws Exception { 105 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TYER_2.ordinal(), MediaNames.META_DATA_MP3); 106 } 107 108 @MediumTest 109 public static void testCorrupted_ID3V2_TITMetadata() throws Exception { 110 validateMetatData(mp3_test_file.CORRUPTED_ID3V2_TIT.ordinal(), MediaNames.META_DATA_MP3); 111 } 112 113 114 private static void validateMetatData(int fileIndex, String meta_data_file[][]) { 115 Log.v(TAG, "filePath = "+ meta_data_file[fileIndex][0]); 116 if ((meta_data_file[fileIndex][0].endsWith("wma") && !MediaProfileReader.getWMAEnable()) || 117 (meta_data_file[fileIndex][0].endsWith("wmv") && !MediaProfileReader.getWMVEnable())) { 118 return; 119 } 120 String value = null; 121 MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 122 try { 123 retriever.setDataSource(meta_data_file[fileIndex][0]); 124 } catch(Exception e) { 125 Log.v(TAG, "Failed: "+meta_data_file[fileIndex][0] + " " + e.toString()); 126 //Set the test case failure whenever it failed to setDataSource 127 assertTrue("Failed to setDataSource ", false); 128 } 129 130 //METADATA_KEY_CD_TRACK_NUMBER should return the TCRK value 131 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER); 132 Log.v(TAG, "CD_TRACK_NUMBER : " + value); 133 assertEquals(TAG, meta_data_file[fileIndex][meta.CD_TRACK.ordinal()], value); 134 135 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); 136 Log.v(TAG, "Album : "+ value); 137 assertEquals(TAG, meta_data_file[fileIndex][meta.ALBUM.ordinal()], value); 138 139 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); 140 Log.v(TAG, "Artist : "+ value); 141 assertEquals(TAG, meta_data_file[fileIndex][meta.ARTIST.ordinal()], value); 142 143 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR); 144 Log.v(TAG, "Author : "+ value); 145 assertEquals(TAG, meta_data_file[fileIndex][meta.AUTHOR.ordinal()], value); 146 147 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER); 148 Log.v(TAG, "Composer : "+ value); 149 assertEquals(TAG, meta_data_file[fileIndex][meta.COMPOSER.ordinal()], value); 150 151 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE); 152 Log.v(TAG, "Date : "+ value); 153 assertEquals(TAG, meta_data_file[fileIndex][meta.DATE.ordinal()], value); 154 155 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE); 156 Log.v(TAG, "Genre : "+ value); 157 assertEquals(TAG, meta_data_file[fileIndex][meta.GENRE.ordinal()], value); 158 159 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); 160 Log.v(TAG, "Title : "+ value); 161 assertEquals(TAG, meta_data_file[fileIndex][meta.TITLE.ordinal()], value); 162 163 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR); 164 Log.v(TAG, "Year : "+ value); 165 assertEquals(TAG, meta_data_file[fileIndex][meta.YEAR.ordinal()], value); 166 167 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 168 Log.v(TAG, "Expected = " + meta_data_file[fileIndex][meta.DURATION.ordinal()] + "reult = " + value); 169 // Only require that the returned duration is within 100ms of the expected 170 // one as PV and stagefright differ slightly in their implementation. 171 assertTrue(TAG, Math.abs(Integer.parseInt( 172 meta_data_file[fileIndex][meta.DURATION.ordinal()]) 173 - Integer.parseInt(value)) < 100); 174 175 //METADATA_KEY_NUM_TRACKS should return the total number of tracks in the media 176 //include the video and audio 177 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS); 178 Log.v(TAG, "Track : "+ value); 179 assertEquals(TAG,meta_data_file[fileIndex][meta.NUM_TRACKS.ordinal()], value); 180 181 value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_WRITER); 182 Log.v(TAG, "Writer : "+ value); 183 assertEquals(TAG,meta_data_file[fileIndex][meta.WRITER.ordinal()], value); 184 185 retriever.release(); 186 } 187} 188