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