- add sources.
[platform/framework/web/crosswalk.git] / src / content / common / media / media_player_messages_android.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // IPC messages for android media player.
6 // Multiply-included message file, hence no include guard.
7
8 #include <string>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/time/time.h"
13 #include "content/common/content_export.h"
14 #include "content/common/media/media_player_messages_enums_android.h"
15 #include "ipc/ipc_message_macros.h"
16 #include "media/base/android/media_player_android.h"
17 #include "media/base/android/demuxer_stream_player_params.h"
18 #include "media/base/media_keys.h"
19 #include "ui/gfx/rect_f.h"
20 #include "url/gurl.h"
21
22 #undef IPC_MESSAGE_EXPORT
23 #define IPC_MESSAGE_EXPORT CONTENT_EXPORT
24 #define IPC_MESSAGE_START MediaPlayerMsgStart
25
26 IPC_ENUM_TRAITS(media::AudioCodec)
27 IPC_ENUM_TRAITS(media::DemuxerStream::Status)
28 IPC_ENUM_TRAITS(media::DemuxerStream::Type)
29 IPC_ENUM_TRAITS(media::MediaKeys::KeyError)
30 IPC_ENUM_TRAITS(media::VideoCodec)
31
32 IPC_STRUCT_TRAITS_BEGIN(media::DemuxerConfigs)
33   IPC_STRUCT_TRAITS_MEMBER(audio_codec)
34   IPC_STRUCT_TRAITS_MEMBER(audio_channels)
35   IPC_STRUCT_TRAITS_MEMBER(audio_sampling_rate)
36   IPC_STRUCT_TRAITS_MEMBER(is_audio_encrypted)
37   IPC_STRUCT_TRAITS_MEMBER(audio_extra_data)
38
39   IPC_STRUCT_TRAITS_MEMBER(video_codec)
40   IPC_STRUCT_TRAITS_MEMBER(video_size)
41   IPC_STRUCT_TRAITS_MEMBER(is_video_encrypted)
42   IPC_STRUCT_TRAITS_MEMBER(video_extra_data)
43
44   IPC_STRUCT_TRAITS_MEMBER(duration_ms)
45 #if defined(GOOGLE_TV)
46   IPC_STRUCT_TRAITS_MEMBER(key_system)
47 #endif  // defined(GOOGLE_TV)
48 IPC_STRUCT_TRAITS_END()
49
50 IPC_STRUCT_TRAITS_BEGIN(media::DemuxerData)
51   IPC_STRUCT_TRAITS_MEMBER(type)
52   IPC_STRUCT_TRAITS_MEMBER(access_units)
53 IPC_STRUCT_TRAITS_END()
54
55 IPC_STRUCT_TRAITS_BEGIN(media::AccessUnit)
56   IPC_STRUCT_TRAITS_MEMBER(status)
57   IPC_STRUCT_TRAITS_MEMBER(end_of_stream)
58   IPC_STRUCT_TRAITS_MEMBER(data)
59   IPC_STRUCT_TRAITS_MEMBER(timestamp)
60   IPC_STRUCT_TRAITS_MEMBER(key_id)
61   IPC_STRUCT_TRAITS_MEMBER(iv)
62   IPC_STRUCT_TRAITS_MEMBER(subsamples)
63 IPC_STRUCT_TRAITS_END()
64
65 IPC_STRUCT_TRAITS_BEGIN(media::SubsampleEntry)
66   IPC_STRUCT_TRAITS_MEMBER(clear_bytes)
67   IPC_STRUCT_TRAITS_MEMBER(cypher_bytes)
68 IPC_STRUCT_TRAITS_END()
69
70 IPC_ENUM_TRAITS(MediaPlayerHostMsg_Initialize_Type)
71
72 // Chrome for Android seek message sequence is:
73 // 1. Renderer->Browser MediaPlayerHostMsg_Seek
74 //    This is the beginning of actual seek flow in response to web app requests
75 //    for seeks and browser MediaPlayerMsg_SeekRequests. With this message,
76 //    the renderer asks browser to perform actual seek. At most one of these
77 //    actual seeks will be in process between this message and renderer's later
78 //    receipt of MediaPlayerMsg_SeekCompleted from the browser.
79 // 2. Browser->Renderer MediaPlayerMsg_SeekCompleted
80 //    Once the browser determines the seek is complete, it sends this message to
81 //    notify the renderer of seek completion.
82 //
83 // Other seek-related IPC messages:
84 // Browser->Renderer MediaPlayerMsg_SeekRequest
85 //    Browser requests to begin a seek. All browser-initiated seeks must begin
86 //    with this request. Renderer controls actual seek initiation via the normal
87 //    seek flow, above, keeping web apps aware of seeks. These requests are
88 //    also allowed while another actual seek is in progress.
89 //
90 // If the demuxer is located in the renderer, as in media source players, the
91 // browser must ensure the renderer demuxer is appropriately seeked between
92 // receipt of MediaPlayerHostMsg_Seek and transmission of
93 // MediaPlayerMsg_SeekCompleted. The following two renderer-demuxer control
94 // messages book-end the renderer-demuxer seek:
95 // 1.1 Browser->Renderer MediaPlayerMsg_DemuxerSeekRequest
96 // 1.2 Renderer->Browser MediaPlayerHostMsg_DemuxerSeekDone
97
98 // Only in short-term hack to seek to reach I-Frame to feed a newly constructed
99 // video decoder may the above IPC sequence be modified to exclude SeekRequest,
100 // Seek and SeekCompleted, with condition that DemuxerSeekRequest's
101 // |is_browser_seek| parameter be true. Regular seek messages must still be
102 // handled even when a hack browser seek is in progress. In this case, the
103 // browser seek request's |time_to_seek| may no longer be buffered and the
104 // demuxer may instead seek to a future buffered time. The resulting
105 // DemuxerSeekDone message's |actual_browser_seek_time| is the time actually
106 // seeked-to, and is only meaningful for these hack browser seeks.
107 // TODO(wolenetz): Instead of doing browser seek, replay cached data since last
108 // keyframe. See http://crbug.com/304234.
109
110 // Messages for notifying the render process of media playback status -------
111
112 // Media buffering has updated.
113 IPC_MESSAGE_ROUTED2(MediaPlayerMsg_MediaBufferingUpdate,
114                     int /* player_id */,
115                     int /* percent */)
116
117 // A media playback error has occurred.
118 IPC_MESSAGE_ROUTED2(MediaPlayerMsg_MediaError,
119                     int /* player_id */,
120                     int /* error */)
121
122 // Playback is completed.
123 IPC_MESSAGE_ROUTED1(MediaPlayerMsg_MediaPlaybackCompleted,
124                     int /* player_id */)
125
126 // Media metadata has changed.
127 IPC_MESSAGE_ROUTED5(MediaPlayerMsg_MediaMetadataChanged,
128                     int /* player_id */,
129                     base::TimeDelta /* duration */,
130                     int /* width */,
131                     int /* height */,
132                     bool /* success */)
133
134 // Requests renderer player to ask its client (blink HTMLMediaElement) to seek.
135 IPC_MESSAGE_ROUTED2(MediaPlayerMsg_SeekRequest,
136                     int /* player_id */,
137                     base::TimeDelta /* time_to_seek_to */)
138
139 // Media seek is completed.
140 IPC_MESSAGE_ROUTED2(MediaPlayerMsg_SeekCompleted,
141                     int /* player_id */,
142                     base::TimeDelta /* current_time */)
143
144 // Video size has changed.
145 IPC_MESSAGE_ROUTED3(MediaPlayerMsg_MediaVideoSizeChanged,
146                     int /* player_id */,
147                     int /* width */,
148                     int /* height */)
149
150 // The current play time has updated.
151 IPC_MESSAGE_ROUTED2(MediaPlayerMsg_MediaTimeUpdate,
152                     int /* player_id */,
153                     base::TimeDelta /* current_time */)
154
155 // The player has been released.
156 IPC_MESSAGE_ROUTED1(MediaPlayerMsg_MediaPlayerReleased,
157                     int /* player_id */)
158
159 // The player has entered fullscreen mode.
160 IPC_MESSAGE_ROUTED1(MediaPlayerMsg_DidEnterFullscreen,
161                     int /* player_id */)
162
163 // The player exited fullscreen.
164 IPC_MESSAGE_ROUTED1(MediaPlayerMsg_DidExitFullscreen,
165                     int /* player_id */)
166
167 // The player started playing.
168 IPC_MESSAGE_ROUTED1(MediaPlayerMsg_DidMediaPlayerPlay,
169                     int /* player_id */)
170
171 // The player was paused.
172 IPC_MESSAGE_ROUTED1(MediaPlayerMsg_DidMediaPlayerPause,
173                     int /* player_id */)
174
175 // Requests renderer demuxer seek.
176 IPC_MESSAGE_CONTROL3(MediaPlayerMsg_DemuxerSeekRequest,
177                      int /* demuxer_client_id */,
178                      base::TimeDelta /* time_to_seek */,
179                      bool /* is_browser_seek */)
180
181 // The media source player reads data from demuxer
182 IPC_MESSAGE_CONTROL2(MediaPlayerMsg_ReadFromDemuxer,
183                      int /* demuxer_client_id */,
184                      media::DemuxerStream::Type /* type */)
185
186 // The player needs new config data
187 IPC_MESSAGE_CONTROL1(MediaPlayerMsg_MediaConfigRequest,
188                      int /* demuxer_client_id */)
189
190 IPC_MESSAGE_ROUTED1(MediaPlayerMsg_ConnectedToRemoteDevice,
191                     int /* player_id */)
192
193 IPC_MESSAGE_ROUTED1(MediaPlayerMsg_DisconnectedFromRemoteDevice,
194                     int /* player_id */)
195
196 // Messages for controlling the media playback in browser process ----------
197
198 // Destroy the media player object.
199 IPC_MESSAGE_ROUTED1(MediaPlayerHostMsg_DestroyMediaPlayer,
200                     int /* player_id */)
201
202 // Destroy all the players.
203 IPC_MESSAGE_ROUTED0(MediaPlayerHostMsg_DestroyAllMediaPlayers)
204
205 // Initialize a media player object with the given type and player_id. The other
206 // parameters are used depending on the type of player.
207 //
208 // url: the URL to load when initializing a URL player.
209 //
210 // first_party_for_cookies: the cookie store to use when loading a URL.
211 //
212 // demuxer_client_id: the demuxer associated with this player when initializing
213 // a media source player.
214 IPC_MESSAGE_ROUTED5(
215     MediaPlayerHostMsg_Initialize,
216     MediaPlayerHostMsg_Initialize_Type /* type */,
217     int /* player_id */,
218     GURL /* url */,
219     GURL /* first_party_for_cookies */,
220     int /* demuxer_client_id */)
221
222 // Pause the player.
223 IPC_MESSAGE_ROUTED2(MediaPlayerHostMsg_Pause,
224                     int /* player_id */,
225                     bool /* is_media_related_action */)
226
227 // Release player resources, but keep the object for future usage.
228 IPC_MESSAGE_ROUTED1(MediaPlayerHostMsg_Release, int /* player_id */)
229
230 // Perform a seek.
231 IPC_MESSAGE_ROUTED2(MediaPlayerHostMsg_Seek,
232                     int /* player_id */,
233                     base::TimeDelta /* time */)
234
235 // Start the player for playback.
236 IPC_MESSAGE_ROUTED1(MediaPlayerHostMsg_Start, int /* player_id */)
237
238 // Start the player for playback.
239 IPC_MESSAGE_ROUTED2(MediaPlayerHostMsg_SetVolume,
240                     int /* player_id */,
241                     double /* volume */)
242
243 // Requests the player to enter fullscreen.
244 IPC_MESSAGE_ROUTED1(MediaPlayerHostMsg_EnterFullscreen, int /* player_id */)
245
246 // Requests the player to exit fullscreen.
247 IPC_MESSAGE_ROUTED1(MediaPlayerHostMsg_ExitFullscreen, int /* player_id */)
248
249 // Sent after the renderer demuxer has seeked.
250 IPC_MESSAGE_CONTROL2(MediaPlayerHostMsg_DemuxerSeekDone,
251                      int /* demuxer_client_id */,
252                      base::TimeDelta /* actual_browser_seek_time */)
253
254 // Inform the media source player that the demuxer is ready.
255 IPC_MESSAGE_CONTROL2(MediaPlayerHostMsg_DemuxerReady,
256                      int /* demuxer_client_id */,
257                      media::DemuxerConfigs)
258
259 // Sent when the data was read from the ChunkDemuxer.
260 IPC_MESSAGE_CONTROL2(MediaPlayerHostMsg_ReadFromDemuxerAck,
261                      int /* demuxer_client_id */,
262                      media::DemuxerData)
263
264 // Inform the media source player of changed media duration from demuxer.
265 IPC_MESSAGE_CONTROL2(MediaPlayerHostMsg_DurationChanged,
266                      int /* demuxer_client_id */,
267                      base::TimeDelta /* duration */)
268
269 #if defined(GOOGLE_TV)
270 // Notify the player about the external surface, requesting it if necessary.
271 IPC_MESSAGE_ROUTED3(MediaPlayerHostMsg_NotifyExternalSurface,
272                     int /* player_id */,
273                     bool /* is_request */,
274                     gfx::RectF /* rect */)
275
276 #endif
277
278 // Messages for encrypted media extensions API ------------------------------
279 // TODO(xhwang): Move the following messages to a separate file.
280
281 IPC_MESSAGE_ROUTED3(MediaKeysHostMsg_InitializeCDM,
282                     int /* media_keys_id */,
283                     std::vector<uint8> /* uuid */,
284                     GURL /* frame url */)
285
286 IPC_MESSAGE_ROUTED3(MediaKeysHostMsg_GenerateKeyRequest,
287                     int /* media_keys_id */,
288                     std::string /* type */,
289                     std::vector<uint8> /* init_data */)
290
291 IPC_MESSAGE_ROUTED4(MediaKeysHostMsg_AddKey,
292                     int /* media_keys_id */,
293                     std::vector<uint8> /* key */,
294                     std::vector<uint8> /* init_data */,
295                     std::string /* session_id */)
296
297 IPC_MESSAGE_ROUTED2(MediaKeysHostMsg_CancelKeyRequest,
298                     int /* media_keys_id */,
299                     std::string /* session_id */)
300
301 IPC_MESSAGE_ROUTED2(MediaKeysMsg_KeyAdded,
302                     int /* media_keys_id */,
303                     std::string /* session_id */)
304
305 IPC_MESSAGE_ROUTED4(MediaKeysMsg_KeyError,
306                     int /* media_keys_id */,
307                     std::string /* session_id */,
308                     media::MediaKeys::KeyError /* error_code */,
309                     int /* system_code */)
310
311 IPC_MESSAGE_ROUTED4(MediaKeysMsg_KeyMessage,
312                     int /* media_keys_id */,
313                     std::string /* session_id */,
314                     std::vector<uint8> /* message */,
315                     std::string /* destination_url */)