diff options
Diffstat (limited to 'media')
33 files changed, 234 insertions, 90 deletions
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index c0cd5e3..c46f64e 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -53,7 +53,45 @@ import java.util.HashSet; import java.util.Iterator; /** - * Internal service that no-one should use directly. + * Internal service helper that no-one should use directly. + * + * The way the scan currently works is: + * - The Java MediaScannerService creates a MediaScanner (this class), and calls + * MediaScanner.scanDirectories on it. + * - scanDirectories() calls the native processDirectory() for each of the specified directories. + * - the processDirectory() JNI method wraps the provided mediascanner client in a native + * 'MyMediaScannerClient' class, then calls processDirectory() on the native MediaScanner + * object (which got created when the Java MediaScanner was created). + * - native MediaScanner.processDirectory() (currently part of opencore) calls + * doProcessDirectory(), which recurses over the folder, and calls + * native MyMediaScannerClient.scanFile() for every file whose extension matches. + * - native MyMediaScannerClient.scanFile() calls back on Java MediaScannerClient.scanFile, + * which calls doScanFile, which after some setup calls back down to native code, calling + * MediaScanner.processFile(). + * - MediaScanner.processFile() calls one of several methods, depending on the type of the + * file: parseMP3, parseMP4, parseMidi, parseOgg or parseWMA. + * - each of these methods gets metadata key/value pairs from the file, and repeatedly + * calls native MyMediaScannerClient.handleStringTag, which calls back up to its Java + * counterparts in this file. + * - Java handleStringTag() gathers the key/value pairs that it's interested in. + * - once processFile returns and we're back in Java code in doScanFile(), it calls + * Java MyMediaScannerClient.endFile(), which takes all the data that's been + * gathered and inserts an entry in to the database. + * + * In summary: + * Java MediaScannerService calls + * Java MediaScanner scanDirectories, which calls + * Java MediaScanner processDirectory (native method), which calls + * native MediaScanner processDirectory, which calls + * native MyMediaScannerClient scanFile, which calls + * Java MyMediaScannerClient scanFile, which calls + * Java MediaScannerClient doScanFile, which calls + * Java MediaScanner processFile (native method), which calls + * native MediaScanner processFile, which calls + * native parseMP3, parseMP4, parseMidi, parseOgg or parseWMA, which calls + * native MyMediaScanner handleStringTag, which calls + * Java MyMediaScanner handleStringTag. + * Once MediaScanner processFile returns, an entry is inserted in to the database. * * {@hide} */ diff --git a/media/jni/Android.mk b/media/jni/Android.mk index 8ee0cbd..9552aa6 100644 --- a/media/jni/Android.mk +++ b/media/jni/Android.mk @@ -18,6 +18,7 @@ LOCAL_SHARED_LIBRARIES := \ libnativehelper \ libcutils \ libutils \ + libbinder \ libmedia \ libsgl \ libui diff --git a/media/jni/soundpool/Android.mk b/media/jni/soundpool/Android.mk index 374ddeb..9ff2e24 100644 --- a/media/jni/soundpool/Android.mk +++ b/media/jni/soundpool/Android.mk @@ -9,6 +9,7 @@ LOCAL_SRC_FILES:= \ LOCAL_SHARED_LIBRARIES := \ libcutils \ libutils \ + libbinder \ libandroid_runtime \ libnativehelper \ libmedia diff --git a/media/libmedia/Android.mk b/media/libmedia/Android.mk index 8020da2..806ef52 100644 --- a/media/libmedia/Android.mk +++ b/media/libmedia/Android.mk @@ -21,7 +21,7 @@ LOCAL_SRC_FILES:= \ JetPlayer.cpp LOCAL_SHARED_LIBRARIES := \ - libui libcutils libutils libsonivox + libui libcutils libutils libbinder libsonivox LOCAL_MODULE:= libmedia diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp index 1720af0..793bbf4 100644 --- a/media/libmedia/AudioRecord.cpp +++ b/media/libmedia/AudioRecord.cpp @@ -29,11 +29,11 @@ #include <media/AudioSystem.h> #include <media/AudioRecord.h> -#include <utils/IServiceManager.h> +#include <binder/IServiceManager.h> #include <utils/Log.h> -#include <utils/MemoryDealer.h> -#include <utils/Parcel.h> -#include <utils/IPCThreadState.h> +#include <binder/MemoryDealer.h> +#include <binder/Parcel.h> +#include <binder/IPCThreadState.h> #include <utils/Timers.h> #include <cutils/atomic.h> diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp index a21a7a4..86d0542 100644 --- a/media/libmedia/AudioSystem.cpp +++ b/media/libmedia/AudioSystem.cpp @@ -18,7 +18,7 @@ //#define LOG_NDEBUG 0 #include <utils/Log.h> -#include <utils/IServiceManager.h> +#include <binder/IServiceManager.h> #include <media/AudioSystem.h> #include <math.h> diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 289bd75..4a1b69e 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -32,9 +32,9 @@ #include <media/AudioTrack.h> #include <utils/Log.h> -#include <utils/MemoryDealer.h> -#include <utils/Parcel.h> -#include <utils/IPCThreadState.h> +#include <binder/MemoryDealer.h> +#include <binder/Parcel.h> +#include <binder/IPCThreadState.h> #include <utils/Timers.h> #include <cutils/atomic.h> diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp index 52bd7d4..7395885 100644 --- a/media/libmedia/IAudioFlinger.cpp +++ b/media/libmedia/IAudioFlinger.cpp @@ -21,7 +21,7 @@ #include <stdint.h> #include <sys/types.h> -#include <utils/Parcel.h> +#include <binder/Parcel.h> #include <media/IAudioFlinger.h> diff --git a/media/libmedia/IAudioFlingerClient.cpp b/media/libmedia/IAudioFlingerClient.cpp index 9d00aef..dbc2bba 100644 --- a/media/libmedia/IAudioFlingerClient.cpp +++ b/media/libmedia/IAudioFlingerClient.cpp @@ -20,7 +20,7 @@ #include <stdint.h> #include <sys/types.h> -#include <utils/Parcel.h> +#include <binder/Parcel.h> #include <media/IAudioFlingerClient.h> diff --git a/media/libmedia/IAudioRecord.cpp b/media/libmedia/IAudioRecord.cpp index 6e42dac..000a304 100644 --- a/media/libmedia/IAudioRecord.cpp +++ b/media/libmedia/IAudioRecord.cpp @@ -18,7 +18,7 @@ #include <stdint.h> #include <sys/types.h> -#include <utils/Parcel.h> +#include <binder/Parcel.h> #include <media/IAudioRecord.h> diff --git a/media/libmedia/IAudioTrack.cpp b/media/libmedia/IAudioTrack.cpp index abc202d..3d25a3e 100644 --- a/media/libmedia/IAudioTrack.cpp +++ b/media/libmedia/IAudioTrack.cpp @@ -18,7 +18,7 @@ #include <stdint.h> #include <sys/types.h> -#include <utils/Parcel.h> +#include <binder/Parcel.h> #include <media/IAudioTrack.h> diff --git a/media/libmedia/IMediaMetadataRetriever.cpp b/media/libmedia/IMediaMetadataRetriever.cpp index 85b5944..dd4df99 100644 --- a/media/libmedia/IMediaMetadataRetriever.cpp +++ b/media/libmedia/IMediaMetadataRetriever.cpp @@ -17,7 +17,7 @@ #include <stdint.h> #include <sys/types.h> -#include <utils/Parcel.h> +#include <binder/Parcel.h> #include <SkBitmap.h> #include <media/IMediaMetadataRetriever.h> diff --git a/media/libmedia/IMediaPlayer.cpp b/media/libmedia/IMediaPlayer.cpp index f37519f..997251b 100644 --- a/media/libmedia/IMediaPlayer.cpp +++ b/media/libmedia/IMediaPlayer.cpp @@ -18,7 +18,7 @@ #include <stdint.h> #include <sys/types.h> -#include <utils/Parcel.h> +#include <binder/Parcel.h> #include <media/IMediaPlayer.h> #include <ui/ISurface.h> diff --git a/media/libmedia/IMediaPlayerClient.cpp b/media/libmedia/IMediaPlayerClient.cpp index 65022cd..d1f08bd 100644 --- a/media/libmedia/IMediaPlayerClient.cpp +++ b/media/libmedia/IMediaPlayerClient.cpp @@ -16,8 +16,8 @@ */ #include <utils/RefBase.h> -#include <utils/IInterface.h> -#include <utils/Parcel.h> +#include <binder/IInterface.h> +#include <binder/Parcel.h> #include <media/IMediaPlayerClient.h> diff --git a/media/libmedia/IMediaPlayerService.cpp b/media/libmedia/IMediaPlayerService.cpp index 370e3fb..8fd13ae 100644 --- a/media/libmedia/IMediaPlayerService.cpp +++ b/media/libmedia/IMediaPlayerService.cpp @@ -17,9 +17,9 @@ #include <stdint.h> #include <sys/types.h> -#include <utils/Parcel.h> +#include <binder/Parcel.h> -#include <utils/IMemory.h> +#include <binder/IMemory.h> #include <media/IMediaPlayerService.h> #include <media/IMediaRecorder.h> diff --git a/media/libmedia/IMediaRecorder.cpp b/media/libmedia/IMediaRecorder.cpp index 84d08c4..dadb38a 100644 --- a/media/libmedia/IMediaRecorder.cpp +++ b/media/libmedia/IMediaRecorder.cpp @@ -18,7 +18,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "IMediaRecorder" #include <utils/Log.h> -#include <utils/Parcel.h> +#include <binder/Parcel.h> #include <ui/ISurface.h> #include <ui/ICamera.h> #include <media/IMediaPlayerClient.h> diff --git a/media/libmedia/mediametadataretriever.cpp b/media/libmedia/mediametadataretriever.cpp index 09afc6c..d34a8ed 100644 --- a/media/libmedia/mediametadataretriever.cpp +++ b/media/libmedia/mediametadataretriever.cpp @@ -18,8 +18,8 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "MediaMetadataRetriever" -#include <utils/IServiceManager.h> -#include <utils/IPCThreadState.h> +#include <binder/IServiceManager.h> +#include <binder/IPCThreadState.h> #include <media/mediametadataretriever.h> #include <media/IMediaPlayerService.h> #include <utils/Log.h> diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp index 809316a..0f3eb70 100644 --- a/media/libmedia/mediaplayer.cpp +++ b/media/libmedia/mediaplayer.cpp @@ -24,13 +24,13 @@ #include <unistd.h> #include <fcntl.h> -#include <utils/IServiceManager.h> -#include <utils/IPCThreadState.h> +#include <binder/IServiceManager.h> +#include <binder/IPCThreadState.h> #include <media/mediaplayer.h> #include <media/AudioTrack.h> -#include <utils/MemoryBase.h> +#include <binder/MemoryBase.h> namespace android { diff --git a/media/libmedia/mediarecorder.cpp b/media/libmedia/mediarecorder.cpp index 6b26faf..0a5df0d 100644 --- a/media/libmedia/mediarecorder.cpp +++ b/media/libmedia/mediarecorder.cpp @@ -20,7 +20,7 @@ #include <utils/Log.h> #include <ui/Surface.h> #include <media/mediarecorder.h> -#include <utils/IServiceManager.h> +#include <binder/IServiceManager.h> #include <utils/String8.h> #include <media/IMediaPlayerService.h> #include <media/IMediaRecorder.h> diff --git a/media/libmediaplayerservice/Android.mk b/media/libmediaplayerservice/Android.mk index f7f2490..0877142 100644 --- a/media/libmediaplayerservice/Android.mk +++ b/media/libmediaplayerservice/Android.mk @@ -20,6 +20,7 @@ endif LOCAL_SHARED_LIBRARIES := \ libcutils \ libutils \ + libbinder \ libvorbisidec \ libsonivox \ libopencore_player \ diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp index 8ef0dc6..a17e651 100644 --- a/media/libmediaplayerservice/MediaPlayerService.cpp +++ b/media/libmediaplayerservice/MediaPlayerService.cpp @@ -30,10 +30,10 @@ #include <cutils/atomic.h> #include <android_runtime/ActivityManager.h> -#include <utils/IPCThreadState.h> -#include <utils/IServiceManager.h> -#include <utils/MemoryHeapBase.h> -#include <utils/MemoryBase.h> +#include <binder/IPCThreadState.h> +#include <binder/IServiceManager.h> +#include <binder/MemoryHeapBase.h> +#include <binder/MemoryBase.h> #include <cutils/properties.h> #include <media/MediaPlayerInterface.h> diff --git a/media/libmediaplayerservice/MediaRecorderClient.cpp b/media/libmediaplayerservice/MediaRecorderClient.cpp index e0d2947..e54f20d 100644 --- a/media/libmediaplayerservice/MediaRecorderClient.cpp +++ b/media/libmediaplayerservice/MediaRecorderClient.cpp @@ -25,10 +25,10 @@ #include <string.h> #include <cutils/atomic.h> #include <android_runtime/ActivityManager.h> -#include <utils/IPCThreadState.h> -#include <utils/IServiceManager.h> -#include <utils/MemoryHeapBase.h> -#include <utils/MemoryBase.h> +#include <binder/IPCThreadState.h> +#include <binder/IServiceManager.h> +#include <binder/MemoryHeapBase.h> +#include <binder/MemoryBase.h> #include <media/PVMediaRecorder.h> #include <utils/String16.h> @@ -37,6 +37,7 @@ namespace android { const char* cameraPermission = "android.permission.CAMERA"; +const char* recordAudioPermission = "android.permission.RECORD_AUDIO"; static bool checkPermission(const char* permissionString) { #ifndef HAVE_ANDROID_OS @@ -86,6 +87,9 @@ status_t MediaRecorderClient::setVideoSource(int vs) status_t MediaRecorderClient::setAudioSource(int as) { LOGV("setAudioSource(%d)", as); + if (!checkPermission(recordAudioPermission)) { + return PERMISSION_DENIED; + } Mutex::Autolock lock(mLock); if (mRecorder == NULL) { LOGE("recorder is not initialized"); diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 6cb4a34..ba8d9a8 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -26,10 +26,10 @@ #include <string.h> #include <cutils/atomic.h> -#include <utils/MemoryDealer.h> +#include <binder/MemoryDealer.h> #include <android_runtime/ActivityManager.h> -#include <utils/IPCThreadState.h> -#include <utils/IServiceManager.h> +#include <binder/IPCThreadState.h> +#include <binder/IServiceManager.h> #include <media/MediaMetadataRetrieverInterface.h> #include <media/MediaPlayerInterface.h> #include <media/PVMetadataRetriever.h> diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.h b/media/libmediaplayerservice/MetadataRetrieverClient.h index ce29c98..f31f6c0 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.h +++ b/media/libmediaplayerservice/MetadataRetrieverClient.h @@ -20,7 +20,7 @@ #include <utils.h> #include <utils/KeyedVector.h> -#include <utils/IMemory.h> +#include <binder/IMemory.h> #include <media/MediaMetadataRetrieverInterface.h> diff --git a/media/mediaserver/Android.mk b/media/mediaserver/Android.mk index c681698..a92cea8 100644 --- a/media/mediaserver/Android.mk +++ b/media/mediaserver/Android.mk @@ -8,7 +8,8 @@ LOCAL_SHARED_LIBRARIES := \ libaudioflinger \ libcameraservice \ libmediaplayerservice \ - libutils + libutils \ + libbinder base := $(LOCAL_PATH)/../.. diff --git a/media/mediaserver/main_mediaserver.cpp b/media/mediaserver/main_mediaserver.cpp index 6954b63..fbea0d4 100644 --- a/media/mediaserver/main_mediaserver.cpp +++ b/media/mediaserver/main_mediaserver.cpp @@ -20,9 +20,9 @@ #include <unistd.h> #include <grp.h> -#include <utils/IPCThreadState.h> -#include <utils/ProcessState.h> -#include <utils/IServiceManager.h> +#include <binder/IPCThreadState.h> +#include <binder/ProcessState.h> +#include <binder/IServiceManager.h> #include <utils/Log.h> #include <AudioFlinger.h> diff --git a/media/sdutils/sdutil.cpp b/media/sdutils/sdutil.cpp index a9aabf0..6f0cdfb 100644 --- a/media/sdutils/sdutil.cpp +++ b/media/sdutils/sdutil.cpp @@ -15,8 +15,8 @@ */ #include <hardware_legacy/IMountService.h> -#include <utils/BpBinder.h> -#include <utils/IServiceManager.h> +#include <binder/BpBinder.h> +#include <binder/IServiceManager.h> #include <stdio.h> #include <stdlib.h> diff --git a/media/tests/MediaFrameworkTest/AndroidManifest.xml b/media/tests/MediaFrameworkTest/AndroidManifest.xml index d0ff9ce..ac59799 100644 --- a/media/tests/MediaFrameworkTest/AndroidManifest.xml +++ b/media/tests/MediaFrameworkTest/AndroidManifest.xml @@ -19,6 +19,7 @@ <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CAMERA" /> + <uses-permission android:name="android.permission.WRITE_SDCARD" /> <application> <uses-library android:name="android.test.runner" /> <activity android:label="@string/app_name" diff --git a/media/tests/MediaFrameworkTest/res/raw/testmidi.mid b/media/tests/MediaFrameworkTest/res/raw/testmidi.mid Binary files differindex df84e20..d4ead53 100644 --- a/media/tests/MediaFrameworkTest/res/raw/testmidi.mid +++ b/media/tests/MediaFrameworkTest/res/raw/testmidi.mid diff --git a/media/tests/MediaFrameworkTest/res/raw/testmp3.mp3 b/media/tests/MediaFrameworkTest/res/raw/testmp3.mp3 Binary files differindex 89c44b0..b7d69f8 100644 --- a/media/tests/MediaFrameworkTest/res/raw/testmp3.mp3 +++ b/media/tests/MediaFrameworkTest/res/raw/testmp3.mp3 diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java index 760b6b5..fd3a4ba 100755 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java @@ -23,27 +23,27 @@ package com.android.mediaframeworktest; * */ public class MediaNames { - + //A directory to hold all kinds of media files + public static final String MEDIA_SAMPLE_POOL = "/sdcard/media_api/samples/"; //Audio files - public static final String MP3CBR = "/sdcard/media_api/music/MP3CBR.mp3"; - public static final String MP3VBR = "/sdcard/media_api/music/MP3VBR.mp3"; + public static final String MP3CBR = "/sdcard/media_api/music/MP3_256kbps_2ch.mp3"; + public static final String MP3VBR = "/sdcard/media_api/music/MP3_256kbps_2ch_VBR.mp3"; public static final String SHORTMP3 = "/sdcard/media_api/music/SHORTMP3.mp3"; - public static final String MIDI = "/sdcard/media_api/music/MIDI.mid"; + public static final String MIDI = "/sdcard/media_api/music/ants.mid"; public static final String WMA9 = "/sdcard/media_api/music/WMA9.wma"; public static final String WMA10 = "/sdcard/media_api/music/WMA10.wma"; - public static final String WAV = "/sdcard/media_api/music/complicated_wav.wav"; - public static final String AMR = "/sdcard/media_api/music/AMRNB.amr"; - public static final String OGG = "/sdcard/media_api/music/Mists_of_Time-4T.ogg"; - public static final String OGGSHORT = "/sdcard/media_api/music/Skippy.ogg"; + public static final String WAV = "/sdcard/media_api/music/rings_2ch.wav"; + public static final String AMR = "/sdcard/media_api/music/test_amr_ietf.amr"; + public static final String OGG = "/sdcard/media_api/music/Revelation.ogg"; - public static final int MP3CBR_LENGTH = 231116; - public static final int MP3VBR_LENGTH = 126407; + public static final int MP3CBR_LENGTH = 71000; + public static final int MP3VBR_LENGTH = 71000; public static final int SHORTMP3_LENGTH = 286; - public static final int MIDI_LENGTH = 210528; + public static final int MIDI_LENGTH = 17000; public static final int WMA9_LENGTH = 126559; public static final int WMA10_LENGTH = 126559; - public static final int AMR_LENGTH = 126540; - public static final int OGG_LENGTH = 40000; + public static final int AMR_LENGTH = 37000; + public static final int OGG_LENGTH = 4000; public static final int SEEK_TIME = 10000; public static final long PAUSE_WAIT_TIME = 3000; @@ -60,29 +60,21 @@ public class MediaNames { //public static final String VIDEO_RTSP3GP = "rtsp://193.159.241.21/sp/alizee05.3gp"; //local video - public static final String VIDEO_MP4 = "/sdcard/media_api/video/gingerkids.MP4"; + public static final String VIDEO_MP4 = "/sdcard/media_api/video/MPEG4_320_AAC_64.mp4"; public static final String VIDEO_LONG_3GP = "/sdcard/media_api/video/radiohead.3gp"; public static final String VIDEO_SHORT_3GP = "/sdcard/media_api/video/short.3gp"; public static final String VIDEO_LARGE_SIZE_3GP = "/sdcard/media_api/video/border_large.3gp"; - public static final String VIDEO_H263_AAC = "/sdcard/media_api/video/H263_AAC.3gp"; - public static final String VIDEO_H263_AMR = "/sdcard/media_api/video/H263_AMR.3gp"; - public static final String VIDEO_H264_AAC = "/sdcard/media_api/video/H264_AAC.3gp"; - public static final String VIDEO_H264_AMR = "/sdcard/media_api/video/H264_AMR.3gp"; + public static final String VIDEO_H263_AAC = "/sdcard/media_api/video/H263_56_AAC_24.3gp"; + public static final String VIDEO_H263_AMR = "/sdcard/media_api/video/H263_56_AMRNB_6.3gp"; + public static final String VIDEO_H264_AAC = "/sdcard/media_api/video/H264_320_AAC_64.3gp"; + public static final String VIDEO_H264_AMR = "/sdcard/media_api/video/H264_320_AMRNB_6.3gp"; public static final String VIDEO_WMV = "/sdcard/media_api/video/bugs.wmv"; - public static final String VIDEO_HIGHRES_H263 = "/sdcard/media_api/video/h263_qcif_30fps.3gp"; - public static final String VIDEO_HIGHRES_MP4 = "/sdcard/media_api/video/mpeg4_qvga_24fps.3gp"; + public static final String VIDEO_HIGHRES_H263 = "/sdcard/media_api/video/H263_500_AMRNB_12.3gp"; + public static final String VIDEO_HIGHRES_MP4 = "/sdcard/media_api/video/H264_500_AAC_128.3gp"; //ringtone public static final String ringtone = "/sdcard/media_api/ringtones/F1_NewVoicemail.mp3"; - - //streaming mp3 - public static final String STREAM_LARGE_MP3 = - "http://wms.pv.com:7070/MediaDownloadContent/mp3/BuenaVista_04_Pueblo_Nuevo.mp3"; - public static final String STREAM_SMALL_MP3 = - "http://wms.pv.com:7070/MediaDownloadContent/mp3/ID3V2_TestFile.mp3"; - public static final String STREAM_REGULAR_MP3 = - "http://wms.pv.com:7070/MediaDownloadContent/mp3/ElectricCosmo.mp3"; - + //streaming mp3 public static final String STREAM_MP3_1 = "http://wms.pv.com:7070/MediaDownloadContent/mp3/chadthi_jawani_128kbps.mp3"; diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java index d9e17ea..0c0974c 100644 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java @@ -32,8 +32,14 @@ import android.os.Looper; import android.os.SystemClock; import android.util.Log; +import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; +import java.io.Writer; +import java.io.FileOutputStream; +import java.util.Random; /** * Junit / Instrumentation test case for the media player api @@ -50,8 +56,9 @@ public class CodecTest { private static final Object lock = new Object(); private static final Object prepareDone = new Object(); private static final Object videoSizeChanged = new Object(); + private static final Object onCompletion = new Object(); private static boolean onPrepareSuccess = false; - + private static boolean onCompleteSuccess = false; public static String printCpuInfo(){ String cm = "dumpsys cpuinfo"; @@ -78,7 +85,9 @@ public class CodecTest { try{ mp.setDataSource(filePath); mp.prepare(); - }catch (Exception e){} + }catch (Exception e){ + Log.v(TAG, e.toString()); + } int duration = mp.getDuration(); Log.v(TAG, "Duration " + duration); mp.release(); @@ -527,7 +536,6 @@ public class CodecTest { //Verify the thumbnail Bitmap goldenBitmap = mBitmapFactory.decodeFile(goldenPath); - outputWidth = outThumbnail.getWidth(); outputHeight = outThumbnail.getHeight(); goldenHeight = goldenBitmap.getHeight(); @@ -537,15 +545,18 @@ public class CodecTest { if ((outputWidth != goldenWidth) || (outputHeight != goldenHeight)) return false; - //Check one line of pixel - int x = goldenHeight/2; - for (int j=0; j<goldenWidth; j++){ - if (goldenBitmap.getPixel(x, j) != outThumbnail.getPixel(x, j)){ + // Check half line of pixel + int x = goldenHeight / 2; + for (int j = 1; j < goldenWidth / 2; j++) { + if (goldenBitmap.getPixel(x, j) != outThumbnail.getPixel(x, j)) { Log.v(TAG, "pixel = " + goldenBitmap.getPixel(x, j)); - return false; + return false; } - } - }catch (Exception e){} + } + }catch (Exception e){ + Log.v(TAG, e.toString()); + return false; + } return true; } @@ -725,8 +736,75 @@ public class CodecTest { } return onPrepareSuccess; } - - - -} + static MediaPlayer.OnCompletionListener mCompletionListener = new MediaPlayer.OnCompletionListener() { + public void onCompletion(MediaPlayer mp) { + synchronized (onCompletion) { + Log.v(TAG, "notify the completion callback"); + onCompletion.notify(); + onCompleteSuccess = true; + } + } + }; + + // For each media file, forward twice and backward once, then play to the end + public static boolean playMediaSamples(String filePath) throws Exception { + int duration = 0; + int curPosition = 0; + int nextPosition = 0; + int waittime = 0; + Random r = new Random(); + initializeMessageLooper(); + synchronized (lock) { + try { + lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE); + } catch(Exception e) { + Log.v(TAG, "looper was interrupted."); + return false; + } + } + try { + mMediaPlayer.setOnCompletionListener(mCompletionListener); + Log.v(TAG, "playMediaSamples: sample file name " + filePath); + mMediaPlayer.setDataSource(filePath); + mMediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder()); + mMediaPlayer.prepare(); + duration = mMediaPlayer.getDuration(); + Log.v(TAG, "playMediaSamples: duration = " + duration); + // start to play + mMediaPlayer.start(); + // randomly play for time within (0, duration/3) + Thread.sleep(r.nextInt(duration/3)); + mMediaPlayer.pause(); + Log.v(TAG, "playMediaSamples: current position after pause: " + + mMediaPlayer.getCurrentPosition()); + // seek to position (0, 2/3*duration) + nextPosition = mMediaPlayer.getCurrentPosition() + r.nextInt(duration/3); + mMediaPlayer.seekTo(nextPosition); + Log.v(TAG, "playMediaSamples: current position after the first seek:" + + mMediaPlayer.getCurrentPosition()); + // play for another short time + mMediaPlayer.start(); + Thread.sleep(r.nextInt(duration/6)); + Log.v(TAG, "playMediaSamples: position after the second play:" + + mMediaPlayer.getCurrentPosition()); + // seek to a random position (0, duration) + mMediaPlayer.seekTo(r.nextInt(duration)); + Log.v(TAG, "playMediaSamples: current position after the second seek:" + + mMediaPlayer.getCurrentPosition()); + waittime = duration - mMediaPlayer.getCurrentPosition(); + synchronized(onCompletion){ + try { + onCompletion.wait(waittime + 30000); + }catch (Exception e) { + Log.v(TAG, "playMediaSamples are interrupted"); + return false; + } + } + terminateMessageLooper(); + }catch (Exception e) { + Log.v(TAG, "playMediaSamples:" + e.getMessage()); + } + return onCompleteSuccess; + } +} diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java index 8be7058..e01bd53 100644 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java @@ -26,6 +26,8 @@ import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.Suppress; +import java.io.File; + /** * Junit / Instrumentation test case for the media player api @@ -408,7 +410,7 @@ public class MediaPlayerApiTest extends ActivityInstrumentationTestCase<MediaFra //Play a mid file which the duration is around 210 seconds @LargeTest public void testMidiResources() throws Exception { - boolean midiResources = CodecTest.resourcesPlayback(MediaFrameworkTest.midiafd,180000); + boolean midiResources = CodecTest.resourcesPlayback(MediaFrameworkTest.midiafd,16000); assertTrue("Play midi from resources", midiResources); } @@ -420,7 +422,7 @@ public class MediaPlayerApiTest extends ActivityInstrumentationTestCase<MediaFra @MediumTest public void testPrepareAsyncReset() throws Exception { - boolean isReset = CodecTest.prepareAsyncReset(MediaNames.STREAM_LARGE_MP3); + boolean isReset = CodecTest.prepareAsyncReset(MediaNames.STREAM_MP3); assertTrue("PrepareAsync Reset", isReset); } @@ -456,4 +458,29 @@ public class MediaPlayerApiTest extends ActivityInstrumentationTestCase<MediaFra CodecTest.prepareAsyncCallback(MediaNames.STREAM_H264_480_360_1411k, true); assertTrue("StreamH264PrepareAsyncCallback", onPrepareSuccess); } + + //Provide a tool to play all kinds of media files in a directory + @Suppress + @LargeTest + public void testMediaSamples() throws Exception { + // load directory files + boolean onCompleteSuccess = false; + File dir = new File(MediaNames.MEDIA_SAMPLE_POOL); + String[] children = dir.list(); + if (children == null) { + Log.v("MediaPlayerApiTest:testMediaSamples", "dir is empty"); + return; + } else { + for (int i = 0; i < children.length; i++) { + //Get filename of directory + String filename = children[i]; + Log.v("MediaPlayerApiTest", + "testMediaSamples: file to be played: " + + dir + "/" + filename); + onCompleteSuccess = + CodecTest.playMediaSamples(dir + "/" + filename); + assertTrue("testMediaSamples", onCompleteSuccess); + } + } + } } |