40 gst_init(
nullptr,
nullptr);
60 media::Track::MetaData md;
62 track_meta_data.set(std::make_tuple(playbin.uri(), md));
67 playbin.set_volume(new_volume.value);
72 playbin.set_audio_stream_role(new_audio_role);
84 state = Engine::State::ready;
95 client_disconnected();
105 video_dimension_changed(height, width);
111 orientation(
media::Player::Orientation::rotate0),
112 is_video_source(false),
113 is_audio_source(false),
114 about_to_finish_connection(
115 playbin.signals.about_to_finish.connect(
119 on_state_changed_connection(
120 playbin.signals.on_state_changed.connect(
122 &
Private::on_playbin_state_changed,
124 std::placeholders::_1))),
125 on_tag_available_connection(
126 playbin.signals.on_tag_available.connect(
130 std::placeholders::_1))),
131 on_volume_changed_connection(
132 volume.changed().connect(
136 std::placeholders::_1))),
137 on_audio_stream_role_changed_connection(
138 audio_role.changed().connect(
140 &
Private::on_audio_stream_role_changed,
142 std::placeholders::_1))),
143 on_orientation_changed_connection(
144 playbin.signals.on_orientation_changed.connect(
146 &
Private::on_orientation_changed,
148 std::placeholders::_1))),
149 on_seeked_to_connection(
150 playbin.signals.on_seeked_to.connect(
154 std::placeholders::_1))),
155 client_disconnected_connection(
156 playbin.signals.client_disconnected.connect(
158 &
Private::on_client_disconnected,
160 on_end_of_stream_connection(
161 playbin.signals.on_end_of_stream.connect(
165 on_video_dimension_changed_connection(
166 playbin.signals.on_add_frame_dimension.connect(
168 &
Private::on_video_dimension_changed,
170 std::placeholders::_1,
171 std::placeholders::_2)))
180 core::Property<Engine::State>
state;
181 core::Property<std::tuple<media::Track::UriType, media::Track::MetaData>>
track_meta_data;
184 core::Property<media::Engine::Volume>
volume;
211 cout <<
"Creating a new Engine instance in " << __PRETTY_FUNCTION__ << endl;
212 d->state = media::Engine::State::ready;
222 return d->meta_data_extractor;
232 d->playbin.set_uri(uri);
238 d->playbin.create_video_sink(texture_id);
243 auto result = d->playbin.set_state_and_wait(GST_STATE_PLAYING);
247 d->state = media::Engine::State::playing;
248 cout <<
"play" << endl;
249 d->playback_status_changed(media::Player::PlaybackStatus::playing);
258 if (d->state == media::Engine::State::stopped)
261 auto result = d->playbin.set_state_and_wait(GST_STATE_NULL);
265 d->state = media::Engine::State::stopped;
266 cout <<
"stop" << endl;
267 d->playback_status_changed(media::Player::PlaybackStatus::stopped);
275 auto result = d->playbin.set_state_and_wait(GST_STATE_PAUSED);
279 d->state = media::Engine::State::paused;
280 cout <<
"pause" << endl;
281 d->playback_status_changed(media::Player::PlaybackStatus::paused);
289 return d->playbin.seek(ts);
295 if (type == gstreamer::Playbin::MediaFileType::MEDIA_FILE_TYPE_VIDEO)
296 d->is_video_source.set(
true);
298 d->is_video_source.set(
false);
300 return d->is_video_source;
306 if (type == gstreamer::Playbin::MediaFileType::MEDIA_FILE_TYPE_AUDIO)
307 d->is_audio_source.set(
true);
309 d->is_audio_source.set(
false);
311 return d->is_audio_source;
316 d->position.set(d->playbin.position());
322 d->duration.set(d->playbin.duration());
338 return d->audio_role;
343 return d->audio_role;
348 return d->orientation;
351 const core::Property<std::tuple<media::Track::UriType, media::Track::MetaData>>&
354 return d->track_meta_data;
359 return d->about_to_finish;
369 return d->client_disconnected;
374 return d->end_of_stream;
379 return d->playback_status_changed;
384 return d->video_dimension_changed;
void on_tag_available(const gstreamer::Bus::Message::Detail::Tag &tag)
core::ScopedConnection on_state_changed_connection
bool open_resource_for_uri(const core::ubuntu::media::Track::UriType &uri)
core::ScopedConnection on_video_dimension_changed_connection
const core::Property< core::ubuntu::media::Engine::Volume > & volume() const
core::Property< bool > is_video_source
const core::Signal< core::ubuntu::media::Player::PlaybackStatus > & playback_status_changed_signal() const
const core::Property< core::ubuntu::media::Player::AudioStreamRole > & audio_stream_role() const
const core::Property< bool > & is_video_source() const
void on_video_dimension_changed(uint32_t height, uint32_t width)
const core::Signal< void > & client_disconnected_signal() const
core::Signal< void > end_of_stream
void on_seeked_to(uint64_t value)
void on_about_to_finish()
const core::Property< State > & state() const
core::ScopedConnection on_seeked_to_connection
core::ScopedConnection on_end_of_stream_connection
void on_orientation_changed(const media::Player::Orientation &o)
gstreamer::Playbin playbin
bool seek_to(const std::chrono::microseconds &ts)
const core::Signal< uint64_t > & seeked_to_signal() const
struct gstreamer::Init init
void create_video_sink(uint32_t texture_id)
const core::Property< std::tuple< core::ubuntu::media::Track::UriType, core::ubuntu::media::Track::MetaData > > & track_meta_data() const
core::ScopedConnection client_disconnected_connection
const core::Signal< uint32_t, uint32_t > & video_dimension_changed_signal() const
const core::Property< bool > & is_audio_source() const
void on_volume_changed(const media::Engine::Volume &new_volume)
const core::Property< uint64_t > & duration() const
core::ScopedConnection on_volume_changed_connection
const core::Signal< void > & about_to_finish_signal() const
core::Property< media::Player::Orientation > orientation
core::Property< media::Player::AudioStreamRole > audio_role
core::Signal< uint32_t, uint32_t > video_dimension_changed
const core::Signal< void > & end_of_stream_signal() const
core::Signal< void > client_disconnected
core::Signal< uint64_t > seeked_to
std::shared_ptr< Engine::MetaDataExtractor > meta_data_extractor
void on_playbin_state_changed(const gstreamer::Bus::Message::Detail::StateChanged &state_change)
core::ScopedConnection on_tag_available_connection
const std::shared_ptr< MetaDataExtractor > & meta_data_extractor() const
core::Property< media::Engine::Volume > volume
core::ScopedConnection about_to_finish_connection
core::Property< Engine::State > state
const core::Property< core::ubuntu::media::Player::Orientation > & orientation() const
core::Property< uint64_t > position
core::Property< std::tuple< media::Track::UriType, media::Track::MetaData > > track_meta_data
core::Signal< void > about_to_finish
core::Signal< media::Player::PlaybackStatus > playback_status_changed
const core::Property< uint64_t > & position() const
core::ScopedConnection on_orientation_changed_connection
void on_client_disconnected()
void on_audio_stream_role_changed(const media::Player::AudioStreamRole &new_audio_role)
core::Property< bool > is_audio_source
core::Property< uint64_t > duration
core::ScopedConnection on_audio_stream_role_changed_connection