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