Pepper_47_C++_interfaces
subtitle_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_OnShowSubtitle(PP_TimeDelta duration,
21  const char* text,
22  void* user_data) {
23  if (!user_data) return;
24 
25  SubtitleListener_Samsung* listener =
26  static_cast<SubtitleListener_Samsung*>(user_data);
27  listener->OnShowSubtitle(duration, text);
28 }
29 
30 const PPP_SubtitleListener_Samsung* GetListenerWrapper() {
31  static const PPP_SubtitleListener_Samsung listener = {
32  &ListenerWrapper_OnShowSubtitle,
33  };
34  return &listener;
35 }
36 
37 } // namespace
38 
40  Detach();
41 }
42 
44 }
45 
47  : player_(0) {
48  AttachTo(player);
49 }
50 
52  if (!player) {
53  Detach();
54  return;
55  }
56 
57  if (player_ == player->pp_resource()) return;
58 
59  // TODO(samsung): Is assumption to allow only one listener per application
60  // convenient?
61  if (player_) Detach();
62 
63  if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
64  get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetSubtitleListener(
65  player->pp_resource(), GetListenerWrapper(), this);
66  }
67 
68  player_ = player->pp_resource();
69 }
70 
71 void SubtitleListener_Samsung::Detach() {
72  if (!player_) return;
73 
74  if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
75  get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetSubtitleListener(
76  player_, NULL, NULL);
77  }
78 
79  player_ = 0;
80 }
81 
82 } // namespace pp
void AttachTo(MediaPlayer_Samsung *player)
Attaches listener to the |player|.
PP_Resource pp_resource() const
Definition: resource.h:47