CodecTest.java revision b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54
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
46b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static int WAIT_FOR_COMMAND_TO_COMPLETE = 10000;  //10 seconds max.
47b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static boolean mInitialized = false;
48b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static Looper mLooper = null;
49b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static final Object lock = new Object();
50b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static final Object prepareDone = new Object();
51b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static boolean onPrepareSuccess = false;
52b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static String printCpuInfo(){
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String cm = "dumpsys cpuinfo";
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String cpuinfo =null;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int ch;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Process  p = Runtime.getRuntime().exec(cm);
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            InputStream in = p.getInputStream();
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            StringBuffer sb = new StringBuffer(512);
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            while ( ( ch = in.read() ) != -1 ){
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append((char) ch);
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            cpuinfo = sb.toString();
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (IOException e){
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, e.toString());
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return cpuinfo;
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static int getDuration(String filePath) {
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "getDuration - " + filePath);
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = mp.getDuration();
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "Duration " + duration);
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "release");
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return duration;
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean getCurrentPosition(String filePath){
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "GetCurrentPosition - " + filePath);
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t1=0;
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t2 =0;
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start playback");
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            t1=SystemClock.uptimeMillis();
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(10000);
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.pause();
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            t2=SystemClock.uptimeMillis();
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, e.toString());
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        currentPosition = mp.getCurrentPosition();
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "mp currentPositon = " + currentPosition + " play duration = " + (t2-t1));
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //The currentposition should be within 10% of the sleep time
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //For the very short mp3, it should return the length instead of 10 seconds
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (filePath.equals(MediaNames.SHORTMP3)){
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (currentPosition < 1000 )
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return true;
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if ((currentPosition < ((t2-t1) *1.2)) && (currentPosition > 0))
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean seekTo(String filePath){
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seekTo " + filePath);
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.seekTo(MediaNames.SEEK_TIME);
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(MediaNames.WAIT_TIME);
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            currentPosition = mp.getCurrentPosition();
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, e.getMessage());
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "CurrentPosition = " + currentPosition);
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //The currentposition should be at least greater than the 80% of seek time
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if ((currentPosition > MediaNames.SEEK_TIME *0.8))
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean setLooping(String filePath){
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t1 =0;
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t2 =0;
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v (TAG, "SetLooping - " + filePath);
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "setLooping duration " + duration);
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setLooping(true);
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(5000);
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.seekTo(duration - 5000);
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            t1=SystemClock.uptimeMillis();
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(20000);
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            t2=SystemClock.uptimeMillis();
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "pause");
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //Bug# 1106852 - IllegalStateException will be thrown if pause is called
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //in here
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //mp.pause();
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            currentPosition = mp.getCurrentPosition();
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "looping position " + currentPosition + "duration = " + (t2-t1));
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "Exception : " + e.toString());
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //The current position should be within 20% of the sleep time
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //and should be greater than zero.
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if ((currentPosition < ((t2-t1-5000)*1.2)) && currentPosition > 0)
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean pause(String filePath) throws Exception {
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "pause - " + filePath);
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean misPlaying = true;
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean pauseResult = false;
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t1=0;
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long t2=0;
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDataSource(filePath);
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.prepare();
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = mp.getDuration();
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.start();
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        t1=SystemClock.uptimeMillis();
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(5000);
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.pause();
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        t2=SystemClock.uptimeMillis();
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        misPlaying = mp.isPlaying();
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int curPosition = mp.getCurrentPosition();
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, filePath + " pause currentPositon " + curPosition);
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "isPlaying "+ misPlaying + " wait time " + (t2 - t1) );
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String cpuinfo = printCpuInfo();
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, cpuinfo);
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if ((curPosition>0) && (curPosition < ((t2-t1) * 1.3)) && (misPlaying == false))
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pauseResult = true;
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return pauseResult;
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static void prepareStopRelease(String filePath) throws Exception {
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "prepareStopRelease" + filePath);
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDataSource(filePath);
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.prepare();
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static void preparePauseRelease(String filePath) throws Exception {
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "preparePauseRelease" + filePath);
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDataSource(filePath);
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.prepare();
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.pause();
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static int videoHeight(String filePath) throws Exception {
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "videoHeight - " + filePath);
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int videoHeight = 0;
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDataSource(filePath);
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.prepare();
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoHeight = mp.getVideoHeight();
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return videoHeight;
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static int videoWidth(String filePath) throws Exception {
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "videoWidth - " + filePath);
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int videoWidth = 0;
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDataSource(filePath);
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.prepare();
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoWidth = mp.getVideoWidth();
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return videoWidth;
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //This also test the streaming video which may take a long
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //time to start the playback.
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean videoSeekTo(String filePath) throws Exception {
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "videoSeekTo - " + filePath);
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoResult = false;
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDataSource(filePath);
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.prepare();
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.start();
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (filePath.equals(MediaNames.VIDEO_SHORT_3GP)){
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.pause();
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.seekTo(0);
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(1000);
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            currentPosition = mp.getCurrentPosition();
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG,"short position " + currentPosition);
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (currentPosition > 100 )
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return true;
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            else
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(5000);
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        duration = mp.getDuration();
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "video duration " + duration);
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.pause();
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.seekTo(duration - 20000 );
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.start();
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(1000);
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.pause();
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(MediaNames.PAUSE_WAIT_TIME);
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.seekTo(duration/2);
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.start();
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Thread.sleep(10000);
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        currentPosition = mp.getCurrentPosition();
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "video currentPosition " + currentPosition);
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (currentPosition > (duration /2 )*0.9)
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean seekToEnd(String filePath){
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seekToEnd - " + filePath);
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isPlaying = false;
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start playback");
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.seekTo(duration - 3000);
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(6000);
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isPlaying = mp.isPlaying();
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        currentPosition = mp.getCurrentPosition();
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying);
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "duration = " + duration);
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (currentPosition < 0.9 * duration || isPlaying)
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean shortMediaStop(String filePath){
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "shortMediaStop - " + filePath);
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //This test is only for the short media file
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isPlaying = false;
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start playback");
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(10000);
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isPlaying = mp.isPlaying();
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        currentPosition = mp.getCurrentPosition();
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying);
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "duration = " + duration);
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (currentPosition > duration || isPlaying)
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean playToEnd(String filePath){
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "shortMediaStop - " + filePath);
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //This test is only for the short media file
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 200000;
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int updateDuration = 0;
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int currentPosition = 0;
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isPlaying = false;
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(5000);
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start playback");
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //duration = mp.getDuration();
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(50000);
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isPlaying = mp.isPlaying();
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        currentPosition = mp.getCurrentPosition();
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //updateDuration = mp.getDuration();
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seekToEnd currentPosition= " + currentPosition + " isPlaying = " + isPlaying);
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.stop();
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mp.release();
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //Log.v(TAG, "duration = " + duration);
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //Log.v(TAG, "Update duration = " + updateDuration);
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (currentPosition > 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 seektoBeforeStart(String filePath){
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "seektoBeforeStart - " + 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
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            mp.prepare();
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.seekTo(duration - 10000);
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            currentPosition=mp.getCurrentPosition();
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.stop();
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.release();
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (currentPosition < duration/2)
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean mediaRecorderRecord(String filePath){
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "SoundRecording - " + filePath);
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //This test is only for the short media file
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            MediaRecorder mRecorder = new MediaRecorder();
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFile(filePath);
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.prepare();
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.start();
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(500);
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.stop();
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "sound recorded");
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.release();
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, e.toString());
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //Verify the recorded file
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = new MediaPlayer();
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG,"Duration " + duration);
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.release();
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //Check the record media file length is greate than zero
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (duration > 0)
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Test for mediaMeta Data Thumbnail
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean getThumbnail(String filePath, String goldenPath){
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "getThumbnail - " + filePath);
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int goldenHeight = 0;
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int goldenWidth = 0;
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int outputWidth = 0;
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int outputHeight = 0;
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //This test is only for the short media file
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            BitmapFactory mBitmapFactory = new BitmapFactory();
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            MediaMetadataRetriever mMediaMetadataRetriever = new MediaMetadataRetriever();
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mMediaMetadataRetriever.setDataSource(filePath);
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch(Exception e) {
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                e.printStackTrace();
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Bitmap outThumbnail = mMediaMetadataRetriever.captureFrame();
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //Verify the thumbnail
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Bitmap goldenBitmap = mBitmapFactory.decodeFile(goldenPath);
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            outputWidth = outThumbnail.getWidth();
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            outputHeight = outThumbnail.getHeight();
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            goldenHeight = goldenBitmap.getHeight();
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            goldenWidth = goldenBitmap.getWidth();
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //check the image dimension
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if ((outputWidth != goldenWidth) || (outputHeight != goldenHeight))
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            //Check one line of pixel
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int x = goldenHeight/2;
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (int j=0; j<goldenWidth; j++){
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (goldenBitmap.getPixel(x, j) != outThumbnail.getPixel(x, j)){
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Log.v(TAG, "pixel = " + goldenBitmap.getPixel(x, j));
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    return false;
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){}
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Load midi file from resources
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean resourcesPlayback(AssetFileDescriptor afd, int expectedDuration){
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int duration = 0;
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            MediaPlayer mp = new MediaPlayer();
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.start();
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            duration = mp.getDuration();
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(5000);
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.release();
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG,e.getMessage());
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (duration > expectedDuration)
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        else
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean prepareAsyncReset(String filePath){
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //preparesAsync
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try{
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            MediaPlayer mp = new MediaPlayer();
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepareAsync();
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.reset();
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.release();
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG,e.getMessage());
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean isLooping(String filePath) {
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = null;
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp = new MediaPlayer();
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mp.isLooping()) {
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "MediaPlayer.isLooping() returned true after ctor");
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setLooping(true);
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!mp.isLooping()) {
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "MediaPlayer.isLooping() returned false after setLooping(true)");
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setLooping(false);
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mp.isLooping()) {
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "MediaPlayer.isLooping() returned true after setLooping(false)");
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "Exception : " + e.toString());
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mp != null)
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mp.release();
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean isLoopingAfterReset(String filePath) {
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mp = null;
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp = new MediaPlayer();
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setDataSource(filePath);
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.prepare();
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.setLooping(true);
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mp.reset();
5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mp.isLooping()) {
5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "MediaPlayer.isLooping() returned true after reset()");
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return false;
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }catch (Exception e){
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "Exception : " + e.toString());
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } finally {
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mp != null)
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mp.release();
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return true;
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
587b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
588b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    /*
589b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     * Initializes the message looper so that the mediaPlayer object can
590b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     * receive the callback messages.
591b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     */
592b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static void initializeMessageLooper() {
593b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        Log.v(TAG, "start looper");
594b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        new Thread() {
595b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            @Override
596b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            public void run() {
597b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                // Set up a looper to be used by camera.
598b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Looper.prepare();
599b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Log.v(TAG, "start loopRun");
600b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                // Save the looper so that we can terminate this thread
601b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                // after we are done with it.
602b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                mLooper = Looper.myLooper();
603b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                mMediaPlayer = new MediaPlayer();
604b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                synchronized (lock) {
605b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                    mInitialized = true;
606b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                    lock.notify();
607b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                }
608b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Looper.loop();  // Blocks forever until Looper.quit() is called.
609b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Log.v(TAG, "initializeMessageLooper: quit.");
610b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            }
611b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        }.start();
612b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
613b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
614b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    /*
615b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     * Terminates the message looper thread.
616b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     */
617b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    private static void terminateMessageLooper() {
618b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        mLooper.quit();
619b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        mMediaPlayer.release();
620b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
621b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
622b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    static MediaPlayer.OnPreparedListener mPreparedListener = new MediaPlayer.OnPreparedListener() {
623b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        public void onPrepared(MediaPlayer mp) {
624b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            synchronized (prepareDone) {
625b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Log.v(TAG, "notify the prepare callback");
626b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                prepareDone.notify();
627b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                onPrepareSuccess = true;
628b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            }
629b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        }
630b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    };
631b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
632b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public static boolean prepareAsyncCallback(String filePath) throws Exception {
633b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        int videoWidth = 0;
634b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        int videoHeight = 0;
635b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        boolean checkVideoDimension = false;
636b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
637b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        initializeMessageLooper();
638b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        synchronized (lock) {
639b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            try {
640b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
641b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            } catch(Exception e) {
642b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                Log.v(TAG, "looper was interrupted.");
643b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                return false;
644b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            }
645b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        }
646b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        try{
647b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            mMediaPlayer.setOnPreparedListener(mPreparedListener);
648b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            mMediaPlayer.setDataSource(filePath);
649b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            mMediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
650b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            mMediaPlayer.prepareAsync();
651b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            synchronized (prepareDone) {
652b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                try {
653b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                    prepareDone.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
654b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                    Log.v(TAG, "setPreview done");
655b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                } catch (Exception e) {
656b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                    Log.v(TAG, "wait was interrupted.");
657b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project                }
658b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            }
659b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            videoWidth = mMediaPlayer.getVideoWidth();
660b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            videoHeight = mMediaPlayer.getVideoHeight();
661b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
662b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            terminateMessageLooper();
663b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        }catch (Exception e){
664b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project            Log.v(TAG,e.getMessage());
665b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project        }
666b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project       return onPrepareSuccess;
667b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    }
668b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
669b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
670b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
673