• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_SKIPPED           = 8,
38     MEDIA2_NOTIFY_TIME       = 98,
39     MEDIA2_TIMED_TEXT        = 99,
40     MEDIA2_ERROR             = 100,
41     MEDIA2_INFO              = 200,
42     MEDIA2_SUBTITLE_DATA     = 201,
43     MEDIA2_META_DATA         = 202,
44     MEDIA2_DRM_INFO          = 210,
45 };
46 
47 // Generic error codes for the media player framework.  Errors are fatal, the
48 // playback must abort.
49 //
50 // Errors are communicated back to the client using the
51 // MediaPlayer2Listener::notify method defined below.
52 // In this situation, 'notify' is invoked with the following:
53 //   'msg' is set to MEDIA_ERROR.
54 //   'ext1' should be a value from the enum media2_error_type.
55 //   'ext2' contains an implementation dependant error code to provide
56 //          more details. Should default to 0 when not used.
57 //
58 // The codes are distributed as follow:
59 //   0xx: Reserved
60 //   1xx: Android Player errors. Something went wrong inside the MediaPlayer2.
61 //   2xx: Media errors (e.g Codec not supported). There is a problem with the
62 //        media itself.
63 //   3xx: Runtime errors. Some extraordinary condition arose making the playback
64 //        impossible.
65 //
66 enum media2_error_type {
67     // 0xx
68     MEDIA2_ERROR_UNKNOWN = 1,
69     // 1xx
70     // MEDIA2_ERROR_SERVER_DIED = 100,
71     // 2xx
72     MEDIA2_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200,
73     // 3xx
74     MEDIA2_ERROR_FAILED_TO_SET_DATA_SOURCE = 300,
75 };
76 
77 
78 // Info and warning codes for the media player framework.  These are non fatal,
79 // the playback is going on but there might be some user visible issues.
80 //
81 // Info and warning messages are communicated back to the client using the
82 // MediaPlayer2Listener::notify method defined below.  In this situation,
83 // 'notify' is invoked with the following:
84 //   'msg' is set to MEDIA_INFO.
85 //   'ext1' should be a value from the enum media2_info_type.
86 //   'ext2' contains an implementation dependant info code to provide
87 //          more details. Should default to 0 when not used.
88 //
89 // The codes are distributed as follow:
90 //   0xx: Reserved
91 //   7xx: Android Player info/warning (e.g player lagging behind.)
92 //   8xx: Media info/warning (e.g media badly interleaved.)
93 //
94 enum media2_info_type {
95     // 0xx
96     MEDIA2_INFO_UNKNOWN = 1,
97     // The player just started the playback of this data source.
98     MEDIA2_INFO_DATA_SOURCE_START = 2,
99     // The player just pushed the very first video frame for rendering
100     MEDIA2_INFO_VIDEO_RENDERING_START = 3,
101     // The player just pushed the very first audio frame for rendering
102     MEDIA2_INFO_AUDIO_RENDERING_START = 4,
103     // The player just completed the playback of this data source
104     MEDIA2_INFO_DATA_SOURCE_END = 5,
105     // The player just completed the playback of all data sources.
106     // But this is not visible in native code. Just keep this entry for completeness.
107     MEDIA2_INFO_DATA_SOURCE_LIST_END = 6,
108     // The player just completed an iteration of playback loop. This event is sent only when
109     // looping is enabled.
110     MEDIA2_INFO_DATA_SOURCE_REPEAT = 7,
111 
112     //1xx
113     // The player just prepared a data source.
114     MEDIA2_INFO_PREPARED = 100,
115     // The player just completed a call play().
116     MEDIA2_INFO_COMPLETE_CALL_PLAY = 101,
117     // The player just completed a call pause().
118     MEDIA2_INFO_COMPLETE_CALL_PAUSE = 102,
119     // The player just completed a call seekTo.
120     MEDIA2_INFO_COMPLETE_CALL_SEEK = 103,
121 
122     // 7xx
123     // The video is too complex for the decoder: it can't decode frames fast
124     // enough. Possibly only the audio plays fine at this stage.
125     MEDIA2_INFO_VIDEO_TRACK_LAGGING = 700,
126     // MediaPlayer2 is temporarily pausing playback internally in order to
127     // buffer more data.
128     MEDIA2_INFO_BUFFERING_START = 701,
129     // MediaPlayer2 is resuming playback after filling buffers.
130     MEDIA2_INFO_BUFFERING_END = 702,
131     // Bandwidth in recent past
132     MEDIA2_INFO_NETWORK_BANDWIDTH = 703,
133 
134     // 8xx
135     // Bad interleaving means that a media has been improperly interleaved or not
136     // interleaved at all, e.g has all the video samples first then all the audio
137     // ones. Video is playing but a lot of disk seek may be happening.
138     MEDIA2_INFO_BAD_INTERLEAVING = 800,
139     // The media is not seekable (e.g live stream).
140     MEDIA2_INFO_NOT_SEEKABLE = 801,
141     // New media metadata is available.
142     MEDIA2_INFO_METADATA_UPDATE = 802,
143     // Audio can not be played.
144     MEDIA2_INFO_PLAY_AUDIO_ERROR = 804,
145     // Video can not be played.
146     MEDIA2_INFO_PLAY_VIDEO_ERROR = 805,
147 
148     //9xx
149     MEDIA2_INFO_TIMED_TEXT_ERROR = 900,
150 };
151 
152 // Do not change these values without updating their counterparts in MediaPlayer2.java
153 enum mediaplayer2_states {
154     MEDIAPLAYER2_STATE_IDLE         = 1001,
155     MEDIAPLAYER2_STATE_PREPARED     = 1002,
156     MEDIAPLAYER2_STATE_PAUSED       = 1003,
157     MEDIAPLAYER2_STATE_PLAYING      = 1004,
158     MEDIAPLAYER2_STATE_ERROR        = 1005,
159 };
160 
161 enum media_player2_internal_states {
162     MEDIA_PLAYER2_STATE_ERROR        = 0,
163     MEDIA_PLAYER2_IDLE               = 1 << 0,
164     MEDIA_PLAYER2_INITIALIZED        = 1 << 1,
165     MEDIA_PLAYER2_PREPARING          = 1 << 2,
166     MEDIA_PLAYER2_PREPARED           = 1 << 3,
167     MEDIA_PLAYER2_STARTED            = 1 << 4,
168     MEDIA_PLAYER2_PAUSED             = 1 << 5,
169     MEDIA_PLAYER2_PLAYBACK_COMPLETE  = 1 << 6
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