summaryrefslogtreecommitdiffstats
path: root/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java
diff options
context:
space:
mode:
authorHugo Hudson <hugohudson@google.com>2011-07-14 23:31:17 +0100
committerHugo Hudson <hugohudson@google.com>2011-07-15 17:32:09 +0100
commitb83ad73794088498d6d38cd3b4fc9311f505d051 (patch)
tree678afd4df3c8fc56af51247f21ee3bc413b681e5 /variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java
parent409fc12c707e39b55303251b728787ee5147b468 (diff)
downloadandroid_frameworks_ex-b83ad73794088498d6d38cd3b4fc9311f505d051.tar.gz
android_frameworks_ex-b83ad73794088498d6d38cd3b4fc9311f505d051.tar.bz2
android_frameworks_ex-b83ad73794088498d6d38cd3b4fc9311f505d051.zip
Initial check-in of variable speed playback library.
Contains an implementation of time-domain audio scaler, for pitch-invariant speed up and slow-down of audio. Contains wrapper library using OpenSLES to pump audio from encoded stream (mp3 file etc) through audio decoder then through time scaler and out to media player. This is written as a jni library with jni hooks to allow driving of this from the Java side. The other part of this cl is the Java wrapper. There is a new interface MediaPlayerProxy, containing a subset of the methods found on the MediaPlayer. The VariableSpeed class provides a concrete implementation of this interface adapting to the jni code. Change-Id: I518d8bf703488628c00730241a08ebfb67588ca6
Diffstat (limited to 'variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java')
-rw-r--r--variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java105
1 files changed, 105 insertions, 0 deletions
diff --git a/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java b/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java
new file mode 100644
index 0000000..035bc0e
--- /dev/null
+++ b/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.ex.variablespeed;
+
+import android.content.Context;
+import android.media.MediaPlayer;
+import android.net.Uri;
+
+import java.io.IOException;
+
+/**
+ * Simple wrapper around a {@link MediaPlayerProxy}, guaranteeing that every call made to the
+ * MediaPlayerProxy is single-threaded.
+ */
+public class SingleThreadedMediaPlayerProxy implements MediaPlayerProxy {
+ private final MediaPlayerProxy mDelegate;
+
+ public SingleThreadedMediaPlayerProxy(MediaPlayerProxy delegate) {
+ mDelegate = delegate;
+ }
+
+ @Override
+ public synchronized void setOnErrorListener(MediaPlayer.OnErrorListener listener) {
+ mDelegate.setOnErrorListener(listener);
+ }
+
+ @Override
+ public synchronized void setOnCompletionListener(MediaPlayer.OnCompletionListener listener) {
+ mDelegate.setOnCompletionListener(listener);
+ }
+
+ @Override
+ public synchronized void release() {
+ mDelegate.release();
+ }
+
+ @Override
+ public synchronized void reset() {
+ mDelegate.reset();
+ }
+
+ @Override
+ public synchronized void setDataSource(String path) throws IllegalStateException, IOException {
+ mDelegate.setDataSource(path);
+ }
+
+ @Override
+ public synchronized void setDataSource(Context context, Uri intentUri)
+ throws IllegalStateException, IOException {
+ mDelegate.setDataSource(context, intentUri);
+ }
+
+ @Override
+ public synchronized void prepare() throws IOException {
+ mDelegate.prepare();
+ }
+
+ @Override
+ public synchronized int getDuration() {
+ return mDelegate.getDuration();
+ }
+
+ @Override
+ public synchronized void seekTo(int startPosition) {
+ mDelegate.seekTo(startPosition);
+ }
+
+ @Override
+ public synchronized void start() {
+ mDelegate.start();
+ }
+
+ @Override
+ public synchronized boolean isPlaying() {
+ return mDelegate.isPlaying();
+ }
+
+ @Override
+ public synchronized int getCurrentPosition() {
+ return mDelegate.getCurrentPosition();
+ }
+
+ public void setVariableSpeed(float rate) {
+ ((VariableSpeed) mDelegate).setVariableSpeed(rate);
+ }
+
+ @Override
+ public synchronized void pause() {
+ mDelegate.pause();
+ }
+}