Music Hub ..
A session-wide music playback service
player.h
Go to the documentation of this file.
1/*
2 * Copyright © 2013 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authored by: Thomas Voß <thomas.voss@canonical.com>
17 * Jim Hodapp <jim.hodapp@canonical.com>
18 */
19
20#ifndef MPRIS_PLAYER_H_
21#define MPRIS_PLAYER_H_
22
23#include <core/media/player.h>
24#include <core/media/track.h>
25
26#include "core/media/codec.h"
27
28#include <core/dbus/bus.h>
29#include <core/dbus/macros.h>
30#include <core/dbus/object.h>
31#include <core/dbus/property.h>
32#include <core/dbus/interfaces/properties.h>
33#include <core/dbus/types/any.h>
34#include <core/dbus/types/object_path.h>
35#include <core/dbus/types/variant.h>
36
37#include <core/dbus/types/stl/tuple.h>
38
39#include <boost/utility/identity_type.hpp>
40
41#include <string>
42#include <tuple>
43#include <vector>
44
45#include <cstdint>
46
48
49namespace dbus = core::dbus;
50
51namespace mpris
52{
53struct Player
54{
55 static const std::string& name()
56 {
57 static const std::string s{"org.mpris.MediaPlayer2.Player"};
58 return s;
59 }
60
62 {
63 LoopStatus() = delete;
64
66 {
67 switch(status)
68 {
69 case core::ubuntu::media::Player::LoopStatus::none:
70 return LoopStatus::none;
71 case core::ubuntu::media::Player::LoopStatus::track:
72 return LoopStatus::track;
73 case core::ubuntu::media::Player::LoopStatus::playlist:
75 }
76
77 return nullptr;
78 }
79
80 static constexpr const char* none{"None"};
81 static constexpr const char* track{"Track"};
82 static constexpr const char* playlist{"Playlist"};
83 };
84
86 {
87 PlaybackStatus() = delete;
88
90 {
91 switch(status)
92 {
93 case core::ubuntu::media::Player::PlaybackStatus::null:
94 case core::ubuntu::media::Player::PlaybackStatus::ready:
95 case core::ubuntu::media::Player::PlaybackStatus::stopped:
97
98 case core::ubuntu::media::Player::PlaybackStatus::playing:
100 case core::ubuntu::media::Player::PlaybackStatus::paused:
102 }
103
104 return nullptr;
105 }
106
107 static constexpr const char* playing{"Playing"};
108 static constexpr const char* paused{"Paused"};
109 static constexpr const char* stopped{"Stopped"};
110 };
111
112 struct Error
113 {
115 {
116 static constexpr const char* name
117 {
118 "mpris.Player.Error.OutOfProcessBufferStreamingNotSupported"
119 };
120 };
121
123 {
124 static constexpr const char* name
125 {
126 "mpris.Player.Error.InsufficientAppArmorPermissions"
127 };
128 };
129
131 {
132 static constexpr const char* name
133 {
134 "mpris.Player.Error.UriNotFound"
135 };
136 };
137 };
138
139 typedef std::map<std::string, core::dbus::types::Variant> Dictionary;
140
141 DBUS_CPP_METHOD_DEF(Next, Player)
142 DBUS_CPP_METHOD_DEF(Previous, Player)
143 DBUS_CPP_METHOD_DEF(Pause, Player)
144 DBUS_CPP_METHOD_DEF(PlayPause, Player)
145 DBUS_CPP_METHOD_DEF(Stop, Player)
146 DBUS_CPP_METHOD_DEF(Play, Player)
147 DBUS_CPP_METHOD_DEF(Seek, Player)
148 DBUS_CPP_METHOD_DEF(SetPosition, Player)
149 DBUS_CPP_METHOD_DEF(CreateVideoSink, Player)
150 DBUS_CPP_METHOD_DEF(Key, Player)
151 DBUS_CPP_METHOD_DEF(OpenUri, Player)
152 DBUS_CPP_METHOD_DEF(OpenUriExtended, Player)
153
154 struct Signals
155 {
156 DBUS_CPP_SIGNAL_DEF(Seeked, Player, std::int64_t)
157 DBUS_CPP_SIGNAL_DEF(AboutToFinish, Player, void)
158 DBUS_CPP_SIGNAL_DEF(EndOfStream, Player, void)
159 DBUS_CPP_SIGNAL_DEF(PlaybackStatusChanged, Player, core::ubuntu::media::Player::PlaybackStatus)
160 DBUS_CPP_SIGNAL_DEF(VideoDimensionChanged, Player, core::ubuntu::media::video::Dimensions)
161 DBUS_CPP_SIGNAL_DEF(Error, Player, core::ubuntu::media::Player::Error)
162 DBUS_CPP_SIGNAL_DEF(Buffering, Player, int)
163 };
164
166 {
167 DBUS_CPP_READABLE_PROPERTY_DEF(PlaybackStatus, Player, std::string)
168 DBUS_CPP_READABLE_PROPERTY_DEF(TypedPlaybackStatus, Player, core::ubuntu::media::Player::PlaybackStatus)
169 DBUS_CPP_WRITABLE_PROPERTY_DEF(TypedBackend, Player, core::ubuntu::media::AVBackend::Backend)
170 DBUS_CPP_WRITABLE_PROPERTY_DEF(LoopStatus, Player, std::string)
171 DBUS_CPP_WRITABLE_PROPERTY_DEF(TypedLoopStatus, Player, core::ubuntu::media::Player::LoopStatus)
172 DBUS_CPP_WRITABLE_PROPERTY_DEF(AudioStreamRole, Player, core::ubuntu::media::Player::AudioStreamRole)
173 DBUS_CPP_READABLE_PROPERTY_DEF(Orientation, Player, core::ubuntu::media::Player::Orientation)
174 DBUS_CPP_WRITABLE_PROPERTY_DEF(Lifetime, Player, core::ubuntu::media::Player::Lifetime)
175 DBUS_CPP_WRITABLE_PROPERTY_DEF(PlaybackRate, Player, double)
176 DBUS_CPP_WRITABLE_PROPERTY_DEF(Rate, Player, double)
177 DBUS_CPP_WRITABLE_PROPERTY_DEF(Shuffle, Player, bool)
178 DBUS_CPP_READABLE_PROPERTY_DEF(Metadata, Player, core::ubuntu::media::Track::MetaData)
179 DBUS_CPP_WRITABLE_PROPERTY_DEF(Volume, Player, double)
180 DBUS_CPP_READABLE_PROPERTY_DEF(Position, Player, std::int64_t)
181 DBUS_CPP_READABLE_PROPERTY_DEF(Duration, Player, std::int64_t)
182 DBUS_CPP_READABLE_PROPERTY_DEF(MinimumRate, Player, double)
183 DBUS_CPP_READABLE_PROPERTY_DEF(MaximumRate, Player, double)
184 DBUS_CPP_READABLE_PROPERTY_DEF(IsVideoSource, Player, bool)
185 DBUS_CPP_READABLE_PROPERTY_DEF(IsAudioSource, Player, bool)
186 DBUS_CPP_READABLE_PROPERTY_DEF(CanGoNext, Player, bool)
187 DBUS_CPP_READABLE_PROPERTY_DEF(CanGoPrevious, Player, bool)
188 DBUS_CPP_READABLE_PROPERTY_DEF(CanPlay, Player, bool)
189 DBUS_CPP_READABLE_PROPERTY_DEF(CanPause, Player, bool)
190 DBUS_CPP_READABLE_PROPERTY_DEF(CanSeek, Player, bool)
191 DBUS_CPP_READABLE_PROPERTY_DEF(CanControl, Player, bool)
192 };
193
194 // Convenience struct to create a skeleton implementation for org.mpris.MediaPlayer2.Player
195 struct Skeleton
196 {
197 static const std::vector<std::string>& the_empty_list_of_invalidated_properties()
198 {
199 static const std::vector<std::string> instance; return instance;
200 }
201
202 // Creation time options go here.
204 {
205 // The bus connection that should be used
206 core::dbus::Bus::Ptr bus;
207 // The dbus object that should implement org.mpris.MediaPlayer2
208 core::dbus::Object::Ptr object;
209
210 // Default values for properties
211 struct Defaults
212 {
213 Properties::CanPlay::ValueType can_play{false};
214 Properties::CanPause::ValueType can_pause{false};
215 Properties::CanSeek::ValueType can_seek{true};
216 Properties::CanControl::ValueType can_control{true};
217 Properties::CanGoNext::ValueType can_go_next{false};
218 Properties::CanGoPrevious::ValueType can_go_previous{false};
219 Properties::IsVideoSource::ValueType is_video_source{false};
220 Properties::IsAudioSource::ValueType is_audio_source{true};
221 Properties::PlaybackStatus::ValueType playback_status{PlaybackStatus::stopped};
222 Properties::TypedPlaybackStatus::ValueType typed_playback_status{core::ubuntu::media::Player::PlaybackStatus::null};
223 Properties::TypedBackend::ValueType typed_backend{core::ubuntu::media::AVBackend::Backend::none};
224 Properties::LoopStatus::ValueType loop_status{LoopStatus::none};
225 Properties::TypedLoopStatus::ValueType typed_loop_status{core::ubuntu::media::Player::LoopStatus::none};
226 Properties::PlaybackRate::ValueType playback_rate{1.f};
227 Properties::Shuffle::ValueType shuffle{false};
228 Properties::Metadata::ValueType meta_data{};
229 Properties::Volume::ValueType volume{0.f};
230 Properties::Position::ValueType position{0};
231 Properties::Duration::ValueType duration{0};
232 Properties::MinimumRate::ValueType minimum_rate{1.f};
233 Properties::MaximumRate::ValueType maximum_rate{1.f};
234 Properties::Orientation::ValueType orientation{core::ubuntu::media::Player::Orientation::rotate0};
236 };
237
241 {
242 configuration.object->template get_property<Properties::CanPlay>(),
243 configuration.object->template get_property<Properties::CanPause>(),
244 configuration.object->template get_property<Properties::CanSeek>(),
245 configuration.object->template get_property<Properties::CanControl>(),
246 configuration.object->template get_property<Properties::CanGoNext>(),
247 configuration.object->template get_property<Properties::CanGoPrevious>(),
248 configuration.object->template get_property<Properties::IsVideoSource>(),
249 configuration.object->template get_property<Properties::IsAudioSource>(),
250 configuration.object->template get_property<Properties::PlaybackStatus>(),
251 configuration.object->template get_property<Properties::TypedPlaybackStatus>(),
252 configuration.object->template get_property<Properties::TypedBackend>(),
253 configuration.object->template get_property<Properties::LoopStatus>(),
254 configuration.object->template get_property<Properties::TypedLoopStatus>(),
255 configuration.object->template get_property<Properties::AudioStreamRole>(),
256 configuration.object->template get_property<Properties::Orientation>(),
257 configuration.object->template get_property<Properties::Lifetime>(),
258 configuration.object->template get_property<Properties::PlaybackRate>(),
259 configuration.object->template get_property<Properties::Shuffle>(),
260 configuration.object->template get_property<Properties::Metadata>(),
261 configuration.object->template get_property<Properties::Volume>(),
262 configuration.object->template get_property<Properties::Position>(),
263 configuration.object->template get_property<Properties::Duration>(),
264 configuration.object->template get_property<Properties::MinimumRate>(),
265 configuration.object->template get_property<Properties::MaximumRate>()
266 },
267 signals
268 {
269 configuration.object->template get_signal<Signals::Seeked>(),
270 configuration.object->template get_signal<Signals::AboutToFinish>(),
271 configuration.object->template get_signal<Signals::EndOfStream>(),
272 configuration.object->template get_signal<Signals::PlaybackStatusChanged>(),
273 configuration.object->template get_signal<Signals::VideoDimensionChanged>(),
274 configuration.object->template get_signal<Signals::Error>(),
275 configuration.object->template get_signal<Signals::Buffering>(),
276 configuration.object->template get_signal<core::dbus::interfaces::Properties::Signals::PropertiesChanged>()
277 }
278 {
284 properties.can_go_previous->set(configuration.defaults.can_go_previous);
285 properties.is_video_source->set(configuration.defaults.is_video_source);
286 properties.is_audio_source->set(configuration.defaults.is_audio_source);
287 properties.playback_status->set(configuration.defaults.playback_status);
288 properties.typed_playback_status->set(configuration.defaults.typed_playback_status);
291 properties.typed_loop_status->set(configuration.defaults.typed_loop_status);
292 properties.audio_stream_role->set(core::ubuntu::media::Player::AudioStreamRole::multimedia);
293 properties.orientation->set(core::ubuntu::media::Player::Orientation::rotate0);
294 properties.lifetime->set(core::ubuntu::media::Player::Lifetime::normal);
297 properties.meta_data_for_current_track->set(configuration.defaults.meta_data);
300 properties.minimum_playback_rate->set(configuration.defaults.minimum_rate);
301 properties.maximum_playback_rate->set(configuration.defaults.maximum_rate);
302
303 // Make sure the Orientation Property gets sent over DBus to the client
304 properties.orientation->changed().connect([this](const core::ubuntu::media::Player::Orientation& o)
305 {
306 on_property_value_changed<Properties::Orientation>(o);
307 });
308
309 properties.position->changed().connect([this](std::int64_t position)
310 {
311 on_property_value_changed<Properties::Position>(position);
312 });
313
314 properties.duration->changed().connect([this](std::int64_t duration)
315 {
316 on_property_value_changed<Properties::Duration>(duration);
317 });
318
319 properties.playback_status->changed().connect([this](const std::string& status)
320 {
321 on_property_value_changed<Properties::PlaybackStatus>(status);
322 });
323
324 properties.loop_status->changed().connect([this](const std::string& status)
325 {
326 on_property_value_changed<Properties::LoopStatus>(status);
327 });
328
329 properties.shuffle->changed().connect([this](bool shuffle)
330 {
331 on_property_value_changed<Properties::Shuffle>(shuffle);
332 });
333
334 properties.can_play->changed().connect([this](bool can_play)
335 {
336 on_property_value_changed<Properties::CanPlay>(can_play);
337 });
338
339 properties.can_pause->changed().connect([this](bool can_pause)
340 {
341 on_property_value_changed<Properties::CanPause>(can_pause);
342 });
343
344 properties.can_go_next->changed().connect([this](bool can_go_next)
345 {
346 on_property_value_changed<Properties::CanGoNext>(can_go_next);
347 });
348
349 properties.can_go_previous->changed().connect([this](bool can_go_previous)
350 {
351 on_property_value_changed<Properties::CanGoPrevious>(can_go_previous);
352 });
353 }
354
355 template<typename Property>
356 void on_property_value_changed(const typename Property::ValueType& value)
357 {
358 Dictionary dict; dict[Property::name()] = dbus::types::Variant::encode(value);
359
360 signals.properties_changed->emit(std::make_tuple(
361 dbus::traits::Service<Player>::interface_name(),
362 dict,
364 }
365
367 {
368 Dictionary dict;
369 dict[Properties::CanPlay::name()] = dbus::types::Variant::encode(properties.can_play->get());
370 dict[Properties::CanPause::name()] = dbus::types::Variant::encode(properties.can_pause->get());
371 dict[Properties::CanSeek::name()] = dbus::types::Variant::encode(properties.can_seek->get());
372 dict[Properties::CanControl::name()] = dbus::types::Variant::encode(properties.can_control->get());
373 dict[Properties::CanGoNext::name()] = dbus::types::Variant::encode(properties.can_go_next->get());
374 dict[Properties::CanGoPrevious::name()] = dbus::types::Variant::encode(properties.can_go_previous->get());
375 dict[Properties::PlaybackStatus::name()] = dbus::types::Variant::encode(properties.playback_status->get());
376 dict[Properties::TypedPlaybackStatus::name()] = dbus::types::Variant::encode(properties.typed_playback_status->get());
377 dict[Properties::TypedBackend::name()] = dbus::types::Variant::encode(properties.typed_backend->get());
378 dict[Properties::LoopStatus::name()] = dbus::types::Variant::encode(properties.loop_status->get());
379 dict[Properties::TypedLoopStatus::name()] = dbus::types::Variant::encode(properties.typed_loop_status->get());
380 dict[Properties::AudioStreamRole::name()] = dbus::types::Variant::encode(properties.audio_stream_role->get());
381 dict[Properties::Orientation::name()] = dbus::types::Variant::encode(properties.orientation->get());
382 dict[Properties::Lifetime::name()] = dbus::types::Variant::encode(properties.lifetime->get());
383 dict[Properties::PlaybackRate::name()] = dbus::types::Variant::encode(properties.playback_rate->get());
384 dict[Properties::Shuffle::name()] = dbus::types::Variant::encode(properties.shuffle->get());
385 dict[Properties::Metadata::name()] = dbus::types::Variant::encode(properties.meta_data_for_current_track->get());
386 dict[Properties::Duration::name()] = dbus::types::Variant::encode(properties.duration->get());
387 dict[Properties::Position::name()] = dbus::types::Variant::encode(properties.position->get());
388 dict[Properties::MinimumRate::name()] = dbus::types::Variant::encode(properties.minimum_playback_rate->get());
389 dict[Properties::MaximumRate::name()] = dbus::types::Variant::encode(properties.maximum_playback_rate->get());
390
391 return dict;
392 }
393
394 // We just store creation time properties
396 // All the properties exposed to the bus go here.
397 struct
398 {
399 std::shared_ptr<core::dbus::Property<Properties::CanPlay>> can_play;
400 std::shared_ptr<core::dbus::Property<Properties::CanPause>> can_pause;
401 std::shared_ptr<core::dbus::Property<Properties::CanSeek>> can_seek;
402 std::shared_ptr<core::dbus::Property<Properties::CanControl>> can_control;
403 std::shared_ptr<core::dbus::Property<Properties::CanGoNext>> can_go_next;
404 std::shared_ptr<core::dbus::Property<Properties::CanGoPrevious>> can_go_previous;
405 std::shared_ptr<core::dbus::Property<Properties::IsVideoSource>> is_video_source;
406 std::shared_ptr<core::dbus::Property<Properties::IsAudioSource>> is_audio_source;
407
408 std::shared_ptr<core::dbus::Property<Properties::PlaybackStatus>> playback_status;
409 std::shared_ptr<core::dbus::Property<Properties::TypedPlaybackStatus>> typed_playback_status;
410 std::shared_ptr<core::dbus::Property<Properties::TypedBackend>> typed_backend;
411 std::shared_ptr<core::dbus::Property<Properties::LoopStatus>> loop_status;
412 std::shared_ptr<core::dbus::Property<Properties::TypedLoopStatus>> typed_loop_status;
413 std::shared_ptr<core::dbus::Property<Properties::AudioStreamRole>> audio_stream_role;
414 std::shared_ptr<core::dbus::Property<Properties::Orientation>> orientation;
415 std::shared_ptr<core::dbus::Property<Properties::Lifetime>> lifetime;
416 std::shared_ptr<core::dbus::Property<Properties::PlaybackRate>> playback_rate;
417 std::shared_ptr<core::dbus::Property<Properties::Shuffle>> shuffle;
418 std::shared_ptr<core::dbus::Property<Properties::Metadata>> meta_data_for_current_track;
419 std::shared_ptr<core::dbus::Property<Properties::Volume>> volume;
420 std::shared_ptr<core::dbus::Property<Properties::Position>> position;
421 std::shared_ptr<core::dbus::Property<Properties::Duration>> duration;
422 std::shared_ptr<core::dbus::Property<Properties::MinimumRate>> minimum_playback_rate;
423 std::shared_ptr<core::dbus::Property<Properties::MaximumRate>> maximum_playback_rate;
425
426 struct
427 {
428 typename core::dbus::Signal<Signals::Seeked, Signals::Seeked::ArgumentType>::Ptr seeked_to;
429 typename core::dbus::Signal<Signals::AboutToFinish, Signals::AboutToFinish::ArgumentType>::Ptr about_to_finish;
430 typename core::dbus::Signal<Signals::EndOfStream, Signals::EndOfStream::ArgumentType>::Ptr end_of_stream;
431 typename core::dbus::Signal<Signals::PlaybackStatusChanged, Signals::PlaybackStatusChanged::ArgumentType>::Ptr playback_status_changed;
432 typename core::dbus::Signal<Signals::VideoDimensionChanged, Signals::VideoDimensionChanged::ArgumentType>::Ptr video_dimension_changed;
433 typename core::dbus::Signal<Signals::Error, Signals::Error::ArgumentType>::Ptr error;
434 typename core::dbus::Signal<Signals::Buffering, Signals::Buffering::ArgumentType>::Ptr buffering_changed;
435
436 dbus::Signal
437 <
438 core::dbus::interfaces::Properties::Signals::PropertiesChanged,
439 core::dbus::interfaces::Properties::Signals::PropertiesChanged::ArgumentType
442 };
443};
444}
445
446#endif // MPRIS_PLAYER_H_
std::tuple< Height, Width > Dimensions
Height and Width of a video.
Definition: dimensions.h:139
static constexpr const char * name
Definition: player.h:133
static const char * from(core::ubuntu::media::Player::LoopStatus status)
Definition: player.h:65
static constexpr const char * none
Definition: player.h:80
static constexpr const char * track
Definition: player.h:81
static constexpr const char * playlist
Definition: player.h:82
static constexpr const char * paused
Definition: player.h:108
static const char * from(core::ubuntu::media::Player::PlaybackStatus status)
Definition: player.h:89
static constexpr const char * playing
Definition: player.h:107
static constexpr const char * stopped
Definition: player.h:109
Properties::IsVideoSource::ValueType is_video_source
Definition: player.h:219
Properties::TypedBackend::ValueType typed_backend
Definition: player.h:223
Properties::Shuffle::ValueType shuffle
Definition: player.h:227
Properties::CanPlay::ValueType can_play
Definition: player.h:213
Properties::Volume::ValueType volume
Definition: player.h:229
Properties::CanGoPrevious::ValueType can_go_previous
Definition: player.h:218
Properties::CanPause::ValueType can_pause
Definition: player.h:214
Properties::Metadata::ValueType meta_data
Definition: player.h:228
Properties::CanSeek::ValueType can_seek
Definition: player.h:215
Properties::Orientation::ValueType orientation
Definition: player.h:234
Properties::MinimumRate::ValueType minimum_rate
Definition: player.h:232
Properties::TypedLoopStatus::ValueType typed_loop_status
Definition: player.h:225
Properties::TypedPlaybackStatus::ValueType typed_playback_status
Definition: player.h:222
Properties::CanGoNext::ValueType can_go_next
Definition: player.h:217
Properties::MaximumRate::ValueType maximum_rate
Definition: player.h:233
Properties::Position::ValueType position
Definition: player.h:230
Properties::IsAudioSource::ValueType is_audio_source
Definition: player.h:220
Properties::Duration::ValueType duration
Definition: player.h:231
Properties::CanControl::ValueType can_control
Definition: player.h:216
Properties::LoopStatus::ValueType loop_status
Definition: player.h:224
Properties::PlaybackRate::ValueType playback_rate
Definition: player.h:226
Properties::PlaybackStatus::ValueType playback_status
Definition: player.h:221
struct mpris::Player::Skeleton::Configuration::Defaults defaults
core::dbus::Object::Ptr object
Definition: player.h:208
void on_property_value_changed(const typename Property::ValueType &value)
Definition: player.h:356
core::dbus::Signal< Signals::VideoDimensionChanged, Signals::VideoDimensionChanged::ArgumentType >::Ptr video_dimension_changed
Definition: player.h:432
std::shared_ptr< core::dbus::Property< Properties::PlaybackRate > > playback_rate
Definition: player.h:416
std::shared_ptr< core::dbus::Property< Properties::Lifetime > > lifetime
Definition: player.h:415
std::shared_ptr< core::dbus::Property< Properties::Metadata > > meta_data_for_current_track
Definition: player.h:418
std::shared_ptr< core::dbus::Property< Properties::TypedPlaybackStatus > > typed_playback_status
Definition: player.h:409
std::shared_ptr< core::dbus::Property< Properties::CanSeek > > can_seek
Definition: player.h:401
std::shared_ptr< core::dbus::Property< Properties::PlaybackStatus > > playback_status
Definition: player.h:408
struct mpris::Player::Skeleton::@15 properties
std::shared_ptr< core::dbus::Property< Properties::LoopStatus > > loop_status
Definition: player.h:411
std::shared_ptr< core::dbus::Property< Properties::CanGoNext > > can_go_next
Definition: player.h:403
std::shared_ptr< core::dbus::Property< Properties::Orientation > > orientation
Definition: player.h:414
std::shared_ptr< core::dbus::Property< Properties::Duration > > duration
Definition: player.h:421
core::dbus::Signal< Signals::Error, Signals::Error::ArgumentType >::Ptr error
Definition: player.h:433
core::dbus::Signal< Signals::Buffering, Signals::Buffering::ArgumentType >::Ptr buffering_changed
Definition: player.h:434
std::shared_ptr< core::dbus::Property< Properties::TypedLoopStatus > > typed_loop_status
Definition: player.h:412
std::shared_ptr< core::dbus::Property< Properties::MinimumRate > > minimum_playback_rate
Definition: player.h:422
std::shared_ptr< core::dbus::Property< Properties::IsVideoSource > > is_video_source
Definition: player.h:405
std::shared_ptr< core::dbus::Property< Properties::AudioStreamRole > > audio_stream_role
Definition: player.h:413
struct mpris::Player::Skeleton::@16 signals
std::shared_ptr< core::dbus::Property< Properties::MaximumRate > > maximum_playback_rate
Definition: player.h:423
std::shared_ptr< core::dbus::Property< Properties::CanControl > > can_control
Definition: player.h:402
core::dbus::Signal< Signals::PlaybackStatusChanged, Signals::PlaybackStatusChanged::ArgumentType >::Ptr playback_status_changed
Definition: player.h:431
static const std::vector< std::string > & the_empty_list_of_invalidated_properties()
Definition: player.h:197
core::dbus::Signal< Signals::Seeked, Signals::Seeked::ArgumentType >::Ptr seeked_to
Definition: player.h:428
std::shared_ptr< core::dbus::Property< Properties::IsAudioSource > > is_audio_source
Definition: player.h:406
Configuration configuration
Definition: player.h:395
std::shared_ptr< core::dbus::Property< Properties::Position > > position
Definition: player.h:420
core::dbus::Signal< Signals::EndOfStream, Signals::EndOfStream::ArgumentType >::Ptr end_of_stream
Definition: player.h:430
std::shared_ptr< core::dbus::Property< Properties::Volume > > volume
Definition: player.h:419
std::shared_ptr< core::dbus::Property< Properties::TypedBackend > > typed_backend
Definition: player.h:410
std::shared_ptr< core::dbus::Property< Properties::Shuffle > > shuffle
Definition: player.h:417
std::shared_ptr< core::dbus::Property< Properties::CanGoPrevious > > can_go_previous
Definition: player.h:404
std::shared_ptr< core::dbus::Property< Properties::CanPlay > > can_play
Definition: player.h:399
std::shared_ptr< core::dbus::Property< Properties::CanPause > > can_pause
Definition: player.h:400
dbus::Signal< core::dbus::interfaces::Properties::Signals::PropertiesChanged, core::dbus::interfaces::Properties::Signals::PropertiesChanged::ArgumentType >::Ptr properties_changed
Definition: player.h:440
Skeleton(const Configuration &configuration)
Definition: player.h:238
core::dbus::Signal< Signals::AboutToFinish, Signals::AboutToFinish::ArgumentType >::Ptr about_to_finish
Definition: player.h:429
Dictionary get_all_properties()
Definition: player.h:366
std::map< std::string, core::dbus::types::Variant > Dictionary
Definition: player.h:139
static const std::string & name()
Definition: player.h:55