Pepper_47_C++_interfaces
drm_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_OnInitdataLoaded(PP_MediaPlayerDRMType drm_type,
21  uint32_t init_data_size,
22  const void* init_data,
23  void* user_data) {
24  if (!user_data) return;
25 
26  DRMListener_Samsung* listener =
27  static_cast<DRMListener_Samsung*>(user_data);
28  listener->OnInitdataLoaded(drm_type, init_data_size, init_data);
29 }
30 
31 void ListenerWrapper_OnLicenseRequest(uint32_t request_size,
32  const void* request,
33  void* user_data) {
34  if (!user_data) return;
35 
36  DRMListener_Samsung* listener =
37  static_cast<DRMListener_Samsung*>(user_data);
38  listener->OnLicenseRequest(request_size, request);
39 }
40 
41 const PPP_DRMListener_Samsung* GetListenerWrapper() {
42  static const PPP_DRMListener_Samsung listener = {
43  &ListenerWrapper_OnInitdataLoaded,
44  &ListenerWrapper_OnLicenseRequest,
45  };
46 
47  return &listener;
48 }
49 
50 } // namespace
51 
53  Detach();
54 }
55 
57  PP_MediaPlayerDRMType /* drm_type */,
58  uint32_t /* init_data_size */,
59  const void* /* init_data */) {
60 }
61 
62 void DRMListener_Samsung::OnLicenseRequest(uint32_t /* request_size */,
63  const void* /* request */) {
64 }
65 
67 }
68 
70  : player_(0) {
71  AttachTo(player);
72 }
73 
75  if (!player) {
76  Detach();
77  return;
78  }
79 
80  if (player_ == player->pp_resource()) return;
81 
82  // TODO(samsung): Is assumption to allow only one listener per application
83  // convenient?
84  if (player_) Detach();
85 
86  if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
87  get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetDRMListener(
88  player->pp_resource(), GetListenerWrapper(), this);
89  }
90 
91  player_ = player->pp_resource();
92 }
93 
94 
95 void DRMListener_Samsung::Detach() {
96  if (!player_) return;
97 
98  if (has_interface<PPB_MediaPlayer_Samsung_1_0>()) {
99  get_interface<PPB_MediaPlayer_Samsung_1_0>()->SetDRMListener(
100  player_, NULL, NULL);
101  }
102 
103  player_ = 0;
104 }
105 
106 } // namespace pp
void AttachTo(MediaPlayer_Samsung *player)
Attaches listener to the |player|.
virtual void OnInitdataLoaded(PP_MediaPlayerDRMType drm_type, uint32_t init_data_size, const void *init_data)
virtual void OnLicenseRequest(uint32_t request_size, const void *request)
PP_Resource pp_resource() const
Definition: resource.h:47