diff options
author | Glenn Kasten <gkasten@google.com> | 2011-07-27 14:45:28 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-07-27 14:45:28 -0700 |
commit | 43a5d6e541fef5983e967d9b67792c0a088418ea (patch) | |
tree | aa14971b2431d0c07b150825e22c4f9e471cdf40 | |
parent | f92fbc5daf6a4446054205ee2d829ea157afa2b7 (diff) | |
parent | 6ff9b812abe388478bbaba118a580c3f4a30c863 (diff) | |
download | frameworks_base-43a5d6e541fef5983e967d9b67792c0a088418ea.zip frameworks_base-43a5d6e541fef5983e967d9b67792c0a088418ea.tar.gz frameworks_base-43a5d6e541fef5983e967d9b67792c0a088418ea.tar.bz2 |
Merge "Bug 4599730 Get audio channel count on MediaPlayer"
-rw-r--r-- | include/media/mediaplayer.h | 17 | ||||
-rw-r--r-- | media/java/android/media/MediaPlayer.java | 21 | ||||
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 17 |
3 files changed, 46 insertions, 9 deletions
diff --git a/include/media/mediaplayer.h b/include/media/mediaplayer.h index 1136f6c..1a67671 100644 --- a/include/media/mediaplayer.h +++ b/include/media/mediaplayer.h @@ -130,13 +130,22 @@ enum media_player_states { MEDIA_PLAYER_PLAYBACK_COMPLETE = 1 << 7 }; -enum media_set_parameter_keys { - KEY_PARAMETER_TIMED_TEXT_TRACK_INDEX = 1000, - KEY_PARAMETER_TIMED_TEXT_ADD_OUT_OF_BAND_SOURCE = 1001, +// Keep KEY_PARAMETER_* in sync with MediaPlayer.java. +// The same enum space is used for both set and get, in case there are future keys that +// can be both set and get. But as of now, all parameters are either set only or get only. +enum media_parameter_keys { + KEY_PARAMETER_TIMED_TEXT_TRACK_INDEX = 1000, // set only + KEY_PARAMETER_TIMED_TEXT_ADD_OUT_OF_BAND_SOURCE = 1001, // set only // Streaming/buffering parameters - KEY_PARAMETER_CACHE_STAT_COLLECT_FREQ_MS = 1100, + KEY_PARAMETER_CACHE_STAT_COLLECT_FREQ_MS = 1100, // set only + + // Return a Parcel containing a single int, which is the channel count of the + // audio track, or zero for error (e.g. no audio track) or unknown. + KEY_PARAMETER_AUDIO_CHANNEL_COUNT = 1200, // get only + }; + // ---------------------------------------------------------------------------- // ref-counted object for callbacks class MediaPlayerListener: virtual public RefBase diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 95671bc..1bacdbb 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -1333,6 +1333,10 @@ public class MediaPlayer */ private static final int KEY_PARAMETER_TIMED_TEXT_ADD_OUT_OF_BAND_SOURCE = 1001; + // There are currently no defined keys usable from Java with get*Parameter. + // But if any keys are defined, the order must be kept in sync with include/media/mediaplayer.h. + // private static final int KEY_PARAMETER_... = ...; + /** * Sets the parameter indicated by key. * @param key key indicates the parameter to be set. @@ -1352,7 +1356,9 @@ public class MediaPlayer public boolean setParameter(int key, String value) { Parcel p = Parcel.obtain(); p.writeString(value); - return setParameter(key, p); + boolean ret = setParameter(key, p); + p.recycle(); + return ret; } /** @@ -1365,7 +1371,9 @@ public class MediaPlayer public boolean setParameter(int key, int value) { Parcel p = Parcel.obtain(); p.writeInt(value); - return setParameter(key, p); + boolean ret = setParameter(key, p); + p.recycle(); + return ret; } /** @@ -1377,6 +1385,7 @@ public class MediaPlayer /** * Gets the value of the parameter indicated by key. + * The caller is responsible for recycling the returned parcel. * @param key key indicates the parameter to get. * @return value of the parameter. * {@hide} @@ -1396,7 +1405,9 @@ public class MediaPlayer public String getStringParameter(int key) { Parcel p = Parcel.obtain(); getParameter(key, p); - return p.readString(); + String ret = p.readString(); + p.recycle(); + return ret; } /** @@ -1408,7 +1419,9 @@ public class MediaPlayer public int getIntParameter(int key) { Parcel p = Parcel.obtain(); getParameter(key, p); - return p.readInt(); + int ret = p.readInt(); + p.recycle(); + return ret; } /** diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 0098537..67f6c79 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -2238,7 +2238,22 @@ status_t AwesomePlayer::setCacheStatCollectFreq(const Parcel &request) { } status_t AwesomePlayer::getParameter(int key, Parcel *reply) { - return OK; + switch (key) { + case KEY_PARAMETER_AUDIO_CHANNEL_COUNT: + { + int32_t channelCount; + if (mAudioTrack == 0 || + !mAudioTrack->getFormat()->findInt32(kKeyChannelCount, &channelCount)) { + channelCount = 0; + } + reply->writeInt32(channelCount); + } + return OK; + default: + { + return ERROR_UNSUPPORTED; + } + } } bool AwesomePlayer::isStreamingHTTP() const { |