MediaMetadataTest.java revision 11eab056dd0133a390169d3581edf3eef26d6a54
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 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        try {
206            retriever.setDataSource(meta_data_file[fileIndex][0]);
207        } catch(Exception e) {
208            Log.v(TAG, "Failed: "+meta_data_file[fileIndex][0] + " " + e.toString());
209            //Set the test case failure whenever it failed to setDataSource
210            assertTrue("Failed to setDataSource ", false);
211        }
212
213        //METADATA_KEY_CD_TRACK_NUMBER should return the TCRK value
214        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
215        Log.v(TAG, "CD_TRACK_NUMBER : " + value);
216        assertEquals(TAG, meta_data_file[fileIndex][meta.CD_TRACK.ordinal()], value);
217
218        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
219        Log.v(TAG, "Album : "+ value);
220        assertEquals(TAG, meta_data_file[fileIndex][meta.ALBUM.ordinal()], value);
221
222        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
223        Log.v(TAG, "Artist : "+ value);
224        assertEquals(TAG, meta_data_file[fileIndex][meta.ARTIST.ordinal()], value);
225
226        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR);
227        Log.v(TAG, "Author : "+ value);
228        assertEquals(TAG, meta_data_file[fileIndex][meta.AUTHOR.ordinal()], value);
229
230        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER);
231        Log.v(TAG, "Composer : "+ value);
232        assertEquals(TAG, meta_data_file[fileIndex][meta.COMPOSER.ordinal()], value);
233
234        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE);
235        Log.v(TAG, "Date : "+ value);
236        assertEquals(TAG, meta_data_file[fileIndex][meta.DATE.ordinal()], value);
237
238        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
239        Log.v(TAG, "Genre : "+ value);
240        assertEquals(TAG, meta_data_file[fileIndex][meta.GENRE.ordinal()], value);
241
242        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
243        Log.v(TAG, "Title : "+ value);
244        assertEquals(TAG, meta_data_file[fileIndex][meta.TITLE.ordinal()], value);
245
246        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
247        Log.v(TAG, "Year : "+ value);
248        assertEquals(TAG, meta_data_file[fileIndex][meta.YEAR.ordinal()], value);
249
250        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
251        Log.v(TAG, "Expected = " + meta_data_file[fileIndex][meta.DURATION.ordinal()] + "reult = " + value);
252        // Only require that the returned duration is within 100ms of the expected
253        // one as PV and stagefright differ slightly in their implementation.
254        assertTrue(TAG, Math.abs(Integer.parseInt(
255                        meta_data_file[fileIndex][meta.DURATION.ordinal()])
256                            - Integer.parseInt(value)) < 100);
257
258        //METADATA_KEY_NUM_TRACKS should return the total number of tracks in the media
259        //include the video and audio
260        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS);
261        Log.v(TAG, "Track : "+ value);
262        assertEquals(TAG,meta_data_file[fileIndex][meta.NUM_TRACKS.ordinal()], value);
263
264        value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_WRITER);
265        Log.v(TAG, "Writer : "+ value);
266        assertEquals(TAG,meta_data_file[fileIndex][meta.WRITER.ordinal()], value);
267
268        retriever.release();
269    }
270}
271