Changeset View
Changeset View
Standalone View
Standalone View
src/audiowrapper_libvlc.cpp
Show All 11 Lines | |||||
12 | * Lesser General Public License for more details. | 12 | * Lesser General Public License for more details. | ||
13 | * | 13 | * | ||
14 | * You should have received a copy of the GNU Lesser General Public License | 14 | * You should have received a copy of the GNU Lesser General Public License | ||
15 | * along with this program. If not, see <https://www.gnu.org/licenses/>. | 15 | * along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
16 | */ | 16 | */ | ||
17 | 17 | | |||
18 | #include "audiowrapper.h" | 18 | #include "audiowrapper.h" | ||
19 | 19 | | |||
20 | #include "vlcLogging.h" | ||||
21 | | ||||
20 | #include <QTimer> | 22 | #include <QTimer> | ||
21 | #include <QAudio> | 23 | #include <QAudio> | ||
22 | #include <QDir> | 24 | #include <QDir> | ||
23 | 25 | | |||
24 | #if defined Q_OS_WIN | 26 | #if defined Q_OS_WIN | ||
25 | 27 | | |||
26 | #include <basetsd.h> | 28 | #include <basetsd.h> | ||
27 | typedef SSIZE_T ssize_t; | 29 | typedef SSIZE_T ssize_t; | ||
▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Line(s) | 100 | { | |||
99 | d->mParent = this; | 101 | d->mParent = this; | ||
100 | d->mInstance = libvlc_new(0, nullptr); | 102 | d->mInstance = libvlc_new(0, nullptr); | ||
101 | libvlc_set_user_agent(d->mInstance, "elisa", "Elisa Music Player"); | 103 | libvlc_set_user_agent(d->mInstance, "elisa", "Elisa Music Player"); | ||
102 | libvlc_set_app_id(d->mInstance, "org.kde.elisa", "0.3.80", "elisa"); | 104 | libvlc_set_app_id(d->mInstance, "org.kde.elisa", "0.3.80", "elisa"); | ||
103 | 105 | | |||
104 | d->mPlayer = libvlc_media_player_new(d->mInstance); | 106 | d->mPlayer = libvlc_media_player_new(d->mInstance); | ||
105 | 107 | | |||
106 | if (!d->mPlayer) { | 108 | if (!d->mPlayer) { | ||
107 | qDebug() << "AudioWrapper::AudioWrapper" << "failed creating player" << libvlc_errmsg(); | 109 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapper::AudioWrapper" << "failed creating player" << libvlc_errmsg(); | ||
108 | return; | 110 | return; | ||
109 | } | 111 | } | ||
110 | 112 | | |||
111 | d->mPlayerEventManager = libvlc_media_player_event_manager(d->mPlayer); | 113 | d->mPlayerEventManager = libvlc_media_player_event_manager(d->mPlayer); | ||
112 | 114 | | |||
113 | libvlc_event_attach(d->mPlayerEventManager, libvlc_MediaPlayerOpening, &vlc_callback, d.get()); | 115 | libvlc_event_attach(d->mPlayerEventManager, libvlc_MediaPlayerOpening, &vlc_callback, d.get()); | ||
114 | libvlc_event_attach(d->mPlayerEventManager, libvlc_MediaPlayerBuffering, &vlc_callback, d.get()); | 116 | libvlc_event_attach(d->mPlayerEventManager, libvlc_MediaPlayerBuffering, &vlc_callback, d.get()); | ||
115 | libvlc_event_attach(d->mPlayerEventManager, libvlc_MediaPlayerPlaying, &vlc_callback, d.get()); | 117 | libvlc_event_attach(d->mPlayerEventManager, libvlc_MediaPlayerPlaying, &vlc_callback, d.get()); | ||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Line(s) | 218 | { | |||
221 | //auto realVolume = static_cast<qreal>(QAudio::convertVolume(volume / 100.0, QAudio::LogarithmicVolumeScale, QAudio::LinearVolumeScale)); | 223 | //auto realVolume = static_cast<qreal>(QAudio::convertVolume(volume / 100.0, QAudio::LogarithmicVolumeScale, QAudio::LinearVolumeScale)); | ||
222 | libvlc_audio_set_volume(d->mPlayer, qRound(volume)); | 224 | libvlc_audio_set_volume(d->mPlayer, qRound(volume)); | ||
223 | } | 225 | } | ||
224 | 226 | | |||
225 | void AudioWrapper::setSource(const QUrl &source) | 227 | void AudioWrapper::setSource(const QUrl &source) | ||
226 | { | 228 | { | ||
227 | d->mMedia = libvlc_media_new_path(d->mInstance, QDir::toNativeSeparators(source.toLocalFile()).toUtf8().constData()); | 229 | d->mMedia = libvlc_media_new_path(d->mInstance, QDir::toNativeSeparators(source.toLocalFile()).toUtf8().constData()); | ||
228 | if (!d->mMedia) { | 230 | if (!d->mMedia) { | ||
229 | qDebug() << "AudioWrapper::setSource" | 231 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapper::setSource" | ||
230 | << "failed creating media" | 232 | << "failed creating media" | ||
231 | << libvlc_errmsg() | 233 | << libvlc_errmsg() | ||
232 | << QDir::toNativeSeparators(source.toLocalFile()).toUtf8().constData(); | 234 | << QDir::toNativeSeparators(source.toLocalFile()).toUtf8().constData(); | ||
233 | 235 | | |||
234 | d->mMedia = libvlc_media_new_path(d->mInstance, QDir::toNativeSeparators(source.toLocalFile()).toLatin1().constData()); | 236 | d->mMedia = libvlc_media_new_path(d->mInstance, QDir::toNativeSeparators(source.toLocalFile()).toLatin1().constData()); | ||
235 | if (!d->mMedia) { | 237 | if (!d->mMedia) { | ||
236 | qDebug() << "AudioWrapper::setSource" | 238 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapper::setSource" | ||
237 | << "failed creating media" | 239 | << "failed creating media" | ||
238 | << libvlc_errmsg() | 240 | << libvlc_errmsg() | ||
239 | << QDir::toNativeSeparators(source.toLocalFile()).toLatin1().constData(); | 241 | << QDir::toNativeSeparators(source.toLocalFile()).toLatin1().constData(); | ||
240 | return; | 242 | return; | ||
241 | } | 243 | } | ||
242 | } | 244 | } | ||
243 | 245 | | |||
244 | libvlc_media_player_set_media(d->mPlayer, d->mMedia); | 246 | libvlc_media_player_set_media(d->mPlayer, d->mMedia); | ||
Show All 12 Lines | 258 | { | |||
257 | if (!d->mPlayer) { | 259 | if (!d->mPlayer) { | ||
258 | return; | 260 | return; | ||
259 | } | 261 | } | ||
260 | 262 | | |||
261 | if (d->mMediaDuration == -1 || d->mMediaDuration == 0) { | 263 | if (d->mMediaDuration == -1 || d->mMediaDuration == 0) { | ||
262 | if (!d->mHasSavedPosition) { | 264 | if (!d->mHasSavedPosition) { | ||
263 | d->mHasSavedPosition = true; | 265 | d->mHasSavedPosition = true; | ||
264 | d->mSavedPosition = position; | 266 | d->mSavedPosition = position; | ||
265 | qDebug() << "AudioWrapper::setPosition" << "restore old position" << d->mSavedPosition; | 267 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapper::setPosition" << "restore old position" << d->mSavedPosition; | ||
266 | } | 268 | } | ||
267 | return; | 269 | return; | ||
268 | } | 270 | } | ||
269 | 271 | | |||
270 | libvlc_media_player_set_position(d->mPlayer, static_cast<float>(position) / d->mMediaDuration); | 272 | libvlc_media_player_set_position(d->mPlayer, static_cast<float>(position) / d->mMediaDuration); | ||
271 | } | 273 | } | ||
272 | 274 | | |||
273 | void AudioWrapper::play() | 275 | void AudioWrapper::play() | ||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Line(s) | |||||
379 | 381 | | |||
380 | void AudioWrapperPrivate::vlcEventCallback(const struct libvlc_event_t *p_event) | 382 | void AudioWrapperPrivate::vlcEventCallback(const struct libvlc_event_t *p_event) | ||
381 | { | 383 | { | ||
382 | const auto eventType = static_cast<libvlc_event_e>(p_event->type); | 384 | const auto eventType = static_cast<libvlc_event_e>(p_event->type); | ||
383 | 385 | | |||
384 | switch(eventType) | 386 | switch(eventType) | ||
385 | { | 387 | { | ||
386 | case libvlc_MediaPlayerOpening: | 388 | case libvlc_MediaPlayerOpening: | ||
387 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerOpening"; | 389 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerOpening"; | ||
388 | signalMediaStatusChange(QMediaPlayer::LoadedMedia); | 390 | signalMediaStatusChange(QMediaPlayer::LoadedMedia); | ||
389 | break; | 391 | break; | ||
390 | case libvlc_MediaPlayerBuffering: | 392 | case libvlc_MediaPlayerBuffering: | ||
391 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerBuffering"; | 393 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerBuffering"; | ||
392 | signalMediaStatusChange(QMediaPlayer::BufferedMedia); | 394 | signalMediaStatusChange(QMediaPlayer::BufferedMedia); | ||
393 | break; | 395 | break; | ||
394 | case libvlc_MediaPlayerPlaying: | 396 | case libvlc_MediaPlayerPlaying: | ||
395 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPlaying"; | 397 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPlaying"; | ||
396 | signalPlaybackChange(QMediaPlayer::PlayingState); | 398 | signalPlaybackChange(QMediaPlayer::PlayingState); | ||
397 | break; | 399 | break; | ||
398 | case libvlc_MediaPlayerPaused: | 400 | case libvlc_MediaPlayerPaused: | ||
399 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPaused"; | 401 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPaused"; | ||
400 | signalPlaybackChange(QMediaPlayer::PausedState); | 402 | signalPlaybackChange(QMediaPlayer::PausedState); | ||
401 | break; | 403 | break; | ||
402 | case libvlc_MediaPlayerStopped: | 404 | case libvlc_MediaPlayerStopped: | ||
403 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerStopped"; | 405 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerStopped"; | ||
404 | signalPlaybackChange(QMediaPlayer::StoppedState); | 406 | signalPlaybackChange(QMediaPlayer::StoppedState); | ||
405 | break; | 407 | break; | ||
406 | case libvlc_MediaPlayerEndReached: | 408 | case libvlc_MediaPlayerEndReached: | ||
407 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerEndReached"; | 409 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerEndReached"; | ||
408 | signalMediaStatusChange(QMediaPlayer::BufferedMedia); | 410 | signalMediaStatusChange(QMediaPlayer::BufferedMedia); | ||
409 | signalMediaStatusChange(QMediaPlayer::NoMedia); | 411 | signalMediaStatusChange(QMediaPlayer::NoMedia); | ||
410 | signalMediaStatusChange(QMediaPlayer::EndOfMedia); | 412 | signalMediaStatusChange(QMediaPlayer::EndOfMedia); | ||
411 | mediaIsEnded(); | 413 | mediaIsEnded(); | ||
412 | break; | 414 | break; | ||
413 | case libvlc_MediaPlayerEncounteredError: | 415 | case libvlc_MediaPlayerEncounteredError: | ||
414 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerEncounteredError"; | 416 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerEncounteredError"; | ||
415 | signalErrorChange(QMediaPlayer::ResourceError); | 417 | signalErrorChange(QMediaPlayer::ResourceError); | ||
416 | mediaIsEnded(); | 418 | mediaIsEnded(); | ||
417 | signalMediaStatusChange(QMediaPlayer::InvalidMedia); | 419 | signalMediaStatusChange(QMediaPlayer::InvalidMedia); | ||
418 | break; | 420 | break; | ||
419 | case libvlc_MediaPlayerPositionChanged: | 421 | case libvlc_MediaPlayerPositionChanged: | ||
420 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPositionChanged"; | 422 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPositionChanged"; | ||
421 | signalPositionChange(p_event->u.media_player_position_changed.new_position); | 423 | signalPositionChange(p_event->u.media_player_position_changed.new_position); | ||
422 | break; | 424 | break; | ||
423 | case libvlc_MediaPlayerSeekableChanged: | 425 | case libvlc_MediaPlayerSeekableChanged: | ||
424 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerSeekableChanged"; | 426 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerSeekableChanged"; | ||
425 | signalSeekableChange(p_event->u.media_player_seekable_changed.new_seekable); | 427 | signalSeekableChange(p_event->u.media_player_seekable_changed.new_seekable); | ||
426 | break; | 428 | break; | ||
427 | case libvlc_MediaPlayerLengthChanged: | 429 | case libvlc_MediaPlayerLengthChanged: | ||
428 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerLengthChanged"; | 430 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerLengthChanged"; | ||
429 | signalDurationChange(p_event->u.media_player_length_changed.new_length); | 431 | signalDurationChange(p_event->u.media_player_length_changed.new_length); | ||
430 | if (mHasSavedPosition) { | 432 | if (mHasSavedPosition) { | ||
431 | mParent->setPosition(mSavedPosition); | 433 | mParent->setPosition(mSavedPosition); | ||
432 | mHasSavedPosition = false; | 434 | mHasSavedPosition = false; | ||
433 | } | 435 | } | ||
434 | break; | 436 | break; | ||
435 | case libvlc_MediaPlayerMuted: | 437 | case libvlc_MediaPlayerMuted: | ||
436 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerMuted"; | 438 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerMuted"; | ||
437 | signalMutedChange(true); | 439 | signalMutedChange(true); | ||
438 | break; | 440 | break; | ||
439 | case libvlc_MediaPlayerUnmuted: | 441 | case libvlc_MediaPlayerUnmuted: | ||
440 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerUnmuted"; | 442 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerUnmuted"; | ||
441 | signalMutedChange(false); | 443 | signalMutedChange(false); | ||
442 | break; | 444 | break; | ||
443 | case libvlc_MediaPlayerAudioVolume: | 445 | case libvlc_MediaPlayerAudioVolume: | ||
444 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerAudioVolume"; | 446 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerAudioVolume"; | ||
445 | signalVolumeChange(qRound(p_event->u.media_player_audio_volume.volume * 100)); | 447 | signalVolumeChange(qRound(p_event->u.media_player_audio_volume.volume * 100)); | ||
446 | break; | 448 | break; | ||
447 | case libvlc_MediaPlayerAudioDevice: | 449 | case libvlc_MediaPlayerAudioDevice: | ||
448 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerAudioDevice"; | 450 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerAudioDevice"; | ||
449 | break; | 451 | break; | ||
450 | default: | 452 | default: | ||
451 | qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "eventType" << eventType; | 453 | qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "eventType" << eventType; | ||
452 | break; | 454 | break; | ||
453 | } | 455 | } | ||
454 | } | 456 | } | ||
455 | 457 | | |||
456 | void AudioWrapperPrivate::mediaIsEnded() | 458 | void AudioWrapperPrivate::mediaIsEnded() | ||
457 | { | 459 | { | ||
458 | libvlc_media_release(mMedia); | 460 | libvlc_media_release(mMedia); | ||
459 | mMedia = nullptr; | 461 | mMedia = nullptr; | ||
▲ Show 20 Lines • Show All 94 Lines • Show Last 20 Lines |