711c02aa911579d8d3655d1da822e31eca951dfb
[platform/framework/web/crosswalk.git] / src / xwalk / tizen / browser / media / murphy_resource.cc
1 // Copyright (c) 2014 Intel Corporation. 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
5 #include "xwalk/tizen/browser/media/murphy_resource.h"
6
7 #include "xwalk/tizen/browser/media/browser_mediaplayer_manager.h"
8
9 namespace {
10
11 const char kMediaApplicationClass[] = "player";
12 const char kMediaStreamName[] = "audio_playback";
13 const char kMediaRole[] = "browser";
14
15 static void NotifyCallback(mrp_res_context_t* context,
16     const mrp_res_resource_set_t* resource_set,
17     void* callback_data) {
18   tizen::MurphyResource* resource =
19     static_cast<tizen::MurphyResource*> (callback_data);
20   tizen::BrowserMediaPlayerManager* manager = resource->media_player_manager();
21   if (!manager)
22     return;
23
24   manager->ResourceNotifyCallback(resource_set->state, resource->player_id());
25   resource->SetResourceState(resource_set->state);
26 }
27
28 }  // namespace
29
30 namespace tizen {
31
32 MurphyResource::MurphyResource(
33     BrowserMediaPlayerManager* manager,
34     MediaPlayerID player_id,
35     MurphyResourceManager* resource_manager)
36     : manager_(manager),
37       player_id_(player_id),
38       resource_manager_(resource_manager),
39       resource_state_(MRP_RES_RESOURCE_PENDING) {
40   mrp_res_context_t* context = resource_manager_->GetContext();
41   if (!context)
42     return;
43
44   resource_set_ = mrp_res_create_resource_set(context,
45       kMediaApplicationClass, NotifyCallback, this);
46   if (!resource_set_)
47     return;
48
49   mrp_res_resource_t* resource = mrp_res_create_resource(
50       resource_set_, kMediaStreamName, true, true);
51
52   mrp_res_attribute_t* attr = mrp_res_get_attribute_by_name(
53       resource, "role");
54   if (attr)
55     mrp_res_set_attribute_string(attr, kMediaRole);
56
57   mrp_res_release_resource_set(resource_set_);
58 }
59
60 void MurphyResource::AcquireResource() {
61   if (!resource_manager_ || !resource_set_)
62     return;
63
64   // Call acquire
65   mrp_res_acquire_resource_set(resource_set_);
66 }
67
68 void MurphyResource::ReleaseResource() {
69   if (!resource_manager_ || !resource_set_)
70     return;
71
72   // Call release
73   mrp_res_release_resource_set(resource_set_);
74 }
75
76 MurphyResource::~MurphyResource() {
77   ReleaseResource();
78
79   if (!resource_manager_ || !resource_set_)
80     return;
81
82   // Delete resource set (and the resource inside it)
83   mrp_res_delete_resource_set(resource_set_);
84 }
85
86 }  // namespace tizen