CodecTest.java revision c1b80cb7e30102b304d62beb9649f84c798e00e9
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
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Junit / Instrumentation test case for the media player api
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class CodecTest {
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static String TAG = "MediaPlayerApiTest";
43b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static MediaPlayer mMediaPlayer;
44b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private MediaPlayer.OnPreparedListener mOnPreparedListener;
45b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
46c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau    private static int WAIT_FOR_COMMAND_TO_COMPLETE = 60000;  //1 min max.
47b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static boolean mInitialized = false;
48c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau    private static boolean mPrepareReset = false;
49b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static Looper mLooper = null;
50b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static final Object lock = new Object();
51b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static final Object prepareDone = new Object();
52c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau    private static final Object videoSizeChanged = new Object();
53b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static boolean onPrepareSuccess = false;
54b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static String printCpuInfo(){
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String cm = "dumpsys cpuinfo";
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String cpuinfo =null;
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int ch;
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Process  p = Runtime.getRuntime().exec(cm);
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            InputStream in = p.getInputStream();
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            StringBuffer sb = new StringBuffer(512);
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            while ( ( ch = in.read() ) != -1 ){
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append((char) ch);
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            cpuinfo = sb.toString();
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (IOException e){
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, e.toString());
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return cpuinfo;
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static int getDuration(String filePath) {
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "getDuration - " + filePath);
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = mp.getDuration();
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "Duration " + duration);
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "release");
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return duration;
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean getCurrentPosition(String filePath){
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "GetCurrentPosition - " + filePath);
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t1=0;
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t2 =0;
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start playback");
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            t1=SystemClock.uptimeMillis();
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(10000);
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.pause();
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            t2=SystemClock.uptimeMillis();
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, e.toString());
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        currentPosition = mp.getCurrentPosition();
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "mp currentPositon = " + currentPosition + " play duration = " + (t2-t1));
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //The currentposition should be within 10% of the sleep time
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //For the very short mp3, it should return the length instead of 10 seconds
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (filePath.equals(MediaNames.SHORTMP3)){
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (currentPosition < 1000 )
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return true;
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if ((currentPosition < ((t2-t1) *1.2)) && (currentPosition > 0))
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean seekTo(String filePath){
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seekTo " + filePath);
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.seekTo(MediaNames.SEEK_TIME);
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(MediaNames.WAIT_TIME);
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            currentPosition = mp.getCurrentPosition();
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, e.getMessage());
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "CurrentPosition = " + currentPosition);
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //The currentposition should be at least greater than the 80% of seek time
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if ((currentPosition > MediaNames.SEEK_TIME *0.8))
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean setLooping(String filePath){
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t1 =0;
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t2 =0;
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v (TAG, "SetLooping - " + filePath);
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "setLooping duration " + duration);
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setLooping(true);
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(5000);
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.seekTo(duration - 5000);
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            t1=SystemClock.uptimeMillis();
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(20000);
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            t2=SystemClock.uptimeMillis();
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "pause");
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //Bug# 1106852 - IllegalStateException will be thrown if pause is called
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //in here
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //mp.pause();
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            currentPosition = mp.getCurrentPosition();
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "looping position " + currentPosition + "duration = " + (t2-t1));
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "Exception : " + e.toString());
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //The current position should be within 20% of the sleep time
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //and should be greater than zero.
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if ((currentPosition < ((t2-t1-5000)*1.2)) && currentPosition > 0)
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean pause(String filePath) throws Exception {
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "pause - " + filePath);
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean misPlaying = true;
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean pauseResult = false;
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t1=0;
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t2=0;
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDataSource(filePath);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.prepare();
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = mp.getDuration();
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.start();
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        t1=SystemClock.uptimeMillis();
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(5000);
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.pause();
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        t2=SystemClock.uptimeMillis();
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        misPlaying = mp.isPlaying();
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int curPosition = mp.getCurrentPosition();
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, filePath + " pause currentPositon " + curPosition);
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "isPlaying "+ misPlaying + " wait time " + (t2 - t1) );
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String cpuinfo = printCpuInfo();
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, cpuinfo);
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if ((curPosition>0) && (curPosition < ((t2-t1) * 1.3)) && (misPlaying == false))
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pauseResult = true;
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return pauseResult;
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static void prepareStopRelease(String filePath) throws Exception {
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "prepareStopRelease" + filePath);
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDataSource(filePath);
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.prepare();
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static void preparePauseRelease(String filePath) throws Exception {
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "preparePauseRelease" + filePath);
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDataSource(filePath);
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.prepare();
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.pause();
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
232c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau
233c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau    static MediaPlayer.OnVideoSizeChangedListener mOnVideoSizeChangedListener =
234c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        new MediaPlayer.OnVideoSizeChangedListener() {
235c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
236c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                synchronized (videoSizeChanged) {
237c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    Log.v(TAG, "sizechanged notification received ...");
238c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    videoSizeChanged.notify();
239c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                }
240c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            }
241c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau    };
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
243c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau    //Register the videoSizeChanged listener
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static int videoHeight(String filePath) throws Exception {
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "videoHeight - " + filePath);
246c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        int videoHeight = 0;
247c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        synchronized (lock) {
248c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            initializeMessageLooper();
249c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            try {
250c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
251c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            } catch(Exception e) {
252c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                Log.v(TAG, "looper was interrupted.");
253c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                return 0;
254c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            }
255c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        }
256c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        try {
257c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            mMediaPlayer.setDataSource(filePath);
258c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            mMediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
259c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            mMediaPlayer.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener);
260c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            synchronized (videoSizeChanged) {
261c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                try {
262c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    mMediaPlayer.prepare();
263c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    mMediaPlayer.start();
264c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    videoSizeChanged.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
265c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                } catch (Exception e) {
266c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    Log.v(TAG, "wait was interrupted");
267c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                }
268c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            }
269c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            videoHeight = mMediaPlayer.getVideoHeight();
270c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            terminateMessageLooper();
271c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        } catch (Exception e) {
272c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            Log.e(TAG, e.getMessage());
273c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        }
274c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return videoHeight;
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
278c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau    //Register the videoSizeChanged listener
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static int videoWidth(String filePath) throws Exception {
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "videoWidth - " + filePath);
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int videoWidth = 0;
282c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau
283c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        synchronized (lock) {
284c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            initializeMessageLooper();
285c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            try {
286c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
287c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            } catch(Exception e) {
288c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                Log.v(TAG, "looper was interrupted.");
289c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                return 0;
290c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            }
291c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        }
292c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        try {
293c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            mMediaPlayer.setDataSource(filePath);
294c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            mMediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
295c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            mMediaPlayer.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener);
296c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            synchronized (videoSizeChanged) {
297c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                try {
298c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    mMediaPlayer.prepare();
299c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    mMediaPlayer.start();
300c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    videoSizeChanged.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
301c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                } catch (Exception e) {
302c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    Log.v(TAG, "wait was interrupted");
303c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                }
304c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            }
305c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            videoWidth = mMediaPlayer.getVideoWidth();
306c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            terminateMessageLooper();
307c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        } catch (Exception e) {
308c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            Log.e(TAG, e.getMessage());
309c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        }
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return videoWidth;
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //This also test the streaming video which may take a long
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //time to start the playback.
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean videoSeekTo(String filePath) throws Exception {
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "videoSeekTo - " + filePath);
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoResult = false;
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDataSource(filePath);
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.prepare();
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.start();
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (filePath.equals(MediaNames.VIDEO_SHORT_3GP)){
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.pause();
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.seekTo(0);
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(1000);
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            currentPosition = mp.getCurrentPosition();
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG,"short position " + currentPosition);
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (currentPosition > 100 )
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return true;
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            else
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(5000);
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        duration = mp.getDuration();
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "video duration " + duration);
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.pause();
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.seekTo(duration - 20000 );
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.start();
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(1000);
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.pause();
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.seekTo(duration/2);
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.start();
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(10000);
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        currentPosition = mp.getCurrentPosition();
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "video currentPosition " + currentPosition);
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (currentPosition > (duration /2 )*0.9)
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean seekToEnd(String filePath){
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seekToEnd - " + filePath);
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isPlaying = false;
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start playback");
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.seekTo(duration - 3000);
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(6000);
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isPlaying = mp.isPlaying();
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        currentPosition = mp.getCurrentPosition();
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying);
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "duration = " + duration);
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (currentPosition < 0.9 * duration || isPlaying)
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean shortMediaStop(String filePath){
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "shortMediaStop - " + filePath);
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //This test is only for the short media file
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isPlaying = false;
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start playback");
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(10000);
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isPlaying = mp.isPlaying();
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        currentPosition = mp.getCurrentPosition();
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying);
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "duration = " + duration);
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (currentPosition > duration || isPlaying)
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean playToEnd(String filePath){
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "shortMediaStop - " + filePath);
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //This test is only for the short media file
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 200000;
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int updateDuration = 0;
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isPlaying = false;
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(5000);
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start playback");
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //duration = mp.getDuration();
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(50000);
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isPlaying = mp.isPlaying();
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        currentPosition = mp.getCurrentPosition();
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //updateDuration = mp.getDuration();
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying);
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //Log.v(TAG, "duration = " + duration);
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //Log.v(TAG, "Update duration = " + updateDuration);
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (currentPosition > duration || isPlaying)
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean seektoBeforeStart(String filePath){
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seektoBeforeStart - " + filePath);
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //This test is only for the short media file
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.seekTo(duration - 10000);
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            currentPosition=mp.getCurrentPosition();
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.stop();
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.release();
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (currentPosition < duration/2)
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean mediaRecorderRecord(String filePath){
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "SoundRecording - " + filePath);
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //This test is only for the short media file
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            MediaRecorder mRecorder = new MediaRecorder();
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFile(filePath);
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.prepare();
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.start();
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(500);
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.stop();
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "sound recorded");
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.release();
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, e.toString());
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //Verify the recorded file
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG,"Duration " + duration);
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.release();
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //Check the record media file length is greate than zero
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (duration > 0)
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Test for mediaMeta Data Thumbnail
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean getThumbnail(String filePath, String goldenPath){
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "getThumbnail - " + filePath);
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int goldenHeight = 0;
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int goldenWidth = 0;
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int outputWidth = 0;
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int outputHeight = 0;
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //This test is only for the short media file
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            BitmapFactory mBitmapFactory = new BitmapFactory();
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            MediaMetadataRetriever mMediaMetadataRetriever = new MediaMetadataRetriever();
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mMediaMetadataRetriever.setDataSource(filePath);
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch(Exception e) {
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                e.printStackTrace();
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Bitmap outThumbnail = mMediaMetadataRetriever.captureFrame();
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //Verify the thumbnail
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Bitmap goldenBitmap = mBitmapFactory.decodeFile(goldenPath);
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            outputWidth = outThumbnail.getWidth();
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            outputHeight = outThumbnail.getHeight();
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            goldenHeight = goldenBitmap.getHeight();
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            goldenWidth = goldenBitmap.getWidth();
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //check the image dimension
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if ((outputWidth != goldenWidth) || (outputHeight != goldenHeight))
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //Check one line of pixel
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int x = goldenHeight/2;
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (int j=0; j<goldenWidth; j++){
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (goldenBitmap.getPixel(x, j) != outThumbnail.getPixel(x, j)){
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Log.v(TAG, "pixel = " + goldenBitmap.getPixel(x, j));
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    return false;
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Load midi file from resources
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean resourcesPlayback(AssetFileDescriptor afd, int expectedDuration){
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            MediaPlayer mp = new MediaPlayer();
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(5000);
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.release();
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG,e.getMessage());
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (duration > expectedDuration)
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean prepareAsyncReset(String filePath){
5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //preparesAsync
5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            MediaPlayer mp = new MediaPlayer();
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepareAsync();
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.reset();
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.release();
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG,e.getMessage());
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean isLooping(String filePath) {
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = null;
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp = new MediaPlayer();
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mp.isLooping()) {
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "MediaPlayer.isLooping() returned true after ctor");
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setLooping(true);
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!mp.isLooping()) {
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "MediaPlayer.isLooping() returned false after setLooping(true)");
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setLooping(false);
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mp.isLooping()) {
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "MediaPlayer.isLooping() returned true after setLooping(false)");
6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "Exception : " + e.toString());
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mp != null)
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mp.release();
6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean isLoopingAfterReset(String filePath) {
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = null;
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp = new MediaPlayer();
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setLooping(true);
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.reset();
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mp.isLooping()) {
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "MediaPlayer.isLooping() returned true after reset()");
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "Exception : " + e.toString());
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mp != null)
6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mp.release();
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
645b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
646b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    /*
647b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     * Initializes the message looper so that the mediaPlayer object can
648b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     * receive the callback messages.
649b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     */
650b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static void initializeMessageLooper() {
651b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        Log.v(TAG, "start looper");
652b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        new Thread() {
653b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            @Override
654b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            public void run() {
655b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                // Set up a looper to be used by camera.
656b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Looper.prepare();
657b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Log.v(TAG, "start loopRun");
658b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                // Save the looper so that we can terminate this thread
659b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                // after we are done with it.
660b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                mLooper = Looper.myLooper();
661b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                mMediaPlayer = new MediaPlayer();
662b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                synchronized (lock) {
663b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                    mInitialized = true;
664b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                    lock.notify();
665b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                }
666b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Looper.loop();  // Blocks forever until Looper.quit() is called.
667b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Log.v(TAG, "initializeMessageLooper: quit.");
668b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            }
669b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        }.start();
670b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
671b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
672b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    /*
673b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     * Terminates the message looper thread.
674b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     */
675b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static void terminateMessageLooper() {
676b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        mLooper.quit();
677b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        mMediaPlayer.release();
678b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
679b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
680b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    static MediaPlayer.OnPreparedListener mPreparedListener = new MediaPlayer.OnPreparedListener() {
681b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        public void onPrepared(MediaPlayer mp) {
682b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            synchronized (prepareDone) {
683c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                if(mPrepareReset){
684c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    Log.v(TAG, "call Reset");
685c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                    mMediaPlayer.reset();
686c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau                }
687b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Log.v(TAG, "notify the prepare callback");
688b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                prepareDone.notify();
689b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                onPrepareSuccess = true;
690b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            }
691b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        }
692b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    };
693b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
694c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau    public static boolean prepareAsyncCallback(String filePath, boolean reset) throws Exception {
695c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        //Added the PrepareReset flag which allow us to switch to different
696c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        //test case.
697c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        if (reset){
698c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            mPrepareReset = true;
699c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau        }
700b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
701b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        synchronized (lock) {
702c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            initializeMessageLooper();
703b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            try {
704b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
705b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            } catch(Exception e) {
706b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Log.v(TAG, "looper was interrupted.");
707b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                return false;
708b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            }
709b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        }
710b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        try{
711b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            mMediaPlayer.setOnPreparedListener(mPreparedListener);
712b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            mMediaPlayer.setDataSource(filePath);
713b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            mMediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
714b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            mMediaPlayer.prepareAsync();
715b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            synchronized (prepareDone) {
716b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                try {
717b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                    prepareDone.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
718b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                } catch (Exception e) {
719b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                    Log.v(TAG, "wait was interrupted.");
720b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                }
721c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            }
722b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            terminateMessageLooper();
723b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        }catch (Exception e){
724b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            Log.v(TAG,e.getMessage());
725b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        }
726b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project       return onPrepareSuccess;
727b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
728b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
729c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau
730b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
733