Music Hub ..
A session-wide music playback service
Loading...
Searching...
No Matches
engine.h
Go to the documentation of this file.
1/*
2 * Copyright © 2013-2014 Canonical Ltd.
3 * Copyright © 2022 UBports Foundation.
4 *
5 * Contact: Alberto Mardegan <mardy@users.sourceforge.net>
6 *
7 * This program is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License version 3,
9 * as published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * Authored by: Thomas Voß <thomas.voss@canonical.com>
20 * Jim Hodapp <jim.hodapp@canonical.com>
21 */
22#ifndef LOMIRI_MEDIAHUBSERVICE_ENGINE_H
23#define LOMIRI_MEDIAHUBSERVICE_ENGINE_H
24
25#include "player.h"
26#include "track.h"
27
28#include <QObject>
29#include <QPair>
30#include <QSharedPointer>
31#include <QSize>
32#include <QUrl>
33#include <QVariantMap>
34
35#include <chrono>
36
37class QSize;
38
39namespace lomiri
40{
41namespace MediaHubService
42{
43class EnginePrivate;
44class Engine: public QObject
45{
46 Q_OBJECT
47
48public:
49
59 Q_ENUM(State)
60
62 {
63 public:
64 typedef std::function<void(const QVariantMap &)> Callback;
65 virtual void meta_data_for_track_with_uri(const QUrl &uri,
66 const Callback &cb) = 0;
67
68 protected:
69 MetaDataExtractor() = default;
71 virtual ~MetaDataExtractor() = default;
72
74 };
75
76 Engine(QObject *parent = nullptr);
77 virtual ~Engine();
78
79 const QSharedPointer<MetaDataExtractor> &metadataExtractor() const;
80
81 virtual bool open_resource_for_uri(const QUrl &uri, bool do_pipeline_reset) = 0;
82 virtual bool open_resource_for_uri(const QUrl &uri, const Player::HeadersType&) = 0;
83 // Throws lomiri::MediaHubService::Player::Error::OutOfProcessBufferStreamingNotSupported if the implementation does not
84 // support this feature.
85 virtual void create_video_sink(uint32_t texture_id) = 0;
86
87 virtual bool play() = 0;
88 virtual bool stop() = 0;
89 virtual bool pause() = 0;
90 virtual bool seek_to(const std::chrono::microseconds& ts) = 0;
91
92 State state() const;
93
94 bool isVideoSource() const;
95 bool isAudioSource() const;
96
97 virtual uint64_t position() const = 0;
98 virtual uint64_t duration() const = 0;
99
102
105
107 QPair<QUrl,Track::MetaData> trackMetadata() const;
109 QSize videoDimension() const;
110
111 void setVolume(double volume);
112 double volume() const;
113
114 virtual void reset() = 0;
115
116Q_SIGNALS:
118
121
122 // TODO These two are actually not emitted, decide whether to remove them
125
127
129
131 void seekedTo(uint64_t offset);
138
139protected:
140 void setMetadataExtractor(const QSharedPointer<MetaDataExtractor> &extractor);
141 void setState(State state);
142 void setIsVideoSource(bool value);
143 void setIsAudioSource(bool value);
145 void setTrackMetadata(const QPair<QUrl,Track::MetaData> &metadata);
146 void setVideoDimension(const QSize &size);
148
151 virtual void doSetVolume(double volume) = 0;
152
153private:
154 Q_DECLARE_PRIVATE(Engine)
155 QScopedPointer<EnginePrivate> d_ptr;
156};
157
158}
159}
160
161#endif // LOMIRI_MEDIAHUBSERVICE_ENGINE_H
MetaDataExtractor & operator=(const MetaDataExtractor &)=delete
MetaDataExtractor(const MetaDataExtractor &)=delete
std::function< void(const QVariantMap &)> Callback
Definition engine.h:64
virtual void meta_data_for_track_with_uri(const QUrl &uri, const Callback &cb)=0
Player::Lifetime lifetime() const
Definition engine.cpp:171
void setPlaybackStatus(Player::PlaybackStatus status)
Definition engine.cpp:190
virtual uint64_t position() const =0
Engine(QObject *parent=nullptr)
Definition engine.cpp:73
virtual bool open_resource_for_uri(const QUrl &uri, const Player::HeadersType &)=0
void setState(State state)
Definition engine.cpp:93
void setVideoDimension(const QSize &size)
Definition engine.cpp:204
void setLifetime(Player::Lifetime lifetime)
Definition engine.cpp:163
QPair< QUrl, Track::MetaData > trackMetadata() const
Definition engine.cpp:184
virtual void doSetLifetime(Player::Lifetime lifetime)=0
void setIsAudioSource(bool value)
Definition engine.cpp:121
void setTrackMetadata(const QPair< QUrl, Track::MetaData > &metadata)
Definition engine.cpp:177
virtual void doSetVolume(double volume)=0
void seekedTo(uint64_t offset)
virtual void create_video_sink(uint32_t texture_id)=0
virtual bool seek_to(const std::chrono::microseconds &ts)=0
void setMetadataExtractor(const QSharedPointer< MetaDataExtractor > &extractor)
Definition engine.cpp:81
void setIsVideoSource(bool value)
Definition engine.cpp:107
virtual void doSetAudioStreamRole(Player::AudioStreamRole role)=0
const QSharedPointer< MetaDataExtractor > & metadataExtractor() const
Definition engine.cpp:87
void setAudioStreamRole(Player::AudioStreamRole role)
Definition engine.cpp:149
void setOrientation(Player::Orientation o)
Definition engine.cpp:135
Player::AudioStreamRole audioStreamRole() const
Definition engine.cpp:157
virtual bool open_resource_for_uri(const QUrl &uri, bool do_pipeline_reset)=0
void errorOccurred(Player::Error error)
void setVolume(double volume)
Definition engine.cpp:218
Player::PlaybackStatus playbackStatus() const
Definition engine.cpp:198
virtual uint64_t duration() const =0
Player::Orientation orientation() const
Definition engine.cpp:143
QMap< QString, QString > HeadersType
Definition player.h:57