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.unit; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaMetadataRetriever; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileOutputStream; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.mediaframeworktest.MediaNames; 2538b03a76616edffabb97f4131e268c701dffb00fJames Dongimport com.android.mediaframeworktest.MediaProfileReader; 263e7b3c0f270d2bf86fb701a94e55cb135480d571Yu Shan Emily Lauimport android.test.suitebuilder.annotation.*; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class MediaMetadataRetrieverTest extends AndroidTestCase { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "MediaMetadataRetrieverTest"; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test album art extraction. 333e7b3c0f270d2bf86fb701a94e55cb135480d571Yu Shan Emily Lau @MediumTest 34df9b349b960fff95dff4fcf8b2661899e33059daJames Dong public static void testGetEmbeddedPicture() throws Exception { 35df9b349b960fff95dff4fcf8b2661899e33059daJames Dong Log.v(TAG, "testGetEmbeddedPicture starts."); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 371b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong boolean supportWMA = MediaProfileReader.getWMAEnable(); 38454f69c84c294b8e0875788653a9c7d4fd80b233James Dong boolean hasFailed = false; 391b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong boolean supportWMV = MediaProfileReader.getWMVEnable(); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0, n = MediaNames.ALBUMART_TEST_FILES.length; i < n; ++i) { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "File " + i + ": " + MediaNames.ALBUMART_TEST_FILES[i]); 4338b03a76616edffabb97f4131e268c701dffb00fJames Dong if ((MediaNames.ALBUMART_TEST_FILES[i].endsWith(".wma") && !supportWMA) || 4438b03a76616edffabb97f4131e268c701dffb00fJames Dong (MediaNames.ALBUMART_TEST_FILES[i].endsWith(".wmv") && !supportWMV) 4538b03a76616edffabb97f4131e268c701dffb00fJames Dong ) { 4638b03a76616edffabb97f4131e268c701dffb00fJames Dong Log.v(TAG, "windows media is not supported and thus we will skip the test for this file"); 4738b03a76616edffabb97f4131e268c701dffb00fJames Dong continue; 4838b03a76616edffabb97f4131e268c701dffb00fJames Dong } 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.setDataSource(MediaNames.ALBUMART_TEST_FILES[i]); 50df9b349b960fff95dff4fcf8b2661899e33059daJames Dong byte[] albumArt = retriever.getEmbeddedPicture(); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // A better test would be to compare the retrieved album art with the 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // known result. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (albumArt == null) { // Do we have expect in JUnit? 56df9b349b960fff95dff4fcf8b2661899e33059daJames Dong Log.e(TAG, "Fails to get embedded picture for " + MediaNames.ALBUMART_TEST_FILES[i]); 57454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 60454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "Fails to setDataSource for " + MediaNames.ALBUMART_TEST_FILES[i]); 61454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.yield(); // Don't be evil 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.release(); 66df9b349b960fff95dff4fcf8b2661899e33059daJames Dong Log.v(TAG, "testGetEmbeddedPicture completes."); 67454f69c84c294b8e0875788653a9c7d4fd80b233James Dong assertTrue(!hasFailed); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test frame capture 71525ad18663bdac0b378f5ae1db4de66ca71d907eJames Dong @LargeTest 72525ad18663bdac0b378f5ae1db4de66ca71d907eJames Dong public static void testThumbnailCapture() throws Exception { 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 741b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong boolean supportWMA = MediaProfileReader.getWMAEnable(); 751b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong boolean supportWMV = MediaProfileReader.getWMVEnable(); 76454f69c84c294b8e0875788653a9c7d4fd80b233James Dong boolean hasFailed = false; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Thumbnail processing starts"); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long startedAt = System.currentTimeMillis(); 79c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau for(int i = 0, n = MediaNames.THUMBNAIL_METADATA_TEST_FILES.length; i < n; ++i) { 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 81c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau Log.v(TAG, "File " + i + ": " + MediaNames.THUMBNAIL_METADATA_TEST_FILES[i]); 82c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau if ((MediaNames.THUMBNAIL_METADATA_TEST_FILES[i].endsWith(".wma") && !supportWMA) || 83c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau (MediaNames.THUMBNAIL_METADATA_TEST_FILES[i].endsWith(".wmv") && !supportWMV) 8438b03a76616edffabb97f4131e268c701dffb00fJames Dong ) { 8538b03a76616edffabb97f4131e268c701dffb00fJames Dong Log.v(TAG, "windows media is not supported and thus we will skip the test for this file"); 8638b03a76616edffabb97f4131e268c701dffb00fJames Dong continue; 8738b03a76616edffabb97f4131e268c701dffb00fJames Dong } 88c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau retriever.setDataSource(MediaNames.THUMBNAIL_METADATA_TEST_FILES[i]); 89f6bd1ea0c79516a5ef3c0c463761deec1a80e419James Dong Bitmap bitmap = retriever.getFrameAtTime(-1); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(bitmap != null); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 92c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau java.io.OutputStream stream = new FileOutputStream(MediaNames.THUMBNAIL_METADATA_TEST_FILES[i] + ".jpg"); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bitmap.compress(Bitmap.CompressFormat.JPEG, 75, stream); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stream.close(); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 96c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau Log.e(TAG, "Fails to convert the bitmap to a JPEG file for " + MediaNames.THUMBNAIL_METADATA_TEST_FILES[i]); 97454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 987411c1b8364ad1340c20f1da546e307c2d330e63James Dong Log.e(TAG, e.toString()); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 101c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau Log.e(TAG, "Fails to setDataSource for file " + MediaNames.THUMBNAIL_METADATA_TEST_FILES[i]); 102454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.yield(); // Don't be evil 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long endedAt = System.currentTimeMillis(); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.release(); 108454f69c84c294b8e0875788653a9c7d4fd80b233James Dong assertTrue(!hasFailed); 109c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau Log.v(TAG, "Average processing time per thumbnail: " + (endedAt - startedAt)/MediaNames.THUMBNAIL_METADATA_TEST_FILES.length + " ms"); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @LargeTest 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void testMetadataRetrieval() throws Exception { 1141b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong boolean supportWMA = MediaProfileReader.getWMAEnable(); 1151b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong boolean supportWMV = MediaProfileReader.getWMVEnable(); 116454f69c84c294b8e0875788653a9c7d4fd80b233James Dong boolean hasFailed = false; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 118c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau for(int i = 0, n = MediaNames.THUMBNAIL_METADATA_TEST_FILES.length; i < n; ++i) { 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 120c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau Log.v(TAG, "File " + i + ": " + MediaNames.THUMBNAIL_METADATA_TEST_FILES[i]); 121c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau if ((MediaNames.THUMBNAIL_METADATA_TEST_FILES[i].endsWith(".wma") && !supportWMA) || 122c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau (MediaNames.THUMBNAIL_METADATA_TEST_FILES[i].endsWith(".wmv") && !supportWMV) 12338b03a76616edffabb97f4131e268c701dffb00fJames Dong ) { 12438b03a76616edffabb97f4131e268c701dffb00fJames Dong Log.v(TAG, "windows media is not supported and thus we will skip the test for this file"); 12538b03a76616edffabb97f4131e268c701dffb00fJames Dong continue; 12638b03a76616edffabb97f4131e268c701dffb00fJames Dong } 127c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau retriever.setDataSource(MediaNames.THUMBNAIL_METADATA_TEST_FILES[i]); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project extractAllSupportedMetadataValues(retriever); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 130c4fe54a2385e8e67dcfed6b2c365214ed020d245Yu Shan Emily Lau Log.e(TAG, "Fails to setDataSource for file " + MediaNames.THUMBNAIL_METADATA_TEST_FILES[i]); 131454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.yield(); // Don't be evil 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.release(); 136454f69c84c294b8e0875788653a9c7d4fd80b233James Dong assertTrue(!hasFailed); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If the specified call order and valid media file is used, no exception 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // should be thrown. 1413e7b3c0f270d2bf86fb701a94e55cb135480d571Yu Shan Emily Lau @MediumTest 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void testBasicNormalMethodCallSequence() throws Exception { 143454f69c84c294b8e0875788653a9c7d4fd80b233James Dong boolean hasFailed = false; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.setDataSource(MediaNames.TEST_PATH_1); 147f6bd1ea0c79516a5ef3c0c463761deec1a80e419James Dong Bitmap bitmap = retriever.getFrameAtTime(-1); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(bitmap != null); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project java.io.OutputStream stream = new FileOutputStream("/sdcard/thumbnailout.jpg"); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bitmap.compress(Bitmap.CompressFormat.JPEG, 75, stream); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stream.close(); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new Exception("Fails to convert the bitmap to a JPEG file for " + MediaNames.TEST_PATH_1, e); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project extractAllSupportedMetadataValues(retriever); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 158454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "Fails to setDataSource for " + MediaNames.TEST_PATH_1, e); 159454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.release(); 162454f69c84c294b8e0875788653a9c7d4fd80b233James Dong assertTrue(!hasFailed); 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 165f6bd1ea0c79516a5ef3c0c463761deec1a80e419James Dong // If setDataSource() has not been called, both getFrameAtTime() and extractMetadata() must 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // return null. 1673e7b3c0f270d2bf86fb701a94e55cb135480d571Yu Shan Emily Lau @MediumTest 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void testBasicAbnormalMethodCallSequence() { 169454f69c84c294b8e0875788653a9c7d4fd80b233James Dong boolean hasFailed = false; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 171454f69c84c294b8e0875788653a9c7d4fd80b233James Dong if (retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM) != null) { 172454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "No album metadata expected, but is available"); 173454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 174454f69c84c294b8e0875788653a9c7d4fd80b233James Dong } 175f6bd1ea0c79516a5ef3c0c463761deec1a80e419James Dong if (retriever.getFrameAtTime(-1) != null) { 176454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "No frame expected, but is available"); 177454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 178454f69c84c294b8e0875788653a9c7d4fd80b233James Dong } 179454f69c84c294b8e0875788653a9c7d4fd80b233James Dong assertTrue(!hasFailed); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test setDataSource() 1833e7b3c0f270d2bf86fb701a94e55cb135480d571Yu Shan Emily Lau @MediumTest 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void testSetDataSource() { 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 186454f69c84c294b8e0875788653a9c7d4fd80b233James Dong boolean hasFailed = false; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Null pointer argument 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String path = null; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.setDataSource(path); 192454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "IllegalArgumentException failed to be thrown."); 193454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 195454f69c84c294b8e0875788653a9c7d4fd80b233James Dong if (!(e instanceof IllegalArgumentException)) { 196454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "Expected a IllegalArgumentException, but got a different exception"); 197454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 198454f69c84c294b8e0875788653a9c7d4fd80b233James Dong } 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Use mem:// path 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.setDataSource(MediaNames.TEST_PATH_5); 204454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "IllegalArgumentException failed to be thrown."); 205454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 207454f69c84c294b8e0875788653a9c7d4fd80b233James Dong if (!(e instanceof IllegalArgumentException)) { 208454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "Expected a IllegalArgumentException, but got a different exception"); 209454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 210454f69c84c294b8e0875788653a9c7d4fd80b233James Dong } 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The pathname does not correspond to any existing file 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.setDataSource(MediaNames.TEST_PATH_4); 216454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "RuntimeException failed to be thrown."); 217454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 219454f69c84c294b8e0875788653a9c7d4fd80b233James Dong if (!(e instanceof RuntimeException)) { 220454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "Expected a RuntimeException, but got a different exception"); 221454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 222454f69c84c294b8e0875788653a9c7d4fd80b233James Dong } 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The pathname does correspond to a file, but this file 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // is not a valid media file 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.setDataSource(MediaNames.TEST_PATH_3); 229454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "RuntimeException failed to be thrown."); 230454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 232454f69c84c294b8e0875788653a9c7d4fd80b233James Dong if (!(e instanceof RuntimeException)) { 233454f69c84c294b8e0875788653a9c7d4fd80b233James Dong Log.e(TAG, "Expected a RuntimeException, but got a different exception"); 234454f69c84c294b8e0875788653a9c7d4fd80b233James Dong hasFailed = true; 235454f69c84c294b8e0875788653a9c7d4fd80b233James Dong } 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project retriever.release(); 239454f69c84c294b8e0875788653a9c7d4fd80b233James Dong assertTrue(!hasFailed); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Encode and test for the correct mix of metadata elements on a per-file basis? 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // We should be able to compare the actual returned metadata with the expected metadata 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // with each given sample test file. 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void extractAllSupportedMetadataValues(MediaMetadataRetriever retriever) { 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String value = null; 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER)) == null? "not found": value); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)) == null? "not found": value); 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS)) == null? "not found": value); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM)) == null? "not found": value); 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)) == null? "not found": value); 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR)) == null? "not found": value); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER)) == null? "not found": value); 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)) == null? "not found": value); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE)) == null? "not found": value); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)) == null? "not found": value); 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, (value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR)) == null? "not found": value); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 261