1 /* 2 * Copyright 2018 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_MEDIAPLAYER2_TYPES_H 18 #define ANDROID_MEDIAPLAYER2_TYPES_H 19 20 #include <media/mediaplayer_common.h> 21 22 #include <media/MediaSource.h> 23 24 namespace android { 25 26 typedef MediaSource::ReadOptions::SeekMode MediaPlayer2SeekMode; 27 28 enum media2_event_type { 29 MEDIA2_NOP = 0, // interface test message 30 MEDIA2_PREPARED = 1, 31 MEDIA2_PLAYBACK_COMPLETE = 2, 32 MEDIA2_BUFFERING_UPDATE = 3, 33 MEDIA2_SEEK_COMPLETE = 4, 34 MEDIA2_SET_VIDEO_SIZE = 5, 35 MEDIA2_STARTED = 6, 36 MEDIA2_PAUSED = 7, 37 MEDIA2_STOPPED = 8, 38 MEDIA2_SKIPPED = 9, 39 MEDIA2_NOTIFY_TIME = 98, 40 MEDIA2_TIMED_TEXT = 99, 41 MEDIA2_ERROR = 100, 42 MEDIA2_INFO = 200, 43 MEDIA2_SUBTITLE_DATA = 201, 44 MEDIA2_META_DATA = 202, 45 MEDIA2_DRM_INFO = 210, 46 MEDIA2_AUDIO_ROUTING_CHANGED = 10000, 47 }; 48 49 // Generic error codes for the media player framework. Errors are fatal, the 50 // playback must abort. 51 // 52 // Errors are communicated back to the client using the 53 // MediaPlayer2Listener::notify method defined below. 54 // In this situation, 'notify' is invoked with the following: 55 // 'msg' is set to MEDIA_ERROR. 56 // 'ext1' should be a value from the enum media2_error_type. 57 // 'ext2' contains an implementation dependant error code to provide 58 // more details. Should default to 0 when not used. 59 // 60 // The codes are distributed as follow: 61 // 0xx: Reserved 62 // 1xx: Android Player errors. Something went wrong inside the MediaPlayer2. 63 // 2xx: Media errors (e.g Codec not supported). There is a problem with the 64 // media itself. 65 // 3xx: Runtime errors. Some extraordinary condition arose making the playback 66 // impossible. 67 // 68 enum media2_error_type { 69 // 0xx 70 MEDIA2_ERROR_UNKNOWN = 1, 71 // 1xx 72 // MEDIA2_ERROR_SERVER_DIED = 100, 73 // 2xx 74 MEDIA2_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200, 75 // 3xx 76 MEDIA2_ERROR_FAILED_TO_SET_DATA_SOURCE = 300, 77 }; 78 79 80 // Info and warning codes for the media player framework. These are non fatal, 81 // the playback is going on but there might be some user visible issues. 82 // 83 // Info and warning messages are communicated back to the client using the 84 // MediaPlayer2Listener::notify method defined below. In this situation, 85 // 'notify' is invoked with the following: 86 // 'msg' is set to MEDIA_INFO. 87 // 'ext1' should be a value from the enum media2_info_type. 88 // 'ext2' contains an implementation dependant info code to provide 89 // more details. Should default to 0 when not used. 90 // 91 // The codes are distributed as follow: 92 // 0xx: Reserved 93 // 7xx: Android Player info/warning (e.g player lagging behind.) 94 // 8xx: Media info/warning (e.g media badly interleaved.) 95 // 96 enum media2_info_type { 97 // 0xx 98 MEDIA2_INFO_UNKNOWN = 1, 99 // The player was started because it was used as the next player for another 100 // player, which just completed playback 101 MEDIA2_INFO_STARTED_AS_NEXT = 2, 102 // The player just pushed the very first video frame for rendering 103 MEDIA2_INFO_VIDEO_RENDERING_START = 3, 104 // The player just pushed the very first audio frame for rendering 105 MEDIA2_INFO_AUDIO_RENDERING_START = 4, 106 // The player just completed the playback of this data source 107 MEDIA2_INFO_PLAYBACK_COMPLETE = 5, 108 // The player just completed the playback of the full play list 109 MEDIA2_INFO_PLAYLIST_END = 6, 110 111 //1xx 112 // The player just prepared a data source. 113 MEDIA2_INFO_PREPARED = 100, 114 // The player just completed a call play(). 115 MEDIA2_INFO_COMPLETE_CALL_PLAY = 101, 116 // The player just completed a call pause(). 117 MEDIA2_INFO_COMPLETE_CALL_PAUSE = 102, 118 // The player just completed a call seekTo. 119 MEDIA2_INFO_COMPLETE_CALL_SEEK = 103, 120 121 // 7xx 122 // The video is too complex for the decoder: it can't decode frames fast 123 // enough. Possibly only the audio plays fine at this stage. 124 MEDIA2_INFO_VIDEO_TRACK_LAGGING = 700, 125 // MediaPlayer2 is temporarily pausing playback internally in order to 126 // buffer more data. 127 MEDIA2_INFO_BUFFERING_START = 701, 128 // MediaPlayer2 is resuming playback after filling buffers. 129 MEDIA2_INFO_BUFFERING_END = 702, 130 // Bandwidth in recent past 131 MEDIA2_INFO_NETWORK_BANDWIDTH = 703, 132 133 // 8xx 134 // Bad interleaving means that a media has been improperly interleaved or not 135 // interleaved at all, e.g has all the video samples first then all the audio 136 // ones. Video is playing but a lot of disk seek may be happening. 137 MEDIA2_INFO_BAD_INTERLEAVING = 800, 138 // The media is not seekable (e.g live stream). 139 MEDIA2_INFO_NOT_SEEKABLE = 801, 140 // New media metadata is available. 141 MEDIA2_INFO_METADATA_UPDATE = 802, 142 // Audio can not be played. 143 MEDIA2_INFO_PLAY_AUDIO_ERROR = 804, 144 // Video can not be played. 145 MEDIA2_INFO_PLAY_VIDEO_ERROR = 805, 146 147 //9xx 148 MEDIA2_INFO_TIMED_TEXT_ERROR = 900, 149 }; 150 151 // Do not change these values without updating their counterparts in MediaPlayer2.java 152 enum mediaplayer2_states { 153 MEDIAPLAYER2_STATE_IDLE = 1, 154 MEDIAPLAYER2_STATE_PREPARED = 2, 155 MEDIAPLAYER2_STATE_PLAYING = 3, 156 MEDIAPLAYER2_STATE_PAUSED = 4, 157 MEDIAPLAYER2_STATE_ERROR = 5, 158 }; 159 160 enum media_player2_internal_states { 161 MEDIA_PLAYER2_STATE_ERROR = 0, 162 MEDIA_PLAYER2_IDLE = 1 << 0, 163 MEDIA_PLAYER2_INITIALIZED = 1 << 1, 164 MEDIA_PLAYER2_PREPARING = 1 << 2, 165 MEDIA_PLAYER2_PREPARED = 1 << 3, 166 MEDIA_PLAYER2_STARTED = 1 << 4, 167 MEDIA_PLAYER2_PAUSED = 1 << 5, 168 MEDIA_PLAYER2_STOPPED = 1 << 6, 169 MEDIA_PLAYER2_PLAYBACK_COMPLETE = 1 << 7 170 }; 171 172 // Keep KEY_PARAMETER_* in sync with MediaPlayer2.java. 173 // The same enum space is used for both set and get, in case there are future keys that 174 // can be both set and get. But as of now, all parameters are either set only or get only. 175 enum media2_parameter_keys { 176 // Streaming/buffering parameters 177 MEDIA2_KEY_PARAMETER_CACHE_STAT_COLLECT_FREQ_MS = 1100, // set only 178 179 // Return a Parcel containing a single int, which is the channel count of the 180 // audio track, or zero for error (e.g. no audio track) or unknown. 181 MEDIA2_KEY_PARAMETER_AUDIO_CHANNEL_COUNT = 1200, // get only 182 183 // Playback rate expressed in permille (1000 is normal speed), saved as int32_t, with negative 184 // values used for rewinding or reverse playback. 185 MEDIA2_KEY_PARAMETER_PLAYBACK_RATE_PERMILLE = 1300, // set only 186 187 // Set a Parcel containing the value of a parcelled Java AudioAttribute instance 188 MEDIA2_KEY_PARAMETER_AUDIO_ATTRIBUTES = 1400 // set only 189 }; 190 191 // Keep INVOKE_ID_* in sync with MediaPlayer2.java. 192 enum media_player2_invoke_ids { 193 MEDIA_PLAYER2_INVOKE_ID_GET_TRACK_INFO = 1, 194 MEDIA_PLAYER2_INVOKE_ID_ADD_EXTERNAL_SOURCE = 2, 195 MEDIA_PLAYER2_INVOKE_ID_ADD_EXTERNAL_SOURCE_FD = 3, 196 MEDIA_PLAYER2_INVOKE_ID_SELECT_TRACK = 4, 197 MEDIA_PLAYER2_INVOKE_ID_UNSELECT_TRACK = 5, 198 MEDIA_PLAYER2_INVOKE_ID_SET_VIDEO_SCALING_MODE = 6, 199 MEDIA_PLAYER2_INVOKE_ID_GET_SELECTED_TRACK = 7 200 }; 201 202 }; // namespace android 203 204 #endif // ANDROID_MEDIAPLAYER2_TYPES_H 205