| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 1 | /* | 
 | 2 |  * Copyright (C) 2007 The Android Open Source Project | 
 | 3 |  * | 
 | 4 |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
 | 5 |  * you may not use this file except in compliance with the License. | 
 | 6 |  * You may obtain a copy of the License at | 
 | 7 |  * | 
 | 8 |  *      http://www.apache.org/licenses/LICENSE-2.0 | 
 | 9 |  * | 
 | 10 |  * Unless required by applicable law or agreed to in writing, software | 
 | 11 |  * distributed under the License is distributed on an "AS IS" BASIS, | 
 | 12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | 13 |  * See the License for the specific language governing permissions and | 
 | 14 |  * limitations under the License. | 
 | 15 |  */ | 
 | 16 |  | 
 | 17 | #ifndef ANDROID_MEDIAPLAYER_H | 
 | 18 | #define ANDROID_MEDIAPLAYER_H | 
 | 19 |  | 
| John Grossman | c795b64 | 2012-02-22 15:38:35 -0800 | [diff] [blame] | 20 | #include <arpa/inet.h> | 
 | 21 |  | 
| Mathias Agopian | 7562408 | 2009-05-19 19:08:10 -0700 | [diff] [blame] | 22 | #include <binder/IMemory.h> | 
| Lajos Molnar | 3a474aa | 2015-04-24 17:10:07 -0700 | [diff] [blame] | 23 |  | 
 | 24 | #include <media/AudioResamplerPublic.h> | 
| Wei Jia | ed32086 | 2017-01-18 14:03:40 -0800 | [diff] [blame] | 25 | #include <media/BufferingSettings.h> | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 26 | #include <media/IMediaPlayerClient.h> | 
 | 27 | #include <media/IMediaPlayer.h> | 
| James Dong | dd172fc | 2010-01-15 18:13:58 -0800 | [diff] [blame] | 28 | #include <media/IMediaDeathNotifier.h> | 
| Dave Burke | d681bbb | 2011-08-30 14:39:17 +0100 | [diff] [blame] | 29 | #include <media/IStreamSource.h> | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 30 |  | 
| Andreas Huber | 2db8455 | 2010-01-28 11:19:57 -0800 | [diff] [blame] | 31 | #include <utils/KeyedVector.h> | 
 | 32 | #include <utils/String8.h> | 
 | 33 |  | 
| Colin Cross | ae4aba1 | 2016-09-16 13:02:22 -0700 | [diff] [blame] | 34 | struct ANativeWindow; | 
| Jamie Gennis | 61c7ef5 | 2011-07-13 12:59:34 -0700 | [diff] [blame] | 35 |  | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 36 | namespace android { | 
 | 37 |  | 
| Lajos Molnar | 3a474aa | 2015-04-24 17:10:07 -0700 | [diff] [blame] | 38 | struct AVSyncSettings; | 
| Andy McFadden | 484566c | 2012-12-18 09:46:54 -0800 | [diff] [blame] | 39 | class IGraphicBufferProducer; | 
| Lajos Molnar | 3a474aa | 2015-04-24 17:10:07 -0700 | [diff] [blame] | 40 | class Surface; | 
| Mathias Agopian | 3cf6135 | 2010-02-09 17:46:37 -0800 | [diff] [blame] | 41 |  | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 42 | enum media_event_type { | 
 | 43 |     MEDIA_NOP               = 0, // interface test message | 
 | 44 |     MEDIA_PREPARED          = 1, | 
 | 45 |     MEDIA_PLAYBACK_COMPLETE = 2, | 
 | 46 |     MEDIA_BUFFERING_UPDATE  = 3, | 
 | 47 |     MEDIA_SEEK_COMPLETE     = 4, | 
 | 48 |     MEDIA_SET_VIDEO_SIZE    = 5, | 
| Lajos Molnar | cbaffcf | 2013-08-14 18:30:38 -0700 | [diff] [blame] | 49 |     MEDIA_STARTED           = 6, | 
 | 50 |     MEDIA_PAUSED            = 7, | 
 | 51 |     MEDIA_STOPPED           = 8, | 
| Lajos Molnar | 6218fdc | 2013-09-25 08:09:41 -0700 | [diff] [blame] | 52 |     MEDIA_SKIPPED           = 9, | 
| Gloria Wang | b483c47 | 2011-04-11 17:23:27 -0700 | [diff] [blame] | 53 |     MEDIA_TIMED_TEXT        = 99, | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 54 |     MEDIA_ERROR             = 100, | 
| The Android Open Source Project | 65e731f | 2009-03-11 12:11:56 -0700 | [diff] [blame] | 55 |     MEDIA_INFO              = 200, | 
| Chong Zhang | dcb89b3 | 2013-08-06 09:44:47 -0700 | [diff] [blame] | 56 |     MEDIA_SUBTITLE_DATA     = 201, | 
| Robert Shih | 0852843 | 2015-04-08 09:06:54 -0700 | [diff] [blame] | 57 |     MEDIA_META_DATA         = 202, | 
| Hassan Shojania | 071437a | 2017-01-23 09:19:40 -0800 | [diff] [blame] | 58 |     MEDIA_DRM_INFO          = 210, | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 59 | }; | 
 | 60 |  | 
| The Android Open Source Project | 65e731f | 2009-03-11 12:11:56 -0700 | [diff] [blame] | 61 | // Generic error codes for the media player framework.  Errors are fatal, the | 
 | 62 | // playback must abort. | 
 | 63 | // | 
 | 64 | // Errors are communicated back to the client using the | 
 | 65 | // MediaPlayerListener::notify method defined below. | 
 | 66 | // In this situation, 'notify' is invoked with the following: | 
 | 67 | //   'msg' is set to MEDIA_ERROR. | 
 | 68 | //   'ext1' should be a value from the enum media_error_type. | 
 | 69 | //   'ext2' contains an implementation dependant error code to provide | 
 | 70 | //          more details. Should default to 0 when not used. | 
 | 71 | // | 
 | 72 | // The codes are distributed as follow: | 
 | 73 | //   0xx: Reserved | 
 | 74 | //   1xx: Android Player errors. Something went wrong inside the MediaPlayer. | 
 | 75 | //   2xx: Media errors (e.g Codec not supported). There is a problem with the | 
 | 76 | //        media itself. | 
 | 77 | //   3xx: Runtime errors. Some extraordinary condition arose making the playback | 
 | 78 | //        impossible. | 
 | 79 | // | 
 | 80 | enum media_error_type { | 
 | 81 |     // 0xx | 
 | 82 |     MEDIA_ERROR_UNKNOWN = 1, | 
 | 83 |     // 1xx | 
 | 84 |     MEDIA_ERROR_SERVER_DIED = 100, | 
 | 85 |     // 2xx | 
 | 86 |     MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200, | 
 | 87 |     // 3xx | 
 | 88 | }; | 
 | 89 |  | 
 | 90 |  | 
 | 91 | // Info and warning codes for the media player framework.  These are non fatal, | 
 | 92 | // the playback is going on but there might be some user visible issues. | 
 | 93 | // | 
 | 94 | // Info and warning messages are communicated back to the client using the | 
 | 95 | // MediaPlayerListener::notify method defined below.  In this situation, | 
 | 96 | // 'notify' is invoked with the following: | 
 | 97 | //   'msg' is set to MEDIA_INFO. | 
 | 98 | //   'ext1' should be a value from the enum media_info_type. | 
| Ravi K Yenduri | 387eac4 | 2009-06-21 17:19:58 -0500 | [diff] [blame] | 99 | //   'ext2' contains an implementation dependant info code to provide | 
| The Android Open Source Project | 65e731f | 2009-03-11 12:11:56 -0700 | [diff] [blame] | 100 | //          more details. Should default to 0 when not used. | 
 | 101 | // | 
 | 102 | // The codes are distributed as follow: | 
 | 103 | //   0xx: Reserved | 
 | 104 | //   7xx: Android Player info/warning (e.g player lagging behind.) | 
 | 105 | //   8xx: Media info/warning (e.g media badly interleaved.) | 
| Nicolas Catania | 6609518 | 2009-06-11 16:33:49 -0700 | [diff] [blame] | 106 | // | 
| The Android Open Source Project | 65e731f | 2009-03-11 12:11:56 -0700 | [diff] [blame] | 107 | enum media_info_type { | 
 | 108 |     // 0xx | 
 | 109 |     MEDIA_INFO_UNKNOWN = 1, | 
| Marco Nelissen | 6b74d67 | 2012-02-28 16:07:44 -0800 | [diff] [blame] | 110 |     // The player was started because it was used as the next player for another | 
 | 111 |     // player, which just completed playback | 
 | 112 |     MEDIA_INFO_STARTED_AS_NEXT = 2, | 
| James Dong | c374dae | 2012-07-19 19:18:06 -0700 | [diff] [blame] | 113 |     // The player just pushed the very first video frame for rendering | 
 | 114 |     MEDIA_INFO_RENDERING_START = 3, | 
| The Android Open Source Project | 65e731f | 2009-03-11 12:11:56 -0700 | [diff] [blame] | 115 |     // 7xx | 
 | 116 |     // The video is too complex for the decoder: it can't decode frames fast | 
 | 117 |     // enough. Possibly only the audio plays fine at this stage. | 
 | 118 |     MEDIA_INFO_VIDEO_TRACK_LAGGING = 700, | 
| Andreas Huber | 0a5baa9 | 2010-06-10 11:17:50 -0700 | [diff] [blame] | 119 |     // MediaPlayer is temporarily pausing playback internally in order to | 
 | 120 |     // buffer more data. | 
 | 121 |     MEDIA_INFO_BUFFERING_START = 701, | 
 | 122 |     // MediaPlayer is resuming playback after filling buffers. | 
 | 123 |     MEDIA_INFO_BUFFERING_END = 702, | 
| James Dong | 5b1b8a9 | 2011-05-25 19:37:03 -0700 | [diff] [blame] | 124 |     // Bandwidth in recent past | 
 | 125 |     MEDIA_INFO_NETWORK_BANDWIDTH = 703, | 
 | 126 |  | 
| The Android Open Source Project | 65e731f | 2009-03-11 12:11:56 -0700 | [diff] [blame] | 127 |     // 8xx | 
 | 128 |     // Bad interleaving means that a media has been improperly interleaved or not | 
 | 129 |     // interleaved at all, e.g has all the video samples first then all the audio | 
 | 130 |     // ones. Video is playing but a lot of disk seek may be happening. | 
 | 131 |     MEDIA_INFO_BAD_INTERLEAVING = 800, | 
 | 132 |     // The media is not seekable (e.g live stream). | 
 | 133 |     MEDIA_INFO_NOT_SEEKABLE = 801, | 
| Nicolas Catania | a7e0e8b | 2009-07-08 08:57:42 -0700 | [diff] [blame] | 134 |     // New media metadata is available. | 
 | 135 |     MEDIA_INFO_METADATA_UPDATE = 802, | 
| Wei Jia | 686e8e5 | 2017-04-03 14:08:01 -0700 | [diff] [blame] | 136 |     // Audio can not be played. | 
 | 137 |     MEDIA_INFO_PLAY_AUDIO_ERROR = 804, | 
 | 138 |     // Video can not be played. | 
 | 139 |     MEDIA_INFO_PLAY_VIDEO_ERROR = 805, | 
| Insun Kang | f9d660a | 2012-02-16 20:28:27 +0900 | [diff] [blame] | 140 |  | 
 | 141 |     //9xx | 
 | 142 |     MEDIA_INFO_TIMED_TEXT_ERROR = 900, | 
| The Android Open Source Project | 65e731f | 2009-03-11 12:11:56 -0700 | [diff] [blame] | 143 | }; | 
 | 144 |  | 
 | 145 |  | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 146 |  | 
 | 147 | enum media_player_states { | 
 | 148 |     MEDIA_PLAYER_STATE_ERROR        = 0, | 
 | 149 |     MEDIA_PLAYER_IDLE               = 1 << 0, | 
 | 150 |     MEDIA_PLAYER_INITIALIZED        = 1 << 1, | 
 | 151 |     MEDIA_PLAYER_PREPARING          = 1 << 2, | 
 | 152 |     MEDIA_PLAYER_PREPARED           = 1 << 3, | 
 | 153 |     MEDIA_PLAYER_STARTED            = 1 << 4, | 
 | 154 |     MEDIA_PLAYER_PAUSED             = 1 << 5, | 
 | 155 |     MEDIA_PLAYER_STOPPED            = 1 << 6, | 
 | 156 |     MEDIA_PLAYER_PLAYBACK_COMPLETE  = 1 << 7 | 
 | 157 | }; | 
 | 158 |  | 
| Glenn Kasten | cd25fed | 2011-07-25 09:26:22 -0700 | [diff] [blame] | 159 | // Keep KEY_PARAMETER_* in sync with MediaPlayer.java. | 
 | 160 | // The same enum space is used for both set and get, in case there are future keys that | 
 | 161 | // can be both set and get.  But as of now, all parameters are either set only or get only. | 
 | 162 | enum media_parameter_keys { | 
| James Dong | 5b1b8a9 | 2011-05-25 19:37:03 -0700 | [diff] [blame] | 163 |     // Streaming/buffering parameters | 
| Glenn Kasten | cd25fed | 2011-07-25 09:26:22 -0700 | [diff] [blame] | 164 |     KEY_PARAMETER_CACHE_STAT_COLLECT_FREQ_MS = 1100,            // set only | 
 | 165 |  | 
 | 166 |     // Return a Parcel containing a single int, which is the channel count of the | 
 | 167 |     // audio track, or zero for error (e.g. no audio track) or unknown. | 
 | 168 |     KEY_PARAMETER_AUDIO_CHANNEL_COUNT = 1200,                   // get only | 
 | 169 |  | 
| Jean-Michel Trivi | 7a8b0ed | 2012-02-02 09:06:31 -0800 | [diff] [blame] | 170 |     // Playback rate expressed in permille (1000 is normal speed), saved as int32_t, with negative | 
 | 171 |     // values used for rewinding or reverse playback. | 
 | 172 |     KEY_PARAMETER_PLAYBACK_RATE_PERMILLE = 1300,                // set only | 
| Jean-Michel Trivi | d9d7fa0 | 2014-06-24 08:01:46 -0700 | [diff] [blame] | 173 |  | 
 | 174 |     // Set a Parcel containing the value of a parcelled Java AudioAttribute instance | 
 | 175 |     KEY_PARAMETER_AUDIO_ATTRIBUTES = 1400                       // set only | 
| Gloria Wang | 7a1e3e8 | 2011-05-03 15:59:03 -0700 | [diff] [blame] | 176 | }; | 
| Glenn Kasten | cd25fed | 2011-07-25 09:26:22 -0700 | [diff] [blame] | 177 |  | 
| Insun Kang | f9d660a | 2012-02-16 20:28:27 +0900 | [diff] [blame] | 178 | // Keep INVOKE_ID_* in sync with MediaPlayer.java. | 
 | 179 | enum media_player_invoke_ids { | 
 | 180 |     INVOKE_ID_GET_TRACK_INFO = 1, | 
 | 181 |     INVOKE_ID_ADD_EXTERNAL_SOURCE = 2, | 
 | 182 |     INVOKE_ID_ADD_EXTERNAL_SOURCE_FD = 3, | 
 | 183 |     INVOKE_ID_SELECT_TRACK = 4, | 
 | 184 |     INVOKE_ID_UNSELECT_TRACK = 5, | 
| Robert Shih | 7c4f0d7 | 2014-07-09 18:53:31 -0700 | [diff] [blame] | 185 |     INVOKE_ID_SET_VIDEO_SCALING_MODE = 6, | 
 | 186 |     INVOKE_ID_GET_SELECTED_TRACK = 7 | 
| Insun Kang | f9d660a | 2012-02-16 20:28:27 +0900 | [diff] [blame] | 187 | }; | 
 | 188 |  | 
 | 189 | // Keep MEDIA_TRACK_TYPE_* in sync with MediaPlayer.java. | 
 | 190 | enum media_track_type { | 
 | 191 |     MEDIA_TRACK_TYPE_UNKNOWN = 0, | 
 | 192 |     MEDIA_TRACK_TYPE_VIDEO = 1, | 
 | 193 |     MEDIA_TRACK_TYPE_AUDIO = 2, | 
 | 194 |     MEDIA_TRACK_TYPE_TIMEDTEXT = 3, | 
| Chong Zhang | dcb89b3 | 2013-08-06 09:44:47 -0700 | [diff] [blame] | 195 |     MEDIA_TRACK_TYPE_SUBTITLE = 4, | 
| Robert Shih | 0852843 | 2015-04-08 09:06:54 -0700 | [diff] [blame] | 196 |     MEDIA_TRACK_TYPE_METADATA = 5, | 
| Insun Kang | f9d660a | 2012-02-16 20:28:27 +0900 | [diff] [blame] | 197 | }; | 
 | 198 |  | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 199 | // ---------------------------------------------------------------------------- | 
 | 200 | // ref-counted object for callbacks | 
 | 201 | class MediaPlayerListener: virtual public RefBase | 
 | 202 | { | 
 | 203 | public: | 
| Gloria Wang | b483c47 | 2011-04-11 17:23:27 -0700 | [diff] [blame] | 204 |     virtual void notify(int msg, int ext1, int ext2, const Parcel *obj) = 0; | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 205 | }; | 
 | 206 |  | 
| Andreas Huber | 1b86fe0 | 2014-01-29 11:13:26 -0800 | [diff] [blame] | 207 | struct IMediaHTTPService; | 
 | 208 |  | 
| James Dong | dd172fc | 2010-01-15 18:13:58 -0800 | [diff] [blame] | 209 | class MediaPlayer : public BnMediaPlayerClient, | 
 | 210 |                     public virtual IMediaDeathNotifier | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 211 | { | 
 | 212 | public: | 
 | 213 |     MediaPlayer(); | 
 | 214 |     ~MediaPlayer(); | 
| James Dong | dd172fc | 2010-01-15 18:13:58 -0800 | [diff] [blame] | 215 |             void            died(); | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 216 |             void            disconnect(); | 
| Andreas Huber | 2db8455 | 2010-01-28 11:19:57 -0800 | [diff] [blame] | 217 |  | 
 | 218 |             status_t        setDataSource( | 
| Andreas Huber | 1b86fe0 | 2014-01-29 11:13:26 -0800 | [diff] [blame] | 219 |                     const sp<IMediaHTTPService> &httpService, | 
| Andreas Huber | 2db8455 | 2010-01-28 11:19:57 -0800 | [diff] [blame] | 220 |                     const char *url, | 
 | 221 |                     const KeyedVector<String8, String8> *headers); | 
 | 222 |  | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 223 |             status_t        setDataSource(int fd, int64_t offset, int64_t length); | 
| Chris Watkins | 99f3160 | 2015-03-20 13:06:33 -0700 | [diff] [blame] | 224 |             status_t        setDataSource(const sp<IDataSource> &source); | 
| Glenn Kasten | 1173118 | 2011-02-08 17:26:17 -0800 | [diff] [blame] | 225 |             status_t        setVideoSurfaceTexture( | 
| Andy McFadden | 484566c | 2012-12-18 09:46:54 -0800 | [diff] [blame] | 226 |                                     const sp<IGraphicBufferProducer>& bufferProducer); | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 227 |             status_t        setListener(const sp<MediaPlayerListener>& listener); | 
| Wei Jia | dc6f340 | 2017-01-09 15:04:18 -0800 | [diff] [blame] | 228 |             status_t        getDefaultBufferingSettings(BufferingSettings* buffering /* nonnull */); | 
| Wei Jia | ed32086 | 2017-01-18 14:03:40 -0800 | [diff] [blame] | 229 |             status_t        getBufferingSettings(BufferingSettings* buffering /* nonnull */); | 
| Wei Jia | dc6f340 | 2017-01-09 15:04:18 -0800 | [diff] [blame] | 230 |             status_t        setBufferingSettings(const BufferingSettings& buffering); | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 231 |             status_t        prepare(); | 
 | 232 |             status_t        prepareAsync(); | 
 | 233 |             status_t        start(); | 
 | 234 |             status_t        stop(); | 
 | 235 |             status_t        pause(); | 
 | 236 |             bool            isPlaying(); | 
| Lajos Molnar | 3a474aa | 2015-04-24 17:10:07 -0700 | [diff] [blame] | 237 |             status_t        setPlaybackSettings(const AudioPlaybackRate& rate); | 
 | 238 |             status_t        getPlaybackSettings(AudioPlaybackRate* rate /* nonnull */); | 
 | 239 |             status_t        setSyncSettings(const AVSyncSettings& sync, float videoFpsHint); | 
 | 240 |             status_t        getSyncSettings( | 
 | 241 |                                     AVSyncSettings* sync /* nonnull */, | 
 | 242 |                                     float* videoFps /* nonnull */); | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 243 |             status_t        getVideoWidth(int *w); | 
 | 244 |             status_t        getVideoHeight(int *h); | 
| Wei Jia | c5de091 | 2016-11-18 10:22:14 -0800 | [diff] [blame] | 245 |             status_t        seekTo( | 
 | 246 |                     int msec, | 
 | 247 |                     MediaPlayerSeekMode mode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC); | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 248 |             status_t        getCurrentPosition(int *msec); | 
 | 249 |             status_t        getDuration(int *msec); | 
 | 250 |             status_t        reset(); | 
| Glenn Kasten | fff6d71 | 2012-01-12 16:38:12 -0800 | [diff] [blame] | 251 |             status_t        setAudioStreamType(audio_stream_type_t type); | 
| John Spurlock | de9453f | 2014-03-19 13:05:45 -0400 | [diff] [blame] | 252 |             status_t        getAudioStreamType(audio_stream_type_t *type); | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 253 |             status_t        setLooping(int loop); | 
 | 254 |             bool            isLooping(); | 
 | 255 |             status_t        setVolume(float leftVolume, float rightVolume); | 
| Gloria Wang | b483c47 | 2011-04-11 17:23:27 -0700 | [diff] [blame] | 256 |             void            notify(int msg, int ext1, int ext2, const Parcel *obj = NULL); | 
| Nicolas Catania | 1d187f1 | 2009-05-12 23:25:55 -0700 | [diff] [blame] | 257 |             status_t        invoke(const Parcel& request, Parcel *reply); | 
| Nicolas Catania | a7e0e8b | 2009-07-08 08:57:42 -0700 | [diff] [blame] | 258 |             status_t        setMetadataFilter(const Parcel& filter); | 
| Nicolas Catania | 8e1b6cc | 2009-07-09 09:21:33 -0700 | [diff] [blame] | 259 |             status_t        getMetadata(bool update_only, bool apply_filter, Parcel *metadata); | 
| Glenn Kasten | d848eb4 | 2016-03-08 13:42:11 -0800 | [diff] [blame] | 260 |             status_t        setAudioSessionId(audio_session_t sessionId); | 
 | 261 |             audio_session_t getAudioSessionId(); | 
| Eric Laurent | 2beeb50 | 2010-07-16 07:43:46 -0700 | [diff] [blame] | 262 |             status_t        setAuxEffectSendLevel(float level); | 
 | 263 |             status_t        attachAuxEffect(int effectId); | 
| Gloria Wang | 4f9e47f | 2011-04-25 17:28:22 -0700 | [diff] [blame] | 264 |             status_t        setParameter(int key, const Parcel& request); | 
 | 265 |             status_t        getParameter(int key, Parcel* reply); | 
| John Grossman | c795b64 | 2012-02-22 15:38:35 -0800 | [diff] [blame] | 266 |             status_t        setRetransmitEndpoint(const char* addrString, uint16_t port); | 
| Marco Nelissen | 6b74d67 | 2012-02-28 16:07:44 -0800 | [diff] [blame] | 267 |             status_t        setNextMediaPlayer(const sp<MediaPlayer>& player); | 
| Andy Hung | 9fc8b5c | 2017-01-24 13:36:48 -0800 | [diff] [blame] | 268 |  | 
 | 269 |             VolumeShaper::Status applyVolumeShaper( | 
 | 270 |                                     const sp<VolumeShaper::Configuration>& configuration, | 
 | 271 |                                     const sp<VolumeShaper::Operation>& operation); | 
 | 272 |             sp<VolumeShaper::State> getVolumeShaperState(int id); | 
| Hassan Shojania | cefac14 | 2017-02-06 21:02:02 -0800 | [diff] [blame] | 273 |             // Modular DRM | 
 | 274 |             status_t        prepareDrm(const uint8_t uuid[16], const Vector<uint8_t>& drmSessionId); | 
| Hassan Shojania | 071437a | 2017-01-23 09:19:40 -0800 | [diff] [blame] | 275 |             status_t        releaseDrm(); | 
| Gloria Wang | 4f9e47f | 2011-04-25 17:28:22 -0700 | [diff] [blame] | 276 |  | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 277 | private: | 
 | 278 |             void            clear_l(); | 
| Wei Jia | c5de091 | 2016-11-18 10:22:14 -0800 | [diff] [blame] | 279 |             status_t        seekTo_l(int msec, MediaPlayerSeekMode mode); | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 280 |             status_t        prepareAsync_l(); | 
 | 281 |             status_t        getDuration_l(int *msec); | 
| Dave Burke | d681bbb | 2011-08-30 14:39:17 +0100 | [diff] [blame] | 282 |             status_t        attachNewPlayer(const sp<IMediaPlayer>& player); | 
| Jamie Gennis | 61c7ef5 | 2011-07-13 12:59:34 -0700 | [diff] [blame] | 283 |             status_t        reset_l(); | 
| John Grossman | c795b64 | 2012-02-22 15:38:35 -0800 | [diff] [blame] | 284 |             status_t        doSetRetransmitEndpoint(const sp<IMediaPlayer>& player); | 
| Jean-Michel Trivi | d9d7fa0 | 2014-06-24 08:01:46 -0700 | [diff] [blame] | 285 |             status_t        checkStateForKeySet_l(int key); | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 286 |  | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 287 |     sp<IMediaPlayer>            mPlayer; | 
| Jason Sams | 1af452f | 2009-03-24 18:45:22 -0700 | [diff] [blame] | 288 |     thread_id_t                 mLockThreadId; | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 289 |     Mutex                       mLock; | 
 | 290 |     Mutex                       mNotifyLock; | 
 | 291 |     Condition                   mSignal; | 
 | 292 |     sp<MediaPlayerListener>     mListener; | 
 | 293 |     void*                       mCookie; | 
 | 294 |     media_player_states         mCurrentState; | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 295 |     int                         mCurrentPosition; | 
| Wei Jia | c5de091 | 2016-11-18 10:22:14 -0800 | [diff] [blame] | 296 |     MediaPlayerSeekMode         mCurrentSeekMode; | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 297 |     int                         mSeekPosition; | 
| Wei Jia | c5de091 | 2016-11-18 10:22:14 -0800 | [diff] [blame] | 298 |     MediaPlayerSeekMode         mSeekMode; | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 299 |     bool                        mPrepareSync; | 
 | 300 |     status_t                    mPrepareStatus; | 
| Glenn Kasten | fff6d71 | 2012-01-12 16:38:12 -0800 | [diff] [blame] | 301 |     audio_stream_type_t         mStreamType; | 
| Jean-Michel Trivi | 640adb3 | 2014-09-05 11:20:11 -0700 | [diff] [blame] | 302 |     Parcel*                     mAudioAttributesParcel; | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 303 |     bool                        mLoop; | 
 | 304 |     float                       mLeftVolume; | 
 | 305 |     float                       mRightVolume; | 
 | 306 |     int                         mVideoWidth; | 
 | 307 |     int                         mVideoHeight; | 
| Glenn Kasten | d848eb4 | 2016-03-08 13:42:11 -0800 | [diff] [blame] | 308 |     audio_session_t             mAudioSessionId; | 
| Eric Laurent | 2beeb50 | 2010-07-16 07:43:46 -0700 | [diff] [blame] | 309 |     float                       mSendLevel; | 
| John Grossman | c795b64 | 2012-02-22 15:38:35 -0800 | [diff] [blame] | 310 |     struct sockaddr_in          mRetransmitEndpoint; | 
 | 311 |     bool                        mRetransmitEndpointValid; | 
| Wei Jia | ed32086 | 2017-01-18 14:03:40 -0800 | [diff] [blame] | 312 |     BufferingSettings           mCurrentBufferingSettings; | 
| The Android Open Source Project | 89fa4ad | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 313 | }; | 
 | 314 |  | 
 | 315 | }; // namespace android | 
 | 316 |  | 
 | 317 | #endif // ANDROID_MEDIAPLAYER_H |