Merge lp:~ricmm/media-hub/keep-display-recording-1362658 into lp:media-hub

Proposed by Ricardo Mendoza
Status: Merged
Approved by: Ricardo Salveti
Approved revision: 71
Merged at revision: 78
Proposed branch: lp:~ricmm/media-hub/keep-display-recording-1362658
Merge into: lp:media-hub
Diff against target: 107 lines (+56/-2)
2 files modified
debian/control (+1/-1)
src/core/media/service_implementation.cpp (+55/-1)
To merge this branch: bzr merge lp:~ricmm/media-hub/keep-display-recording-1362658
Reviewer Review Type Date Requested Status
Ricardo Salveti (community) Approve
PS Jenkins bot continuous-integration Needs Fixing
Jim Hodapp (community) code Approve
Review via email: mp+238446@code.launchpad.net

Commit message

Make use of MediaRecorderObserver interface from hybris to register as listeners for recording operations, so that we can then decide whether to hold a screen lock or not.

To post a comment you must log in.
Revision history for this message
Jim Hodapp (jhodapp) wrote :

Looks good, thanks man!

review: Approve (code)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Ricardo Salveti (rsalveti) wrote :

LGTM, works as expected.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/control'
--- debian/control 2014-08-28 07:17:42 +0000
+++ debian/control 2014-10-15 14:22:19 +0000
@@ -22,7 +22,7 @@
22 libdbus-1-dev,22 libdbus-1-dev,
23 libdbus-cpp-dev (>= 4.0.0),23 libdbus-cpp-dev (>= 4.0.0),
24 libgoogle-glog-dev,24 libgoogle-glog-dev,
25 libhybris-dev (>=0.1.0+git20131207+e452e83-0ubuntu13),25 libhybris-dev (>=0.1.0+git20131207+e452e83-0ubuntu28),
26 libprocess-cpp-dev,26 libprocess-cpp-dev,
27 libproperties-cpp-dev,27 libproperties-cpp-dev,
28 gstreamer1.0-libav,28 gstreamer1.0-libav,
2929
=== modified file 'src/core/media/service_implementation.cpp'
--- src/core/media/service_implementation.cpp 2014-09-25 17:23:40 +0000
+++ src/core/media/service_implementation.cpp 2014-10-15 14:22:19 +0000
@@ -30,6 +30,10 @@
30#include <memory>30#include <memory>
31#include <thread>31#include <thread>
3232
33#include "util/timeout.h"
34#include "unity_screen_service.h"
35#include <hybris/media/media_recorder_layer.h>
36
33namespace media = core::ubuntu::media;37namespace media = core::ubuntu::media;
3438
35using namespace std;39using namespace std;
@@ -38,7 +42,8 @@
38{42{
39 Private()43 Private()
40 : resume_key(std::numeric_limits<std::uint32_t>::max()),44 : resume_key(std::numeric_limits<std::uint32_t>::max()),
41 keep_alive(io_service)45 keep_alive(io_service),
46 disp_cookie(0)
42 {47 {
43 bus = std::shared_ptr<dbus::Bus>(new dbus::Bus(core::dbus::WellKnownBus::session));48 bus = std::shared_ptr<dbus::Bus>(new dbus::Bus(core::dbus::WellKnownBus::session));
44 bus->install_executor(dbus::asio::make_executor(bus, io_service));49 bus->install_executor(dbus::asio::make_executor(bus, io_service));
@@ -53,6 +58,16 @@
53 indicator_power_session = stub_service->object_for_path(dbus::types::ObjectPath("/com/canonical/indicator/power/Battery"));58 indicator_power_session = stub_service->object_for_path(dbus::types::ObjectPath("/com/canonical/indicator/power/Battery"));
54 power_level = indicator_power_session->get_property<core::IndicatorPower::PowerLevel>();59 power_level = indicator_power_session->get_property<core::IndicatorPower::PowerLevel>();
55 is_warning = indicator_power_session->get_property<core::IndicatorPower::IsWarning>();60 is_warning = indicator_power_session->get_property<core::IndicatorPower::IsWarning>();
61
62 // Obtain session with Unity.Screen so that we request state when doing recording
63 auto bus = std::shared_ptr<dbus::Bus>(new dbus::Bus(core::dbus::WellKnownBus::system));
64 bus->install_executor(dbus::asio::make_executor(bus));
65
66 auto uscreen_stub_service = dbus::Service::use_service(bus, dbus::traits::Service<core::UScreen>::interface_name());
67 uscreen_session = uscreen_stub_service->object_for_path(dbus::types::ObjectPath("/com/canonical/Unity/Screen"));
68
69 observer = android_media_recorder_observer_new();
70 android_media_recorder_observer_set_cb(observer, &Private::media_recording_started_callback, this);
56 }71 }
5772
58 ~Private()73 ~Private()
@@ -63,6 +78,42 @@
63 worker.join();78 worker.join();
64 }79 }
6580
81 void media_recording_started(bool started)
82 {
83 if (uscreen_session == nullptr)
84 return;
85
86 if (started)
87 {
88 if (disp_cookie > 0)
89 return;
90
91 auto result = uscreen_session->invoke_method_synchronously<core::UScreen::keepDisplayOn, int>();
92 if (result.is_error())
93 throw std::runtime_error(result.error().print());
94 disp_cookie = result.value();
95 }
96 else
97 {
98 if (disp_cookie != -1)
99 {
100 timeout(4000, true, [this](){
101 this->uscreen_session->invoke_method_synchronously<core::UScreen::removeDisplayOnRequest, void>(this->disp_cookie);
102 this->disp_cookie = -1;
103 });
104 }
105 }
106 }
107
108 static void media_recording_started_callback(bool started, void *context)
109 {
110 if (context == nullptr)
111 return;
112
113 auto p = static_cast<Private*>(context);
114 p->media_recording_started(started);
115 }
116
66 // This holds the key of the multimedia role Player instance that was paused117 // This holds the key of the multimedia role Player instance that was paused
67 // when the battery level reached 10% or 5%118 // when the battery level reached 10% or 5%
68 media::Player::PlayerKey resume_key;119 media::Player::PlayerKey resume_key;
@@ -73,6 +124,9 @@
73 std::shared_ptr<dbus::Object> indicator_power_session;124 std::shared_ptr<dbus::Object> indicator_power_session;
74 std::shared_ptr<core::dbus::Property<core::IndicatorPower::PowerLevel>> power_level;125 std::shared_ptr<core::dbus::Property<core::IndicatorPower::PowerLevel>> power_level;
75 std::shared_ptr<core::dbus::Property<core::IndicatorPower::IsWarning>> is_warning;126 std::shared_ptr<core::dbus::Property<core::IndicatorPower::IsWarning>> is_warning;
127 int disp_cookie;
128 std::shared_ptr<dbus::Object> uscreen_session;
129 MediaRecorderObserver *observer;
76};130};
77131
78media::ServiceImplementation::ServiceImplementation() : d(new Private())132media::ServiceImplementation::ServiceImplementation() : d(new Private())

Subscribers

People subscribed via source and target branches