Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Unified Diff: sky/services/media/src/org/domokit/media/MediaPlayerImpl.java

Issue 1211913005: Add a sky media service to make it possible to play a sound. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Updated per review Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/services/media/media.mojom ('k') | sky/services/media/src/org/domokit/media/MediaServiceImpl.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/services/media/src/org/domokit/media/MediaPlayerImpl.java
diff --git a/sky/services/media/src/org/domokit/media/MediaPlayerImpl.java b/sky/services/media/src/org/domokit/media/MediaPlayerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..8c27ee46136b8b258c646d781b48b65124bbad59
--- /dev/null
+++ b/sky/services/media/src/org/domokit/media/MediaPlayerImpl.java
@@ -0,0 +1,110 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.domokit.media;
+
+import android.content.Context;
+import android.util.Log;
+
+import org.chromium.mojo.common.DataPipeUtils;
+import org.chromium.mojo.system.Core;
+import org.chromium.mojo.system.DataPipe;
+import org.chromium.mojo.system.MojoException;
+import org.chromium.mojom.media.MediaPlayer;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.concurrent.Executor;
+
+/**
+ * Android implementation of MediaPlayer.
+ */
+public class MediaPlayerImpl implements MediaPlayer, android.media.MediaPlayer.OnPreparedListener {
+ private static final String TAG = "MediaPlayerImpl";
+ private final Core mCore;
+ private final Context mContext;
+ private final Executor mExecutor;
+ private final android.media.MediaPlayer mPlayer;
+ private PrepareResponse mPrepareResponse;
+ private File mTempFile;
+
+ public MediaPlayerImpl(Core core, Context context, Executor executor) {
+ mCore = core;
+ mContext = context;
+ mExecutor = executor;
+ mPlayer = new android.media.MediaPlayer();
+ mTempFile = null;
+ mPrepareResponse = null;
+ }
+
+ @Override
+ public void close() {
+ mPlayer.release();
+ if (mTempFile != null) {
+ mTempFile.delete();
+ }
+ }
+
+ @Override
+ public void onConnectionError(MojoException e) {
+ }
+
+ @Override
+ public void onPrepared(android.media.MediaPlayer mp) {
+ assert mPlayer == mp;
+ assert mPrepareResponse != null;
+ // ignored argument due to https://github.com/domokit/mojo/issues/282
+ boolean ignored = true;
+ mPrepareResponse.call(ignored);
+ }
+
+ public void copyComplete() {
+ try {
+ mPlayer.setOnPreparedListener(this);
+ mPlayer.setDataSource(mTempFile.getCanonicalPath());
+ mPlayer.prepare();
+ } catch (java.io.IOException e) {
+ Log.e(TAG, "Exception", e);
+ mPrepareResponse.call(false);
+ mPrepareResponse = null;
+ }
+ }
+
+ @Override
+ public void prepare(DataPipe.ConsumerHandle consumerHandle, PrepareResponse callback) {
+ // TODO(eseidel): Ideally we'll find a way to hand the data straight
+ // to Android's audio system w/o first having to dump it to a file.
+ File outputDir = mContext.getCacheDir();
+ mPrepareResponse = callback;
+ try {
+ mTempFile = File.createTempFile("sky_media_player", "temp", outputDir);
+ } catch (IOException e) {
+ Log.e(TAG, "Failed to create temporary file", e);
+ callback.call(false);
+ return; // TODO(eseidel): We should close the pipe?
+ }
+
+ DataPipeUtils.copyToFile(mCore, consumerHandle, mTempFile, mExecutor, new Runnable() {
+ @Override
+ public void run() {
+ copyComplete();
+ }
+ });
+ }
+
+ @Override
+ public void start() {
+ mPlayer.start();
+ }
+
+ @Override
+ public void seekTo(int msec) {
+ mPlayer.seekTo(msec);
+ }
+
+ @Override
+ public void pause() {
+ mPlayer.pause();
+ }
+}
« no previous file with comments | « sky/services/media/media.mojom ('k') | sky/services/media/src/org/domokit/media/MediaServiceImpl.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698