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.functional; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//import android.content.Resources; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.mediaframeworktest.MediaFrameworkTest; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.mediaframeworktest.MediaNames; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.AssetFileDescriptor; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.BitmapFactory; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaMetadataRetriever; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaPlayer; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaRecorder; 31b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Projectimport android.os.Looper; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.SystemClock; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lauimport java.io.File; 36be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lauimport java.io.FileWriter; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream; 39be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lauimport java.io.OutputStream; 40be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lauimport java.io.Writer; 41be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lauimport java.io.FileOutputStream; 4255eef638fae461d40b1ad4b1738bdef355a2d482Xia Wangimport java.util.Random; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Junit / Instrumentation test case for the media player api 45d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 46d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou */ 47d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zoupublic class CodecTest { 48a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau private static String TAG = "CodecTest"; 49b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project private static MediaPlayer mMediaPlayer; 50b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project private MediaPlayer.OnPreparedListener mOnPreparedListener; 51d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 52c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau private static int WAIT_FOR_COMMAND_TO_COMPLETE = 60000; //1 min max. 53b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project private static boolean mInitialized = false; 54c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau private static boolean mPrepareReset = false; 55b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project private static Looper mLooper = null; 56b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project private static final Object lock = new Object(); 57b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project private static final Object prepareDone = new Object(); 58c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau private static final Object videoSizeChanged = new Object(); 5955eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang private static final Object onCompletion = new Object(); 60b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project private static boolean onPrepareSuccess = false; 61a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau public static boolean onCompleteSuccess = false; 62a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau public static boolean mPlaybackError = false; 63333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim public static boolean mFailedToCompleteWithNoError = true; 6485305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau public static int mMediaInfoUnknownCount = 0; 6585305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau public static int mMediaInfoVideoTrackLaggingCount = 0; 6685305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau public static int mMediaInfoBadInterleavingCount = 0; 6785305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau public static int mMediaInfoNotSeekableCount = 0; 6885305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau public static int mMediaInfoMetdataUpdateCount = 0; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 70d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou public static String printCpuInfo(){ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String cm = "dumpsys cpuinfo"; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String cpuinfo =null; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int ch; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Process p = Runtime.getRuntime().exec(cm); 76d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou InputStream in = p.getInputStream(); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuffer sb = new StringBuffer(512); 78d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou while ( ( ch = in.read() ) != -1 ){ 79d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou sb.append((char) ch); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 81d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou cpuinfo = sb.toString(); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (IOException e){ 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, e.toString()); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cpuinfo; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int getDuration(String filePath) { 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "getDuration - " + filePath); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 94d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mp.prepare(); 95be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau }catch (Exception e){ 96be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau Log.v(TAG, e.toString()); 97be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int duration = mp.getDuration(); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Duration " + duration); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 101d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou Log.v(TAG, "release"); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return duration; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean getCurrentPosition(String filePath){ 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "GetCurrentPosition - " + filePath); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int currentPosition = 0; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long t1=0; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long t2 =0; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "start playback"); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t1=SystemClock.uptimeMillis(); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(10000); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.pause(); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(MediaNames.PAUSE_WAIT_TIME); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t2=SystemClock.uptimeMillis(); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){ 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, e.toString()); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currentPosition = mp.getCurrentPosition(); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.stop(); 126d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mp.release(); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "mp currentPositon = " + currentPosition + " play duration = " + (t2-t1)); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //The currentposition should be within 10% of the sleep time 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //For the very short mp3, it should return the length instead of 10 seconds 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (filePath.equals(MediaNames.SHORTMP3)){ 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currentPosition < 1000 ) 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 134d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou if ((currentPosition < ((t2-t1) *1.2)) && (currentPosition > 0)) 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 138d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean seekTo(String filePath){ 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "seekTo " + filePath); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int currentPosition = 0; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.seekTo(MediaNames.SEEK_TIME); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(MediaNames.WAIT_TIME); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currentPosition = mp.getCurrentPosition(); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){ 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, e.getMessage()); 153d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.stop(); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "CurrentPosition = " + currentPosition); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //The currentposition should be at least greater than the 80% of seek time 158d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou if ((currentPosition > MediaNames.SEEK_TIME *0.8)) 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean setLooping(String filePath){ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int currentPosition = 0; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int duration = 0; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long t1 =0; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long t2 =0; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v (TAG, "SetLooping - " + filePath); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 174d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou duration = mp.getDuration(); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "setLooping duration " + duration); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setLooping(true); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(5000); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.seekTo(duration - 5000); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t1=SystemClock.uptimeMillis(); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(20000); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t2=SystemClock.uptimeMillis(); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "pause"); 184d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //Bug# 1106852 - IllegalStateException will be thrown if pause is called 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //in here 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //mp.pause(); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currentPosition = mp.getCurrentPosition(); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "looping position " + currentPosition + "duration = " + (t2-t1)); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){ 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Exception : " + e.toString()); 191d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.stop(); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //The current position should be within 20% of the sleep time 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //and should be greater than zero. 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((currentPosition < ((t2-t1-5000)*1.2)) && currentPosition > 0) 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 200d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean pause(String filePath) throws Exception { 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "pause - " + filePath); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean misPlaying = true; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean pauseResult = false; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long t1=0; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long t2=0; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 210d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mp.prepare(); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int duration = mp.getDuration(); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t1=SystemClock.uptimeMillis(); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(5000); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.pause(); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(MediaNames.PAUSE_WAIT_TIME); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t2=SystemClock.uptimeMillis(); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project misPlaying = mp.isPlaying(); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int curPosition = mp.getCurrentPosition(); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, filePath + " pause currentPositon " + curPosition); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "isPlaying "+ misPlaying + " wait time " + (t2 - t1) ); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String cpuinfo = printCpuInfo(); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, cpuinfo); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((curPosition>0) && (curPosition < ((t2-t1) * 1.3)) && (misPlaying == false)) 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pauseResult = true; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.stop(); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return pauseResult; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void prepareStopRelease(String filePath) throws Exception { 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "prepareStopRelease" + filePath); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.stop(); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void preparePauseRelease(String filePath) throws Exception { 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "preparePauseRelease" + filePath); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.pause(); 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 248d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 249c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau static MediaPlayer.OnVideoSizeChangedListener mOnVideoSizeChangedListener = 250c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau new MediaPlayer.OnVideoSizeChangedListener() { 251c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 252c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau synchronized (videoSizeChanged) { 253c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau Log.v(TAG, "sizechanged notification received ..."); 254c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau videoSizeChanged.notify(); 255c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 256c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 257c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau }; 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau //Register the videoSizeChanged listener 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int videoHeight(String filePath) throws Exception { 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "videoHeight - " + filePath); 262d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou int videoHeight = 0; 263c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau synchronized (lock) { 264c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau initializeMessageLooper(); 265c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau try { 266c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE); 267c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } catch(Exception e) { 268c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau Log.v(TAG, "looper was interrupted."); 269c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau return 0; 270c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 271c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 272c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau try { 273c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mMediaPlayer.setDataSource(filePath); 274c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mMediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder()); 275c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mMediaPlayer.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener); 276c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau synchronized (videoSizeChanged) { 277c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau try { 278c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mMediaPlayer.prepare(); 279c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mMediaPlayer.start(); 280c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau videoSizeChanged.wait(WAIT_FOR_COMMAND_TO_COMPLETE); 281c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } catch (Exception e) { 282c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau Log.v(TAG, "wait was interrupted"); 283c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 284c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 285c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau videoHeight = mMediaPlayer.getVideoHeight(); 286c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau terminateMessageLooper(); 287c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } catch (Exception e) { 288c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau Log.e(TAG, e.getMessage()); 289c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 290d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return videoHeight; 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 294c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau //Register the videoSizeChanged listener 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int videoWidth(String filePath) throws Exception { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "videoWidth - " + filePath); 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int videoWidth = 0; 298c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau 299c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau synchronized (lock) { 300c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau initializeMessageLooper(); 301c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau try { 302c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE); 303c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } catch(Exception e) { 304c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau Log.v(TAG, "looper was interrupted."); 305c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau return 0; 306c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 307c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 308c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau try { 309c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mMediaPlayer.setDataSource(filePath); 310c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mMediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder()); 311c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mMediaPlayer.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener); 312c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau synchronized (videoSizeChanged) { 313c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau try { 314c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mMediaPlayer.prepare(); 315c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mMediaPlayer.start(); 316c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau videoSizeChanged.wait(WAIT_FOR_COMMAND_TO_COMPLETE); 317c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } catch (Exception e) { 318c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau Log.v(TAG, "wait was interrupted"); 319c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 320c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 321c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau videoWidth = mMediaPlayer.getVideoWidth(); 322c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau terminateMessageLooper(); 323c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } catch (Exception e) { 324c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau Log.e(TAG, e.getMessage()); 325d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return videoWidth; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //This also test the streaming video which may take a long 330d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //time to start the playback. 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean videoSeekTo(String filePath) throws Exception { 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "videoSeekTo - " + filePath); 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int currentPosition = 0; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int duration = 0; 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean videoResult = false; 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder()); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (filePath.equals(MediaNames.VIDEO_SHORT_3GP)){ 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.pause(); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(MediaNames.PAUSE_WAIT_TIME); 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.seekTo(0); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(1000); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currentPosition = mp.getCurrentPosition(); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG,"short position " + currentPosition); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currentPosition > 100 ) 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(5000); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project duration = mp.getDuration(); 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "video duration " + duration); 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.pause(); 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(MediaNames.PAUSE_WAIT_TIME); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.seekTo(duration - 20000 ); 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(1000); 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.pause(); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(MediaNames.PAUSE_WAIT_TIME); 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.seekTo(duration/2); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(10000); 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currentPosition = mp.getCurrentPosition(); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "video currentPosition " + currentPosition); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currentPosition > (duration /2 )*0.9) 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean seekToEnd(String filePath){ 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "seekToEnd - " + filePath); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int duration = 0; 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int currentPosition = 0; 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isPlaying = false; 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "start playback"); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project duration = mp.getDuration(); 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.seekTo(duration - 3000); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(6000); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){} 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isPlaying = mp.isPlaying(); 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currentPosition = mp.getCurrentPosition(); 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.stop(); 396d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mp.release(); 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "duration = " + duration); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currentPosition < 0.9 * duration || isPlaying) 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 401d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou return true; 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean shortMediaStop(String filePath){ 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "shortMediaStop - " + filePath); 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //This test is only for the short media file 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int duration = 0; 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int currentPosition = 0; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isPlaying = false; 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "start playback"); 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project duration = mp.getDuration(); 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(10000); 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){} 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isPlaying = mp.isPlaying(); 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currentPosition = mp.getCurrentPosition(); 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying); 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.stop(); 423d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mp.release(); 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "duration = " + duration); 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currentPosition > duration || isPlaying) 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 428d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou return true; 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean playToEnd(String filePath){ 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "shortMediaStop - " + filePath); 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //This test is only for the short media file 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int duration = 200000; 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int updateDuration = 0; 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int currentPosition = 0; 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isPlaying = false; 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(5000); 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "start playback"); 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //duration = mp.getDuration(); 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(50000); 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){} 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isPlaying = mp.isPlaying(); 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currentPosition = mp.getCurrentPosition(); 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //updateDuration = mp.getDuration(); 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying); 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.stop(); 453d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mp.release(); 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Log.v(TAG, "duration = " + duration); 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Log.v(TAG, "Update duration = " + updateDuration); 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currentPosition > duration || isPlaying) 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 459d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou return true; 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean seektoBeforeStart(String filePath){ 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "seektoBeforeStart - " + filePath); 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //This test is only for the short media file 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int duration = 0; 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int currentPosition = 0; 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project duration = mp.getDuration(); 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.seekTo(duration - 10000); 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currentPosition=mp.getCurrentPosition(); 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.stop(); 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){} 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currentPosition < duration/2) 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 482d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou return true; 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean mediaRecorderRecord(String filePath){ 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "SoundRecording - " + filePath); 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //This test is only for the short media file 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int duration = 0; 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaRecorder mRecorder = new MediaRecorder(); 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setOutputFile(filePath); 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.prepare(); 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.start(); 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(500); 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.stop(); 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "sound recorded"); 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.release(); 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){ 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, e.toString()); 503d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Verify the recorded file 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project duration = mp.getDuration(); 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG,"Duration " + duration); 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){} 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Check the record media file length is greate than zero 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (duration > 0) 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Test for mediaMeta Data Thumbnail 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean getThumbnail(String filePath, String goldenPath){ 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "getThumbnail - " + filePath); 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int goldenHeight = 0; 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int goldenWidth = 0; 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int outputWidth = 0; 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int outputHeight = 0; 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //This test is only for the short media file 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BitmapFactory mBitmapFactory = new BitmapFactory(); 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaMetadataRetriever mMediaMetadataRetriever = new MediaMetadataRetriever(); 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaMetadataRetriever.setDataSource(filePath); 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project e.printStackTrace(); 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 542f6bd1ea0c79516a5ef3c0c463761deec1a80e419James Dong Bitmap outThumbnail = mMediaMetadataRetriever.getFrameAtTime(-1); 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 544d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //Verify the thumbnail 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap goldenBitmap = mBitmapFactory.decodeFile(goldenPath); 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outputWidth = outThumbnail.getWidth(); 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outputHeight = outThumbnail.getHeight(); 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goldenHeight = goldenBitmap.getHeight(); 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goldenWidth = goldenBitmap.getWidth(); 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //check the image dimension 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((outputWidth != goldenWidth) || (outputHeight != goldenHeight)) 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 555be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau // Check half line of pixel 556be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau int x = goldenHeight / 2; 557be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau for (int j = 1; j < goldenWidth / 2; j++) { 558be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau if (goldenBitmap.getPixel(x, j) != outThumbnail.getPixel(x, j)) { 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "pixel = " + goldenBitmap.getPixel(x, j)); 560be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau return false; 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 562be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau } 563be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau }catch (Exception e){ 564be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau Log.v(TAG, e.toString()); 565be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau return false; 566be467b579e06443bc79ea6a04ba0b4d4746da994Yu Shan Emily Lau } 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Load midi file from resources 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean resourcesPlayback(AssetFileDescriptor afd, int expectedDuration){ 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int duration = 0; 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength()); 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project duration = mp.getDuration(); 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(5000); 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){ 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG,e.getMessage()); 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (duration > expectedDuration) 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 590d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou public static boolean prepareAsyncReset(String filePath){ 591d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //preparesAsync 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try{ 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepareAsync(); 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.reset(); 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){ 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG,e.getMessage()); 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 606d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou public static boolean isLooping(String filePath) { 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = null; 608d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp = new MediaPlayer(); 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mp.isLooping()) { 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "MediaPlayer.isLooping() returned true after ctor"); 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setLooping(true); 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mp.isLooping()) { 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "MediaPlayer.isLooping() returned false after setLooping(true)"); 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 623d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setLooping(false); 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mp.isLooping()) { 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "MediaPlayer.isLooping() returned true after setLooping(false)"); 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){ 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Exception : " + e.toString()); 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mp != null) 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean isLoopingAfterReset(String filePath) { 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = null; 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp = new MediaPlayer(); 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filePath); 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setLooping(true); 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.reset(); 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mp.isLooping()) { 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "MediaPlayer.isLooping() returned true after reset()"); 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }catch (Exception e){ 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Exception : " + e.toString()); 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mp != null) 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 663d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 664b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project /* 665d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * Initializes the message looper so that the mediaPlayer object can 666b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * receive the callback messages. 667b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project */ 668b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project private static void initializeMessageLooper() { 669b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project Log.v(TAG, "start looper"); 670b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project new Thread() { 671b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project @Override 672b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project public void run() { 673b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project // Set up a looper to be used by camera. 674b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project Looper.prepare(); 675b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project Log.v(TAG, "start loopRun"); 676d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou // Save the looper so that we can terminate this thread 677b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project // after we are done with it. 678d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mLooper = Looper.myLooper(); 679d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mMediaPlayer = new MediaPlayer(); 680b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project synchronized (lock) { 681b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project mInitialized = true; 682b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project lock.notify(); 683b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } 684b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project Looper.loop(); // Blocks forever until Looper.quit() is called. 685b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project Log.v(TAG, "initializeMessageLooper: quit."); 686b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } 687b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project }.start(); 688b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } 689d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 690b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project /* 691b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project * Terminates the message looper thread. 692b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project */ 693b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project private static void terminateMessageLooper() { 694b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project mLooper.quit(); 695b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project mMediaPlayer.release(); 696b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } 697d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 698b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project static MediaPlayer.OnPreparedListener mPreparedListener = new MediaPlayer.OnPreparedListener() { 699b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project public void onPrepared(MediaPlayer mp) { 700b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project synchronized (prepareDone) { 701c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau if(mPrepareReset){ 702c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau Log.v(TAG, "call Reset"); 703c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mMediaPlayer.reset(); 704c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 705b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project Log.v(TAG, "notify the prepare callback"); 706b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project prepareDone.notify(); 707b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project onPrepareSuccess = true; 708b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } 709b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } 710b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project }; 711d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 712c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau public static boolean prepareAsyncCallback(String filePath, boolean reset) throws Exception { 713c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau //Added the PrepareReset flag which allow us to switch to different 714c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau //test case. 715c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau if (reset){ 716c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau mPrepareReset = true; 717c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau } 718d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 719b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project synchronized (lock) { 720c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau initializeMessageLooper(); 721b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project try { 722b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE); 723b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } catch(Exception e) { 724b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project Log.v(TAG, "looper was interrupted."); 725b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project return false; 726b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } 727b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } 728b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project try{ 729b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project mMediaPlayer.setOnPreparedListener(mPreparedListener); 730b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project mMediaPlayer.setDataSource(filePath); 731b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project mMediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder()); 732d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mMediaPlayer.prepareAsync(); 733b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project synchronized (prepareDone) { 734b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project try { 735b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project prepareDone.wait(WAIT_FOR_COMMAND_TO_COMPLETE); 736b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } catch (Exception e) { 737b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project Log.v(TAG, "wait was interrupted."); 738b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } 739d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 740b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project terminateMessageLooper(); 741b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project }catch (Exception e){ 742b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project Log.v(TAG,e.getMessage()); 743d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 744b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project return onPrepareSuccess; 745b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project } 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 74755eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang static MediaPlayer.OnCompletionListener mCompletionListener = new MediaPlayer.OnCompletionListener() { 74855eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang public void onCompletion(MediaPlayer mp) { 74955eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang synchronized (onCompletion) { 75055eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang Log.v(TAG, "notify the completion callback"); 75155eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang onCompletion.notify(); 75255eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang onCompleteSuccess = true; 75355eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang } 75455eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang } 75555eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang }; 75655eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang 757a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau static MediaPlayer.OnErrorListener mOnErrorListener = new MediaPlayer.OnErrorListener() { 758a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau public boolean onError(MediaPlayer mp, int framework_err, int impl_err) { 759a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau mPlaybackError = true; 760a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau mp.reset(); 761a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau return true; 762a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 763a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau }; 764a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau 765a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau static MediaPlayer.OnInfoListener mInfoListener = new MediaPlayer.OnInfoListener() { 766a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau public boolean onInfo(MediaPlayer mp, int what, int extra) { 767a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau switch (what){ 768a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau case MediaPlayer.MEDIA_INFO_UNKNOWN: 76985305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mMediaInfoUnknownCount++; 770a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau break; 771a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau case MediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING: 77285305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mMediaInfoVideoTrackLaggingCount++; 773a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau break; 774a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau case MediaPlayer.MEDIA_INFO_BAD_INTERLEAVING: 77585305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mMediaInfoBadInterleavingCount++; 776a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau break; 777a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau case MediaPlayer.MEDIA_INFO_NOT_SEEKABLE: 77885305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mMediaInfoNotSeekableCount++; 779a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau break; 780a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau case MediaPlayer.MEDIA_INFO_METADATA_UPDATE: 78185305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mMediaInfoMetdataUpdateCount++; 782a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau break; 783a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 784a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau return true; 785a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau } 786a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau }; 787a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau 78855eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang public static boolean playMediaSamples(String filePath) throws Exception { 789d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou return playMediaSamples(filePath, 2000); 790d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 791d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 792d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou // For each media file, forward twice and backward once, then play to the end 793d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou public static boolean playMediaSamples(String filePath, int buffertime) throws Exception { 79455eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang int duration = 0; 79555eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang int curPosition = 0; 79655eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang int nextPosition = 0; 79755eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang int waittime = 0; 798a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau onCompleteSuccess = false; 79985305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mMediaInfoUnknownCount = 0; 80085305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mMediaInfoVideoTrackLaggingCount = 0; 80185305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mMediaInfoBadInterleavingCount = 0; 80285305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mMediaInfoNotSeekableCount = 0; 80385305f04d52e921de0452a1efef01175b1bbac3cYu Shan Emily Lau mMediaInfoMetdataUpdateCount = 0; 804a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau mPlaybackError = false; 805333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim mFailedToCompleteWithNoError = true; 806a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau String testResult; 807a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau 80855eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang initializeMessageLooper(); 80955eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang synchronized (lock) { 81055eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang try { 81155eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE); 81255eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang } catch(Exception e) { 81355eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang Log.v(TAG, "looper was interrupted."); 81455eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang return false; 81555eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang } 81655eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang } 81755eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang try { 81855eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang mMediaPlayer.setOnCompletionListener(mCompletionListener); 819a58389bdc1f3c41014003ab6e1a5e9a0ca37d789Yu Shan Emily Lau mMediaPlayer.setOnErrorListener(mOnErrorListener); 820ce6ff2c2e6f5ac1d4e86c94b68587b8634032908Yu Shan Emily Lau mMediaPlayer.setOnInfoListener(mInfoListener); 82155eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang Log.v(TAG, "playMediaSamples: sample file name " + filePath); 82255eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang mMediaPlayer.setDataSource(filePath); 82355eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang mMediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder()); 82455eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang mMediaPlayer.prepare(); 82555eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang duration = mMediaPlayer.getDuration(); 82655eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang // start to play 82755eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang mMediaPlayer.start(); 828e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen if (duration < 0) { 829e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen Log.w(TAG, filePath + " has unknown duration, waiting until playback completes"); 830e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen while (mMediaPlayer.isPlaying()) { 831e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen SystemClock.sleep(1000); 832e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen } 833e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen } else { 834e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen waittime = duration - mMediaPlayer.getCurrentPosition(); 835e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen synchronized(onCompletion){ 836e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen try { 837e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen onCompletion.wait(waittime + buffertime); 838e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen } catch (Exception e) { 839e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen Log.v(TAG, "playMediaSamples are interrupted"); 840e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen return false; 841e796ff912ecae57d8cb34c9366b3596fc1029fd8Marco Nelissen } 84255eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang } 84355eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang } 84455eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang terminateMessageLooper(); 845d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } catch (Exception e) { 84655eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang Log.v(TAG, "playMediaSamples:" + e.getMessage()); 84755eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang } 848333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim // Check if playback state is unknown (neither completed nor erroneous) unless 849333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim // it's not interrupted in the middle. If true, that is an exceptional case to investigate. 850333578bcd45f33530cc07c7eebc4ae2f669fd1c3Hyungtae Tim Kim mFailedToCompleteWithNoError = !(onCompleteSuccess || mPlaybackError); 85155eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang return onCompleteSuccess; 85255eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang } 85355eef638fae461d40b1ad4b1738bdef355a2d482Xia Wang} 854