Pepper_47_C++_interfaces
media_events_listener_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/samsung/ppb_media_player_samsung.h"
9 #include "ppapi/cpp/resource.h"
11 
12 namespace pp {
13 
14 namespace {
15 
16 template <> const char* interface_name<PPB_MediaPlayer_Samsung_1_0>() {
17  return PPB_MEDIAPLAYER_SAMSUNG_INTERFACE_1_0;
18 }
19 
20 void ListenerWrapper_OnTimeUpdate(PP_TimeTicks time,
21  void* user_data) {
22  if (!user_data) return;
23 
24  MediaEventsListener_Samsung* listener =
25  static_cast<MediaEventsListener_Samsung*>(user_data);
26  listener->OnTimeUpdate(time);
27 }
28 
29 void ListenerWrapper_OnEnded(void* user_data) {
30  if (!user_data) return;
31 
32  MediaEventsListener_Samsung* listener =
33  static_cast<MediaEventsListener_Samsung*>(user_data);
34  listener->OnEnded();
35 }
36 
37 void ListenerWrapper_OnError(PP_MediaPlayerError error, void* user_data) {
38  if (!user_data) return;
39 
40  MediaEventsListener_Samsung* listener =
41  static_cast<MediaEventsListener_Samsung*>(user_data);
42  listener->OnError(error);
43 }
44 
45 const PPP_MediaEventsListener_Samsung* GetListenerWrapper() {
46  static const PPP_MediaEventsListener_Samsung listener = {
47  &ListenerWrapper_OnTimeUpdate,
48  &ListenerWrapper_OnEnded,
49  &ListenerWrapper_OnError,
50  };
51 
52  return &listener;
53 }
54 
55 } // namespace
56 
58  Detach();
59 }
60 
61 void MediaEventsListener_Samsung::OnTimeUpdate(PP_TimeTicks /* time */) {
62 }
63 
65 }
66 
67 void MediaEventsListener_Samsung::OnError(PP_MediaPlayerError /* error */) {
68 }
69 
71 }
72 
74  MediaPlayer_Samsung* player)
75  : player_(0) {
76  AttachTo(player);
77 }
78 
80  if (!player) {
81  Detach();
82  return;
83  }
84 
85  if (player_ == player->pp_resource()) return;
86 
87  // TODO(samsung) Is assumption to allow only one listener per application
88  // convenient?
89  if (player_) Detach();
90 
91  if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
92  get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetMediaEventsListener(
93  player->pp_resource(), GetListenerWrapper(), this);
94  }
95 
96  player_ = player->pp_resource();
97 }
98 
99 void MediaEventsListener_Samsung::Detach() {
100  if (!player_) return;
101 
102  if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
103  get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetMediaEventsListener(
104  player_, NULL, NULL);
105  }
106 
107  player_ = 0;
108 }
109 
110 } // namespace pp
virtual void OnTimeUpdate(PP_TimeTicks time)
void AttachTo(MediaPlayer_Samsung *player)
Attaches listener to the |player|.
virtual void OnError(PP_MediaPlayerError error)
PP_Resource pp_resource() const
Definition: resource.h:47
virtual void OnEnded()
Played clip has ended.