Pepper_47_C++_interfaces
media_player_samsung.cc
Go to the documentation of this file.
1 // Copyright (c) 2016 Samsung Electronics. 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 
6 
7 #include "ppapi/c/pp_errors.h"
8 #include "ppapi/c/ppb_instance.h"
10 #include "ppapi/cpp/module_impl.h"
12 
13 namespace pp {
14 
15 namespace {
16 
17 template <> const char* interface_name<PPB_MediaPlayer_Samsung_1_0>() {
18  return PPB_MEDIAPLAYER_SAMSUNG_INTERFACE_1_0;
19 }
20 
21 template <>
22 const char* interface_name<PPB_MediaPlayer_Samsung_1_1>() {
23  return PPB_MEDIAPLAYER_SAMSUNG_INTERFACE_1_1;
24 }
25 
26 template <>
27 const char* interface_name<PPB_Instance_1_0>() {
28  return PPB_INSTANCE_INTERFACE_1_0;
29 }
30 
31 } // namespace
32 
34 }
35 
37  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
38  PassRefFromConstructor(get_interface<PPB_MediaPlayer_Samsung_1_1>()->Create(
39  instance.pp_instance()));
40  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
42  get_interface<PPB_MediaPlayer_Samsung_1_0>()->Create(
43  instance.pp_instance()));
44  }
45 }
46 
48  const InstanceHandle& instance,
50  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
52  get_interface<PPB_MediaPlayer_Samsung_1_1>()
53  ->CreateWithoutBindingToInstance(instance.pp_instance()));
54  }
55 }
56 
58  : Resource(other) {
59 }
60 
62  const MediaPlayer_Samsung& other) {
63  Resource::operator=(other);
64  return *this;
65 }
66 
68 }
69 
71  if (!has_interface<PPB_Instance_1_0>())
72  return false;
73  return PP_ToBool(get_interface<PPB_Instance_1_0>()->BindGraphics(
74  instance.pp_instance(), pp_resource()));
75 }
76 
78  const MediaDataSource_Samsung& data_source,
79  const CompletionCallback& callback) {
80  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
81  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->AttachDataSource(
82  pp_resource(), data_source.pp_resource(),
83  callback.pp_completion_callback());
84  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
85  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->AttachDataSource(
86  pp_resource(), data_source.pp_resource(),
87  callback.pp_completion_callback());
88  }
89 
90  return callback.MayForce(PP_ERROR_NOINTERFACE);
91 }
92 
93 /* Playback control */
94 
96  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
97  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->Play(
98  pp_resource(), callback.pp_completion_callback());
99  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
100  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->Play(
101  pp_resource(), callback.pp_completion_callback());
102  }
103 
104  return callback.MayForce(PP_ERROR_NOINTERFACE);
105 }
106 
108  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
109  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->Pause(
110  pp_resource(), callback.pp_completion_callback());
111  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
112  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->Pause(
113  pp_resource(), callback.pp_completion_callback());
114  }
115 
116  return callback.MayForce(PP_ERROR_NOINTERFACE);
117 }
118 
120  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
121  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->Stop(
122  pp_resource(), callback.pp_completion_callback());
123  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
124  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->Stop(
125  pp_resource(), callback.pp_completion_callback());
126  }
127 
128  return callback.MayForce(PP_ERROR_NOINTERFACE);
129 }
130 
132  const CompletionCallback& callback) {
133  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
134  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->Seek(
135  pp_resource(), time, callback.pp_completion_callback());
136  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
137  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->Seek(
138  pp_resource(), time, callback.pp_completion_callback());
139  }
140 
141  return callback.MayForce(PP_ERROR_NOINTERFACE);
142 }
143 
145  const CompletionCallback& callback) {
146  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
147  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->SetPlaybackRate(
148  pp_resource(), rate, callback.pp_completion_callback());
149  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
150  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetPlaybackRate(
151  pp_resource(), rate, callback.pp_completion_callback());
152  }
153 
154  return callback.MayForce(PP_ERROR_NOINTERFACE);
155 }
156 
157 /* Playback time info */
158 
161  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
162  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->GetDuration(
163  pp_resource(), callback.output(), callback.pp_completion_callback());
164  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
165  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->GetDuration(
166  pp_resource(), callback.output(), callback.pp_completion_callback());
167  }
168 
169  return callback.MayForce(PP_ERROR_NOINTERFACE);
170 }
171 
174  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
175  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->GetCurrentTime(
176  pp_resource(), callback.output(), callback.pp_completion_callback());
177  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
178  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->GetCurrentTime(
179  pp_resource(), callback.output(), callback.pp_completion_callback());
180  }
181 
182  return callback.MayForce(PP_ERROR_NOINTERFACE);
183 }
184 
185 /* Playback state info */
186 
189  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
190  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->GetPlayerState(
191  pp_resource(), callback.output(), callback.pp_completion_callback());
192  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
193  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->GetPlayerState(
194  pp_resource(), callback.output(), callback.pp_completion_callback());
195  }
196 
197  return callback.MayForce(PP_ERROR_NOINTERFACE);
198 }
199 
200 /* Tracks info */
201 
204  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
205  return get_interface<PPB_MediaPlayer_Samsung_1_1>()
207  callback.pp_completion_callback());
208  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
209  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->
211  callback.output(),
212  callback.pp_completion_callback());
213  }
214 
215  return callback.MayForce(PP_ERROR_NOINTERFACE);
216 }
217 
220  callback) {
221  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
222  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->GetVideoTracksList(
223  pp_resource(), callback.output(), callback.pp_completion_callback());
224  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
225  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->GetVideoTracksList(
226  pp_resource(), callback.output(), callback.pp_completion_callback());
227  }
228 
229  return callback.MayForce(PP_ERROR_NOINTERFACE);
230 }
231 
234  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
235  return get_interface<PPB_MediaPlayer_Samsung_1_1>()
237  callback.pp_completion_callback());
238  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
239  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->
241  callback.output(),
242  callback.pp_completion_callback());
243  }
244 
245  return callback.MayForce(PP_ERROR_NOINTERFACE);
246 }
247 
250  callback) {
251  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
252  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->GetAudioTracksList(
253  pp_resource(), callback.output(), callback.pp_completion_callback());
254  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
255  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->GetAudioTracksList(
256  pp_resource(), callback.output(), callback.pp_completion_callback());
257  }
258 
259  return callback.MayForce(PP_ERROR_NOINTERFACE);
260 }
261 
264  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
265  return get_interface<PPB_MediaPlayer_Samsung_1_1>()
267  callback.pp_completion_callback());
268  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
269  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->
271  callback.output(),
272  callback.pp_completion_callback());
273  }
274 
275  return callback.MayForce(PP_ERROR_NOINTERFACE);
276 }
277 
280  callback) {
281  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
282  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->GetTextTracksList(
283  pp_resource(), callback.output(), callback.pp_completion_callback());
284  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
285  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->GetTextTracksList(
286  pp_resource(), callback.output(), callback.pp_completion_callback());
287  }
288 
289  return callback.MayForce(PP_ERROR_NOINTERFACE);
290 }
291 
293  PP_ElementaryStream_Type_Samsung track_type,
294  uint32_t track_index,
295  const CompletionCallback& callback) {
296  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
297  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->SelectTrack(
298  pp_resource(), track_type, track_index,
299  callback.pp_completion_callback());
300  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
301  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->SelectTrack(
302  pp_resource(), track_type, track_index,
303  callback.pp_completion_callback());
304  }
305 
306  return callback.MayForce(PP_ERROR_NOINTERFACE);
307 }
308 
309 /* Subtitles control */
310 
312  const std::string& file_path,
313  const std::string& encoding,
315  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
316  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->AddExternalSubtitles(
317  pp_resource(), file_path.c_str(), encoding.c_str(), callback.output(),
318  callback.pp_completion_callback());
319  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
320  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->AddExternalSubtitles(
321  pp_resource(), file_path.c_str(), encoding.c_str(),
322  callback.output(), callback.pp_completion_callback());
323  }
324 
325  return callback.MayForce(PP_ERROR_NOINTERFACE);
326 }
327 
329  PP_TimeDelta delay,
330  const CompletionCallback& callback) {
331  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
332  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->SetSubtitlesDelay(
333  pp_resource(), delay, callback.pp_completion_callback());
334  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
335  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetSubtitlesDelay(
336  pp_resource(), delay, callback.pp_completion_callback());
337  }
338 
339  return callback.MayForce(PP_ERROR_NOINTERFACE);
340 }
341 
342 /* Other - player control */
343 
345  const PP_Rect& rect,
346  const CompletionCallback& callback) {
347  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
348  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->SetDisplayRect(
349  pp_resource(), &rect, callback.pp_completion_callback());
350  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
351  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetDisplayRect(
352  pp_resource(), &rect, callback.pp_completion_callback());
353  }
354 
355  return callback.MayForce(PP_ERROR_NOINTERFACE);
356 }
357 
358 /* DRM Related */
359 
361  PP_MediaPlayerDRMType drm_type,
362  PP_MediaPlayerDRMOperation drm_operation,
363  uint32_t drm_data_size,
364  const void* drm_data,
365  const CompletionCallback& callback) {
366  if (has_interface<PPB_MediaPlayer_Samsung_1_1>()) {
367  return get_interface<PPB_MediaPlayer_Samsung_1_1>()->SetDRMSpecificData(
368  pp_resource(), drm_type, drm_operation, drm_data_size, drm_data,
369  callback.pp_completion_callback());
370  } else if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
371  return get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetDRMSpecificData(
372  pp_resource(), drm_type, drm_operation, drm_data_size, drm_data,
373  callback.pp_completion_callback());
374  }
375 
376  return callback.MayForce(PP_ERROR_NOINTERFACE);
377 }
378 
379 } // namespace pp
MediaPlayer_Samsung & operator=(const MediaPlayer_Samsung &other)
void PassRefFromConstructor(PP_Resource resource)
Definition: resource.cc:50
int32_t SelectTrack(PP_ElementaryStream_Type_Samsung track_type, uint32_t track_index, const CompletionCallback &callback)
int32_t GetDuration(const CompletionCallbackWithOutput< PP_TimeDelta > &callback)
int32_t AddExternalSubtitles(const std::string &file_path, const std::string &encoding, const CompletionCallbackWithOutput< PP_TextTrackInfo > &callback)
int32_t Pause(const CompletionCallback &callback)
int32_t GetCurrentTextTrackInfo(const CompletionCallbackWithOutput< PP_TextTrackInfo > &callback)
int32_t GetCurrentVideoTrackInfo(const CompletionCallbackWithOutput< PP_VideoTrackInfo > &callback)
bool BindToInstance(const InstanceHandle &instance)
int32_t GetPlayerState(const CompletionCallbackWithOutput< PP_MediaPlayerState > &callback)
int32_t MayForce(int32_t result) const
const PP_CompletionCallback & pp_completion_callback() const
int32_t AttachDataSource(const MediaDataSource_Samsung &data_source, const CompletionCallback &callback)
int32_t Stop(const CompletionCallback &callback)
int32_t Play(const CompletionCallback &callback)
int32_t GetTextTracksList(const CompletionCallbackWithOutput< TextTracksList > &callback)
int32_t SetDisplayRect(const PP_Rect &rect, const CompletionCallback &callback)
int32_t Seek(PP_TimeTicks time, const CompletionCallback &callback)
PP_Resource pp_resource() const
Definition: resource.h:47
int32_t SetSubtitlesDelay(PP_TimeDelta delay, const CompletionCallback &callback)
int32_t GetVideoTracksList(const CompletionCallbackWithOutput< VideoTracksList > &callback)
int32_t GetAudioTracksList(const CompletionCallbackWithOutput< AudioTracksList > &callback)
PP_Instance pp_instance() const
int32_t SetPlaybackRate(double rate, const CompletionCallback &callback)
A reference counted module resource.
Definition: resource.h:20
int32_t GetCurrentAudioTrackInfo(const CompletionCallbackWithOutput< PP_AudioTrackInfo > &callback)
Resource & operator=(const Resource &other)
Definition: resource.cc:27
int32_t SetDRMSpecificData(PP_MediaPlayerDRMType drm_type, PP_MediaPlayerDRMOperation drm_operation, uint32_t drm_data_size, const void *drm_data, const CompletionCallback &callback)
int32_t GetCurrentTime(const CompletionCallbackWithOutput< PP_TimeTicks > &callback)