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