19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.mediaframeworktest.functional; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaMetadataRetriever; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.Suppress; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.mediaframeworktest.MediaNames; 26b1c85ec47a6ee026a5d7ee4c0e683b9cbd6599e5James Dongimport com.android.mediaframeworktest.MediaProfileReader; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This metadata test suite test the basic functionality of the 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * MediaMetadataRetriever 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class MediaMetadataTest extends AndroidTestCase { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "MediaMetadataTest"; 35b1c85ec47a6ee026a5d7ee4c0e683b9cbd6599e5James Dong 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static enum METADATA_EXPECTEDRESULT{ 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FILE_PATH,CD_TRACK, ALBUM, 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ARTIST, AUTHOR, COMPOSER, 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DATE, GENRE, TITLE, 40c9706f0262a2f399f95e0d78ba2b7616e08d0069Sahil Sachdeva YEAR, DURATION, NUM_TRACKS, WRITER 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static enum MP3_TEST_FILE{ 44c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau ID3V1V2, ID3V2, ID3V1 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static METADATA_EXPECTEDRESULT meta; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static MP3_TEST_FILE mp3_test_file; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void testID3V1V2Metadata() throws Exception { 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project validateMetatData(mp3_test_file.ID3V1V2.ordinal(), MediaNames.META_DATA_MP3); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void testID3V2Metadata() throws Exception { 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project validateMetatData(mp3_test_file.ID3V2.ordinal(), MediaNames.META_DATA_MP3); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void testID3V1Metadata() throws Exception { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project validateMetatData(mp3_test_file.ID3V1.ordinal(), MediaNames.META_DATA_MP3); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void validateMetatData(int fileIndex, String meta_data_file[][]) { 66b1c85ec47a6ee026a5d7ee4c0e683b9cbd6599e5James Dong Log.v(TAG, "filePath = "+ meta_data_file[fileIndex][0]); 67b1c85ec47a6ee026a5d7ee4c0e683b9cbd6599e5James Dong if ((meta_data_file[fileIndex][0].endsWith("wma") && !MediaProfileReader.getWMAEnable()) || 68b1c85ec47a6ee026a5d7ee4c0e683b9cbd6599e5James Dong (meta_data_file[fileIndex][0].endsWith("wmv") && !MediaProfileReader.getWMVEnable())) { 69b1c85ec47a6ee026a5d7ee4c0e683b9cbd6599e5James Dong return; 70b1c85ec47a6ee026a5d7ee4c0e683b9cbd6599e5James Dong } 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String value = null; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.setDataSource(meta_data_file[fileIndex][0]); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Failed: "+meta_data_file[fileIndex][0] + " " + e.toString()); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Set the test case failure whenever it failed to setDataSource 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("Failed to setDataSource ", false); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //METADATA_KEY_CD_TRACK_NUMBER should return the TCRK value 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "CD_TRACK_NUMBER : " + value); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(TAG, meta_data_file[fileIndex][meta.CD_TRACK.ordinal()], value); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Album : "+ value); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(TAG, meta_data_file[fileIndex][meta.ALBUM.ordinal()], value); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Artist : "+ value); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(TAG, meta_data_file[fileIndex][meta.ARTIST.ordinal()], value); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Author : "+ value); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(TAG, meta_data_file[fileIndex][meta.AUTHOR.ordinal()], value); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Composer : "+ value); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(TAG, meta_data_file[fileIndex][meta.COMPOSER.ordinal()], value); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Date : "+ value); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(TAG, meta_data_file[fileIndex][meta.DATE.ordinal()], value); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Genre : "+ value); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(TAG, meta_data_file[fileIndex][meta.GENRE.ordinal()], value); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Title : "+ value); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(TAG, meta_data_file[fileIndex][meta.TITLE.ordinal()], value); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Year : "+ value); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(TAG, meta_data_file[fileIndex][meta.YEAR.ordinal()], value); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Expected = " + meta_data_file[fileIndex][meta.DURATION.ordinal()] + "reult = " + value); 12006b3ff7d5a7903d6804d295110820c121629ee4dAndreas Huber // Only require that the returned duration is within 100ms of the expected 12106b3ff7d5a7903d6804d295110820c121629ee4dAndreas Huber // one as PV and stagefright differ slightly in their implementation. 12206b3ff7d5a7903d6804d295110820c121629ee4dAndreas Huber assertTrue(TAG, Math.abs(Integer.parseInt( 12306b3ff7d5a7903d6804d295110820c121629ee4dAndreas Huber meta_data_file[fileIndex][meta.DURATION.ordinal()]) 12406b3ff7d5a7903d6804d295110820c121629ee4dAndreas Huber - Integer.parseInt(value)) < 100); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //METADATA_KEY_NUM_TRACKS should return the total number of tracks in the media 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //include the video and audio 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Track : "+ value); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(TAG,meta_data_file[fileIndex][meta.NUM_TRACKS.ordinal()], value); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 132c9706f0262a2f399f95e0d78ba2b7616e08d0069Sahil Sachdeva value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_WRITER); 133c9706f0262a2f399f95e0d78ba2b7616e08d0069Sahil Sachdeva Log.v(TAG, "Writer : "+ value); 134c9706f0262a2f399f95e0d78ba2b7616e08d0069Sahil Sachdeva assertEquals(TAG,meta_data_file[fileIndex][meta.WRITER.ordinal()], value); 135c9706f0262a2f399f95e0d78ba2b7616e08d0069Sahil Sachdeva 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.release(); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 139