Home | History | Annotate | Download | only in functional
      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