summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2012-04-19 14:17:43 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-04-19 14:17:43 -0700
commitf3dbb59f1d199b6db539c84d371a2e55c7a6bd05 (patch)
tree454b4067757f513e43e143b0a0d7d970d9142440 /media
parent0d1ba1505695815907c34339c6f80c95d6fc6b40 (diff)
parent831f0a90cad923ec6b00c5c598ac4356e5849431 (diff)
downloadframeworks_base-f3dbb59f1d199b6db539c84d371a2e55c7a6bd05.zip
frameworks_base-f3dbb59f1d199b6db539c84d371a2e55c7a6bd05.tar.gz
frameworks_base-f3dbb59f1d199b6db539c84d371a2e55c7a6bd05.tar.bz2
Merge "Update javadoc for timed text / multiple audio track APIs"
Diffstat (limited to 'media')
-rw-r--r--media/java/android/media/MediaPlayer.java109
1 files changed, 65 insertions, 44 deletions
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 545752c..fae7d0b 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -1577,26 +1577,39 @@ public class MediaPlayer
/**
* Returns an array of track information.
+ * If it is called in an invalid state, IllegalStateException will be thrown.
*
- * @return Array of track info. null if an error occured.
+ * @return Array of track info. The total number of tracks is the array length.
+ * Must be called again if an external source has been added after any of the
+ * addExternalSource methods are called.
* {@hide}
*/
- // FIXME: It returns timed text tracks' information for now. Other types of tracks will be
- // supported in future.
public TrackInfo[] getTrackInfo() {
Parcel request = Parcel.obtain();
Parcel reply = Parcel.obtain();
request.writeInterfaceToken(IMEDIA_PLAYER);
request.writeInt(INVOKE_ID_GET_TRACK_INFO);
- invoke(request, reply);
+ int status = invoke(request, reply);
+ if (status != 0) {
+ throw new IllegalStateException();
+ }
TrackInfo trackInfo[] = reply.createTypedArray(TrackInfo.CREATOR);
return trackInfo;
}
+ /* Do not change these values without updating their counterparts
+ * in include/media/stagefright/MediaDefs.h and media/libstagefright/MediaDefs.cpp!
+ */
+ /**
+ * MIME type for SubRip (SRT) container. Used in addExternalSource APIs.
+ * {@hide}
+ */
+ public static final String MEDIA_MIMETYPE_TEXT_SUBRIP = "application/x-subrip";
+
/*
* A helper function to check if the mime type is supported by media framework.
*/
- private boolean availableMimeTypeForExternalSource(String mimeType) {
+ private static boolean availableMimeTypeForExternalSource(String mimeType) {
if (mimeType == MEDIA_MIMETYPE_TEXT_SUBRIP) {
return true;
}
@@ -1614,10 +1627,11 @@ public class MediaPlayer
* additional tracks become available after this method call.
*
* @param path The file path of external source file.
+ * @param mimeType The mime type of the file. Must be one of the mime types listed above.
+ * @throws IOException if the file cannot be accessed or is corrupted.
+ * @throws IllegalArgumentException if the mimeType is not supported.
* {@hide}
*/
- // FIXME: define error codes and throws exceptions according to the error codes.
- // (IllegalStateException, IOException).
public void addExternalSource(String path, String mimeType)
throws IOException, IllegalArgumentException {
if (!availableMimeTypeForExternalSource(mimeType)) {
@@ -1647,10 +1661,11 @@ public class MediaPlayer
*
* @param context the Context to use when resolving the Uri
* @param uri the Content URI of the data you want to play
+ * @param mimeType The mime type of the file. Must be one of the mime types listed above.
+ * @throws IOException if the file cannot be accessed or is corrupted.
+ * @throws IllegalArgumentException if the mimeType is not supported.
* {@hide}
*/
- // FIXME: define error codes and throws exceptions according to the error codes.
- // (IllegalStateException, IOException).
public void addExternalSource(Context context, Uri uri, String mimeType)
throws IOException, IllegalArgumentException {
String scheme = uri.getScheme();
@@ -1677,15 +1692,6 @@ public class MediaPlayer
}
}
- /* Do not change these values without updating their counterparts
- * in include/media/stagefright/MediaDefs.h and media/libstagefright/MediaDefs.cpp!
- */
- /**
- * MIME type for SubRip (SRT) container. Used in {@link #addExternalSource()} APIs.
- * {@hide}
- */
- public static final String MEDIA_MIMETYPE_TEXT_SUBRIP = "application/x-subrip";
-
/**
* Adds an external source file (FileDescriptor).
* It is the caller's responsibility to close the file descriptor.
@@ -1697,14 +1703,10 @@ public class MediaPlayer
* additional tracks become available after this method call.
*
* @param fd the FileDescriptor for the file you want to play
- * @param mimeType A MIME type for the content. It can be null.
- * <ul>
- * <li>{@link #MEDIA_MIMETYPE_TEXT_SUBRIP}
- * </ul>
+ * @param mimeType The mime type of the file. Must be one of the mime types listed above.
+ * @throws IllegalArgumentException if the mimeType is not supported.
* {@hide}
*/
- // FIXME: define error codes and throws exceptions according to the error codes.
- // (IllegalStateException, IOException).
public void addExternalSource(FileDescriptor fd, String mimeType)
throws IllegalArgumentException {
// intentionally less than LONG_MAX
@@ -1724,11 +1726,10 @@ public class MediaPlayer
* @param fd the FileDescriptor for the file you want to play
* @param offset the offset into the file where the data to be played starts, in bytes
* @param length the length in bytes of the data to be played
- * @param mimeType A MIME type for the content. It can be null.
+ * @param mimeType The mime type of the file. Must be one of the mime types listed above.
+ * @throws IllegalArgumentException if the mimeType is not supported.
* {@hide}
*/
- // FIXME: define error codes and throws exceptions according to the error codes.
- // (IllegalStateException, IOException).
public void addExternalSource(FileDescriptor fd, long offset, long length, String mimeType)
throws IllegalArgumentException {
if (!availableMimeTypeForExternalSource(mimeType)) {
@@ -1749,8 +1750,8 @@ public class MediaPlayer
/**
* Selects a track.
* <p>
- * If a MediaPlayer is in invalid state, it throws exception.
- * If a MediaPlayer is in Started state, the selected track will be presented immediately.
+ * If a MediaPlayer is in invalid state, it throws an IllegalStateException exception.
+ * If a MediaPlayer is in <em>Started</em> state, the selected track is presented immediately.
* If a MediaPlayer is not in Started state, it just marks the track to be played.
* </p>
* <p>
@@ -1758,38 +1759,58 @@ public class MediaPlayer
* Audio, Timed Text), the most recent one will be chosen.
* </p>
* <p>
- * The first audio and video tracks will be selected by default, even though this function is not
- * called. However, no timed text track will be selected until this function is called.
+ * The first audio and video tracks are selected by default if available, even though
+ * this method is not called. However, no timed text track will be selected until
+ * this function is called.
+ * </p>
+ * <p>
+ * Currently, only timed text tracks or audio tracks can be selected via this method.
+ * In addition, the support for selecting an audio track at runtime is pretty limited
+ * in that an audio track can only be selected in the <em>Prepared</em> state.
* </p>
+ * @param index the index of the track to be selected. The valid range of the index
+ * is 0..total number of track - 1. The total number of tracks as well as the type of
+ * each individual track can be found by calling {@link #getTrackInfo()} method.
+ * @see android.media.MediaPlayer.getTrackInfo
* {@hide}
*/
- // FIXME: define error codes and throws exceptions according to the error codes.
- // (IllegalStateException, IOException, IllegalArgumentException).
public void selectTrack(int index) {
- Parcel request = Parcel.obtain();
- Parcel reply = Parcel.obtain();
- request.writeInterfaceToken(IMEDIA_PLAYER);
- request.writeInt(INVOKE_ID_SELECT_TRACK);
- request.writeInt(index);
- invoke(request, reply);
+ selectOrUnselectTrack(index, true /* select */);
}
/**
* Unselect a track.
- * If the track identified by index has not been selected before, it throws an exception.
+ * <p>
+ * Currently, the track must be a timed text track and no audio or video tracks can be
+ * unselected. If the timed text track identified by index has not been
+ * selected before, it throws an exception.
+ * </p>
+ * @param index the index of the track to be unselected. The valid range of the index
+ * is 0..total number of tracks - 1. The total number of tracks as well as the type of
+ * each individual track can be found by calling {@link #getTrackInfo()} method.
+ *
+ * @see android.media.MediaPlayer.getTrackInfo
* {@hide}
*/
- // FIXME: define error codes and throws exceptions according to the error codes.
- // (IllegalStateException, IOException, IllegalArgumentException).
public void unselectTrack(int index) {
+ selectOrUnselectTrack(index, false /* select */);
+ }
+
+ private void selectOrUnselectTrack(int index, boolean select) {
Parcel request = Parcel.obtain();
Parcel reply = Parcel.obtain();
request.writeInterfaceToken(IMEDIA_PLAYER);
- request.writeInt(INVOKE_ID_UNSELECT_TRACK);
+ request.writeInt(select? INVOKE_ID_SELECT_TRACK: INVOKE_ID_UNSELECT_TRACK);
request.writeInt(index);
- invoke(request, reply);
+ int status = invoke(request, reply);
+ if (status != 0) {
+ String msg = select? "selectTrack ": "unselectTrack ";
+ msg += "failed for track index: " + index;
+ throw new RuntimeException(msg);
+ }
}
+
/**
* @param reply Parcel with audio/video duration info for battery
tracking usage