Pepper_47_C++_interfaces
buffering_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_OnBufferingStart(void* user_data) {
21  if (!user_data) return;
22 
23  BufferingListener_Samsung* listener =
24  static_cast<BufferingListener_Samsung*>(user_data);
25  listener->OnBufferingStart();
26 }
27 
28 void ListenerWrapper_OnBufferingProgress(uint32_t percent,
29  void* user_data) {
30  if (!user_data) return;
31 
32  BufferingListener_Samsung* listener =
33  static_cast<BufferingListener_Samsung*>(user_data);
34  listener->OnBufferingProgress(percent);
35 }
36 
37 void ListenerWrapper_OnBufferingComplete(void* user_data) {
38  if (!user_data) return;
39 
40  BufferingListener_Samsung* listener =
41  static_cast<BufferingListener_Samsung*>(user_data);
42  listener->OnBufferingComplete();
43 }
44 
45 const PPP_BufferingListener_Samsung* GetListenerWrapper() {
46  static const PPP_BufferingListener_Samsung listener = {
47  &ListenerWrapper_OnBufferingStart,
48  &ListenerWrapper_OnBufferingProgress,
49  &ListenerWrapper_OnBufferingComplete,
50  };
51 
52  return &listener;
53 }
54 
55 } // namespace
56 
57 
59  Detach();
60 }
61 
63 }
64 
65 void BufferingListener_Samsung::OnBufferingProgress(uint32_t /* percent */) {
66 }
67 
69 }
70 
72 }
73 
75  MediaPlayer_Samsung* player)
76  : player_(0) {
77  AttachTo(player);
78 }
79 
81  if (!player) {
82  Detach();
83  return;
84  }
85 
86  if (player_ == player->pp_resource()) return;
87 
88  // TODO(samsung) Is assumption to allow only one listener per application
89  // convenient?
90  if (player_) Detach();
91 
92  if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
93  get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetBufferingListener(
94  player->pp_resource(), GetListenerWrapper(), this);
95  }
96 
97  player_ = player->pp_resource();
98 }
99 
100 void BufferingListener_Samsung::Detach() {
101  if (!player_) return;
102 
103  if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
104  get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetBufferingListener(
105  player_, NULL, NULL);
106  }
107 
108  player_ = 0;
109 }
110 
111 } // namespace pp
virtual void OnBufferingStart()
Initial media buffering has been started by the player.
void AttachTo(MediaPlayer_Samsung *player)
Attaches listener to the |player|.
PP_Resource pp_resource() const
Definition: resource.h:47
virtual void OnBufferingProgress(uint32_t percent)