Merge lp:~jhodapp/media-hub/signal-duration-changed into lp:media-hub

Proposed by Jim Hodapp
Status: Approved
Approved by: Alfonso Sanchez-Beato
Approved revision: 139
Proposed branch: lp:~jhodapp/media-hub/signal-duration-changed
Merge into: lp:media-hub
Diff against target: 379 lines (+80/-3)
14 files modified
CMakeLists.txt (+1/-1)
debian/changelog (+6/-0)
include/core/media/player.h (+1/-0)
src/core/media/engine.h (+1/-0)
src/core/media/gstreamer/engine.cpp (+18/-2)
src/core/media/gstreamer/engine.h (+1/-0)
src/core/media/gstreamer/playbin.cpp (+3/-0)
src/core/media/gstreamer/playbin.h (+1/-0)
src/core/media/mpris/player.h (+3/-0)
src/core/media/player_implementation.cpp (+5/-0)
src/core/media/player_skeleton.cpp (+19/-0)
src/core/media/player_skeleton.h (+2/-0)
src/core/media/player_stub.cpp (+18/-0)
src/core/media/player_stub.h (+1/-0)
To merge this branch: bzr merge lp:~jhodapp/media-hub/signal-duration-changed
Reviewer Review Type Date Requested Status
Alfonso Sanchez-Beato Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+259177@code.launchpad.net

Commit message

Signal the client when the track duration has changed.

Description of the change

Signal the client when the track duration has changed.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
138. By Jim Hodapp

Bump the media-hub version.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
139. By Jim Hodapp

Bump the version number in the debian changelog.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Alfonso Sanchez-Beato (alfonsosanchezbeato) wrote :

LGTM

review: Approve

Unmerged revisions

139. By Jim Hodapp

Bump the version number in the debian changelog.

138. By Jim Hodapp

Bump the media-hub version.

137. By Jim Hodapp

Signal the client when the track duration has changed.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CMakeLists.txt'
2--- CMakeLists.txt 2015-04-10 16:21:16 +0000
3+++ CMakeLists.txt 2015-05-15 14:42:13 +0000
4@@ -3,7 +3,7 @@
5 project(ubuntu-media-hub)
6
7 set(UBUNTU_MEDIA_HUB_VERSION_MAJOR 3)
8-set(UBUNTU_MEDIA_HUB_VERSION_MINOR 1)
9+set(UBUNTU_MEDIA_HUB_VERSION_MINOR 2)
10 set(UBUNTU_MEDIA_HUB_VERSION_PATCH 0)
11
12 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fPIC -pthread")
13
14=== modified file 'debian/changelog'
15--- debian/changelog 2015-04-27 23:33:14 +0000
16+++ debian/changelog 2015-05-15 14:42:13 +0000
17@@ -1,3 +1,9 @@
18+media-hub (3.2.0+15.04.20150427.3-0ubuntu2) UNRELEASED; urgency=medium
19+
20+ * Signal the client when the track duration has changed.
21+
22+ -- phablet <phablet@ubuntu-phablet> Fri, 15 May 2015 10:40:46 -0400
23+
24 media-hub (3.1.0+15.04.20150427.3-0ubuntu1) vivid; urgency=medium
25
26 [ CI Train Bot ]
27
28=== modified file 'include/core/media/player.h'
29--- include/core/media/player.h 2015-04-17 16:37:02 +0000
30+++ include/core/media/player.h 2015-05-15 14:42:13 +0000
31@@ -177,6 +177,7 @@
32 virtual const core::Signal<void>& end_of_stream() const = 0;
33 virtual core::Signal<PlaybackStatus>& playback_status_changed() = 0;
34 virtual const core::Signal<video::Dimensions>& video_dimension_changed() const = 0;
35+ virtual const core::Signal<uint64_t>& duration_changed() const = 0;
36 /** Signals all errors and warnings (typically from GStreamer and below) */
37 virtual const core::Signal<Error>& error() const = 0;
38 protected:
39
40=== modified file 'src/core/media/engine.h'
41--- src/core/media/engine.h 2015-04-03 22:52:08 +0000
42+++ src/core/media/engine.h 2015-05-15 14:42:13 +0000
43@@ -112,6 +112,7 @@
44 virtual const core::Signal<void>& end_of_stream_signal() const = 0;
45 virtual const core::Signal<core::ubuntu::media::Player::PlaybackStatus>& playback_status_changed_signal() const = 0;
46 virtual const core::Signal<video::Dimensions>& video_dimension_changed_signal() const = 0;
47+ virtual const core::Signal<uint64_t>& duration_changed_signal() const = 0;
48 virtual const core::Signal<core::ubuntu::media::Player::Error>& error_signal() const = 0;
49
50 virtual void reset() = 0;
51
52=== modified file 'src/core/media/gstreamer/engine.cpp'
53--- src/core/media/gstreamer/engine.cpp 2015-04-03 22:52:08 +0000
54+++ src/core/media/gstreamer/engine.cpp 2015-05-15 14:42:13 +0000
55@@ -25,8 +25,6 @@
56 #include "meta_data_extractor.h"
57 #include "playbin.h"
58
59-#include <cassert>
60-
61 namespace media = core::ubuntu::media;
62
63 using namespace std;
64@@ -180,6 +178,11 @@
65 video_dimension_changed(dimensions);
66 }
67
68+ void on_duration_changed(uint64_t duration)
69+ {
70+ duration_changed(duration);
71+ }
72+
73 Private()
74 : meta_data_extractor(new gstreamer::MetaDataExtractor()),
75 volume(media::Engine::Volume(1.)),
76@@ -266,6 +269,12 @@
77 std::bind(
78 &Private::on_video_dimension_changed,
79 this,
80+ std::placeholders::_1))),
81+ on_duration_changed_connection(
82+ playbin.signals.on_duration_changed.connect(
83+ std::bind(
84+ &Private::on_duration_changed,
85+ this,
86 std::placeholders::_1)))
87 {
88 }
89@@ -300,6 +309,7 @@
90 core::ScopedConnection client_disconnected_connection;
91 core::ScopedConnection on_end_of_stream_connection;
92 core::ScopedConnection on_video_dimension_changed_connection;
93+ core::ScopedConnection on_duration_changed_connection;
94
95 core::Signal<void> about_to_finish;
96 core::Signal<uint64_t> seeked_to;
97@@ -307,6 +317,7 @@
98 core::Signal<void> end_of_stream;
99 core::Signal<media::Player::PlaybackStatus> playback_status_changed;
100 core::Signal<core::ubuntu::media::video::Dimensions> video_dimension_changed;
101+ core::Signal<uint64_t> duration_changed;
102 core::Signal<media::Player::Error> error;
103 };
104
105@@ -506,6 +517,11 @@
106 return d->video_dimension_changed;
107 }
108
109+const core::Signal<uint64_t>& gstreamer::Engine::duration_changed_signal() const
110+{
111+ return d->duration_changed;
112+}
113+
114 const core::Signal<core::ubuntu::media::Player::Error>& gstreamer::Engine::error_signal() const
115 {
116 return d->error;
117
118=== modified file 'src/core/media/gstreamer/engine.h'
119--- src/core/media/gstreamer/engine.h 2015-04-03 22:52:08 +0000
120+++ src/core/media/gstreamer/engine.h 2015-05-15 14:42:13 +0000
121@@ -67,6 +67,7 @@
122 const core::Signal<void>& end_of_stream_signal() const;
123 const core::Signal<core::ubuntu::media::Player::PlaybackStatus>& playback_status_changed_signal() const;
124 const core::Signal<core::ubuntu::media::video::Dimensions>& video_dimension_changed_signal() const;
125+ const core::Signal<uint64_t>& duration_changed_signal() const;
126 const core::Signal<core::ubuntu::media::Player::Error>& error_signal() const;
127
128 void reset();
129
130=== modified file 'src/core/media/gstreamer/playbin.cpp'
131--- src/core/media/gstreamer/playbin.cpp 2015-04-15 17:13:58 +0000
132+++ src/core/media/gstreamer/playbin.cpp 2015-05-15 14:42:13 +0000
133@@ -207,6 +207,9 @@
134 case GST_MESSAGE_EOS:
135 is_eos = true;
136 signals.on_end_of_stream();
137+ case GST_MESSAGE_DURATION_CHANGED:
138+ signals.on_duration_changed(duration());
139+ break;
140 default:
141 break;
142 }
143
144=== modified file 'src/core/media/gstreamer/playbin.h'
145--- src/core/media/gstreamer/playbin.h 2015-04-15 17:13:58 +0000
146+++ src/core/media/gstreamer/playbin.h 2015-05-15 14:42:13 +0000
147@@ -131,6 +131,7 @@
148 core::Signal<core::ubuntu::media::Player::PlaybackStatus> on_playback_status_changed;
149 core::Signal<core::ubuntu::media::Player::Orientation> on_orientation_changed;
150 core::Signal<core::ubuntu::media::video::Dimensions> on_video_dimensions_changed;
151+ core::Signal<uint64_t> on_duration_changed;
152 core::Signal<void> client_disconnected;
153 } signals;
154 };
155
156=== modified file 'src/core/media/mpris/player.h'
157--- src/core/media/mpris/player.h 2015-04-06 20:59:14 +0000
158+++ src/core/media/mpris/player.h 2015-05-15 14:42:13 +0000
159@@ -140,6 +140,7 @@
160 DBUS_CPP_SIGNAL_DEF(EndOfStream, Player, void)
161 DBUS_CPP_SIGNAL_DEF(PlaybackStatusChanged, Player, core::ubuntu::media::Player::PlaybackStatus)
162 DBUS_CPP_SIGNAL_DEF(VideoDimensionChanged, Player, core::ubuntu::media::video::Dimensions)
163+ DBUS_CPP_SIGNAL_DEF(DurationChanged, Player, std::uint64_t)
164 DBUS_CPP_SIGNAL_DEF(Error, Player, core::ubuntu::media::Player::Error)
165 };
166
167@@ -251,6 +252,7 @@
168 configuration.object->template get_signal<Signals::EndOfStream>(),
169 configuration.object->template get_signal<Signals::PlaybackStatusChanged>(),
170 configuration.object->template get_signal<Signals::VideoDimensionChanged>(),
171+ configuration.object->template get_signal<Signals::DurationChanged>(),
172 configuration.object->template get_signal<Signals::Error>(),
173 configuration.object->template get_signal<core::dbus::interfaces::Properties::Signals::PropertiesChanged>()
174 }
175@@ -384,6 +386,7 @@
176 typename core::dbus::Signal<Signals::EndOfStream, Signals::EndOfStream::ArgumentType>::Ptr end_of_stream;
177 typename core::dbus::Signal<Signals::PlaybackStatusChanged, Signals::PlaybackStatusChanged::ArgumentType>::Ptr playback_status_changed;
178 typename core::dbus::Signal<Signals::VideoDimensionChanged, Signals::VideoDimensionChanged::ArgumentType>::Ptr video_dimension_changed;
179+ typename core::dbus::Signal<Signals::DurationChanged, Signals::DurationChanged::ArgumentType>::Ptr duration_changed;
180 typename core::dbus::Signal<Signals::Error, Signals::Error::ArgumentType>::Ptr error;
181
182 dbus::Signal
183
184=== modified file 'src/core/media/player_implementation.cpp'
185--- src/core/media/player_implementation.cpp 2015-04-27 20:52:06 +0000
186+++ src/core/media/player_implementation.cpp 2015-05-15 14:42:13 +0000
187@@ -440,6 +440,11 @@
188 Parent::video_dimension_changed()(dimensions);
189 });
190
191+ d->engine->duration_changed_signal().connect([this](uint64_t duration)
192+ {
193+ Parent::duration_changed()(duration);
194+ });
195+
196 d->engine->error_signal().connect([this](const Player::Error& e)
197 {
198 Parent::error()(e);
199
200=== modified file 'src/core/media/player_skeleton.cpp'
201--- src/core/media/player_skeleton.cpp 2015-04-20 17:48:48 +0000
202+++ src/core/media/player_skeleton.cpp 2015-05-15 14:42:13 +0000
203@@ -62,6 +62,7 @@
204 skeleton.signals.end_of_stream,
205 skeleton.signals.playback_status_changed,
206 skeleton.signals.video_dimension_changed,
207+ skeleton.signals.duration_changed,
208 skeleton.signals.error
209 }
210 {
211@@ -242,6 +243,7 @@
212 typedef core::dbus::Signal<mpris::Player::Signals::AboutToFinish, mpris::Player::Signals::AboutToFinish::ArgumentType> DBusAboutToFinishSignal;
213 typedef core::dbus::Signal<mpris::Player::Signals::PlaybackStatusChanged, mpris::Player::Signals::PlaybackStatusChanged::ArgumentType> DBusPlaybackStatusChangedSignal;
214 typedef core::dbus::Signal<mpris::Player::Signals::VideoDimensionChanged, mpris::Player::Signals::VideoDimensionChanged::ArgumentType> DBusVideoDimensionChangedSignal;
215+ typedef core::dbus::Signal<mpris::Player::Signals::DurationChanged, mpris::Player::Signals::DurationChanged::ArgumentType> DBusDurationChangedSignal;
216 typedef core::dbus::Signal<mpris::Player::Signals::Error, mpris::Player::Signals::Error::ArgumentType> DBusErrorSignal;
217
218 Signals(const std::shared_ptr<DBusSeekedToSignal>& remote_seeked,
219@@ -249,6 +251,7 @@
220 const std::shared_ptr<DBusEndOfStreamSignal>& remote_eos,
221 const std::shared_ptr<DBusPlaybackStatusChangedSignal>& remote_playback_status_changed,
222 const std::shared_ptr<DBusVideoDimensionChangedSignal>& remote_video_dimension_changed,
223+ const std::shared_ptr<DBusDurationChangedSignal>& remote_duration_changed,
224 const std::shared_ptr<DBusErrorSignal>& remote_error)
225 {
226 seeked_to.connect([remote_seeked](std::uint64_t value)
227@@ -276,6 +279,11 @@
228 remote_video_dimension_changed->emit(dimensions);
229 });
230
231+ duration_changed.connect([remote_duration_changed](uint64_t duration)
232+ {
233+ remote_duration_changed->emit(duration);
234+ });
235+
236 error.connect([remote_error](const media::Player::Error& e)
237 {
238 remote_error->emit(e);
239@@ -287,6 +295,7 @@
240 core::Signal<void> end_of_stream;
241 core::Signal<media::Player::PlaybackStatus> playback_status_changed;
242 core::Signal<media::video::Dimensions> video_dimension_changed;
243+ core::Signal<uint64_t> duration_changed;
244 core::Signal<media::Player::Error> error;
245 } signals;
246
247@@ -603,6 +612,16 @@
248 return d->signals.video_dimension_changed;
249 }
250
251+const core::Signal<uint64_t>& media::PlayerSkeleton::duration_changed() const
252+{
253+ return d->signals.duration_changed;
254+}
255+
256+core::Signal<uint64_t>& media::PlayerSkeleton::duration_changed()
257+{
258+ return d->signals.duration_changed;
259+}
260+
261 core::Signal<media::Player::Error>& media::PlayerSkeleton::error()
262 {
263 return d->signals.error;
264
265=== modified file 'src/core/media/player_skeleton.h'
266--- src/core/media/player_skeleton.h 2015-04-17 15:13:56 +0000
267+++ src/core/media/player_skeleton.h 2015-05-15 14:42:13 +0000
268@@ -97,6 +97,7 @@
269 virtual const core::Signal<void>& about_to_finish() const;
270 virtual const core::Signal<void>& end_of_stream() const;
271 virtual const core::Signal<video::Dimensions>& video_dimension_changed() const;
272+ virtual const core::Signal<uint64_t>& duration_changed() const;
273 virtual const core::Signal<Error>& error() const;
274
275 // These properties are not exposed to the client, but still need to be
276@@ -121,6 +122,7 @@
277 virtual core::Signal<void>& end_of_stream();
278 virtual core::Signal<PlaybackStatus>& playback_status_changed();
279 virtual core::Signal<video::Dimensions>& video_dimension_changed();
280+ virtual core::Signal<uint64_t>& duration_changed();
281 virtual core::Signal<Error>& error();
282
283 private:
284
285=== modified file 'src/core/media/player_stub.cpp'
286--- src/core/media/player_stub.cpp 2015-04-17 16:45:47 +0000
287+++ src/core/media/player_stub.cpp 2015-05-15 14:42:13 +0000
288@@ -84,6 +84,7 @@
289 object->get_signal<mpris::Player::Signals::EndOfStream>(),
290 object->get_signal<mpris::Player::Signals::PlaybackStatusChanged>(),
291 object->get_signal<mpris::Player::Signals::VideoDimensionChanged>(),
292+ object->get_signal<mpris::Player::Signals::DurationChanged>(),
293 object->get_signal<mpris::Player::Signals::Error>()
294 }
295 {
296@@ -133,6 +134,7 @@
297 typedef core::dbus::Signal<mpris::Player::Signals::EndOfStream, mpris::Player::Signals::EndOfStream::ArgumentType> DBusEndOfStreamSignal;
298 typedef core::dbus::Signal<mpris::Player::Signals::PlaybackStatusChanged, mpris::Player::Signals::PlaybackStatusChanged::ArgumentType> DBusPlaybackStatusChangedSignal;
299 typedef core::dbus::Signal<mpris::Player::Signals::VideoDimensionChanged, mpris::Player::Signals::VideoDimensionChanged::ArgumentType> DBusVideoDimensionChangedSignal;
300+ typedef core::dbus::Signal<mpris::Player::Signals::DurationChanged, mpris::Player::Signals::DurationChanged::ArgumentType> DBusDurationChangedSignal;
301 typedef core::dbus::Signal<mpris::Player::Signals::Error, mpris::Player::Signals::Error::ArgumentType> DBusErrorSignal;
302
303 Signals(const std::shared_ptr<DBusSeekedToSignal>& seeked,
304@@ -140,12 +142,14 @@
305 const std::shared_ptr<DBusEndOfStreamSignal>& eos,
306 const std::shared_ptr<DBusPlaybackStatusChangedSignal>& status,
307 const std::shared_ptr<DBusVideoDimensionChangedSignal>& d,
308+ const std::shared_ptr<DBusDurationChangedSignal>& duration,
309 const std::shared_ptr<DBusErrorSignal>& e)
310 : seeked_to(),
311 about_to_finish(),
312 end_of_stream(),
313 playback_status_changed(),
314 video_dimension_changed(),
315+ duration_changed(),
316 error(),
317 dbus
318 {
319@@ -154,6 +158,7 @@
320 eos,
321 status,
322 d,
323+ duration,
324 e
325 }
326 {
327@@ -187,6 +192,12 @@
328 video_dimension_changed(dimensions);
329 });
330
331+ dbus.duration_changed->connect([this](uint64_t duration)
332+ {
333+ std::cout << "DurationChanged signal arrived via the bus: " << duration << std::endl;
334+ duration_changed(duration);
335+ });
336+
337 dbus.error->connect([this](const media::Player::Error& e)
338 {
339 std::cout << "Error signal arrived via the bus (Error: " << e << ")" << std::endl;
340@@ -199,6 +210,7 @@
341 core::Signal<void> end_of_stream;
342 core::Signal<media::Player::PlaybackStatus> playback_status_changed;
343 core::Signal<media::video::Dimensions> video_dimension_changed;
344+ core::Signal<uint64_t> duration_changed;
345 core::Signal<media::Player::Error> error;
346
347 struct DBus
348@@ -208,6 +220,7 @@
349 std::shared_ptr<DBusEndOfStreamSignal> end_of_stream;
350 std::shared_ptr<DBusPlaybackStatusChangedSignal> playback_status_changed;
351 std::shared_ptr<DBusVideoDimensionChangedSignal> video_dimension_changed;
352+ std::shared_ptr<DBusDurationChangedSignal> duration_changed;
353 std::shared_ptr<DBusErrorSignal> error;
354 } dbus;
355 } signals;
356@@ -492,6 +505,11 @@
357 return d->signals.video_dimension_changed;
358 }
359
360+const core::Signal<uint64_t>& media::PlayerStub::duration_changed() const
361+{
362+ return d->signals.duration_changed;
363+}
364+
365 const core::Signal<media::Player::Error>& media::PlayerStub::error() const
366 {
367 return d->signals.error;
368
369=== modified file 'src/core/media/player_stub.h'
370--- src/core/media/player_stub.h 2015-04-17 16:44:30 +0000
371+++ src/core/media/player_stub.h 2015-05-15 14:42:13 +0000
372@@ -96,6 +96,7 @@
373 virtual const core::Signal<void>& end_of_stream() const;
374 virtual core::Signal<PlaybackStatus>& playback_status_changed();
375 virtual const core::Signal<video::Dimensions>& video_dimension_changed() const;
376+ virtual const core::Signal<uint64_t>& duration_changed() const;
377 virtual const core::Signal<Error>& error() const;
378
379 private:

Subscribers

People subscribed via source and target branches