aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/vorbis/decoder_vorbis.cpp
Commit message (Expand)AuthorAgeFilesLines
* coding style fixestrialuser022016-10-291-0/+1
* changed decoder apitrialuser022016-09-141-2/+2
* removed useless codetrialuser022016-08-011-10/+0
* using float output in the mpeg and vorbis pluginstrialuser022015-12-271-25/+14
* using unsigned char for raw datatrialuser022015-12-061-2/+2
* fixed vorbis plugintrialuser022014-10-061-1/+72
* fixed gcc 4.8 supporttrialuser022013-10-231-1/+1
* vorbis: added peak overflow supporttrialuser022013-10-161-0/+29
* fixed build regression (thanks to Motsyo Gennadi)trialuser022013-05-191-0/+1
* marking recycler as private apitrialuser022012-12-071-2/+1
* decoder api changes: removed StateHandler usagetrialuser022011-09-171-2/+1
* reapplied previous patchtrialuser022010-03-111-5/+5
* removed obsolete memberstrialuser022010-03-111-2/+2
* updated audio enginetrialuser022010-01-161-1/+1
* fixed vorbis stream metadatatrialuser022010-01-071-2/+3
* ogg vorbis plugin: added replay gain supporttrialuser022009-12-271-7/+1
* enabled vorbis plugin, fixed translationtrialuser022009-09-191-6/+6
* vorbis plugin: added support for composer and disc number tagstrialuser022009-08-081-0/+8
* fixed problem with qt4.4trialuser022009-08-041-2/+2
* mpeg plugin: fixed problem with small filestrialuser022009-07-191-3/+2
* new decoder api, disabled broken pluginstrialuser022009-07-101-177/+30
* fixed buildtrialuser022009-05-141-1/+1
* improved seeking accuracytrialuser022009-03-071-8/+8
* removed unused codetrialuser022008-11-231-31/+2
* cue sheet supporttrialuser022008-10-101-1/+1
* some api changes; enabled ogg vorbis plugintrialuser022008-09-261-63/+50
* include path changestrialuser022008-02-081-7/+7
* new directory structurevovanec2008-02-071-0/+425
ance) qFatal("StateHandler: only one instance is allowed"); m_instance = this; m_pl_manager = nullptr; m_core = nullptr; m_skips = 0; m_finishTimer = new QTimer(this); m_finishTimer->setSingleShot(true); m_finishTimer->setInterval(500); connect(m_finishTimer, SIGNAL(timeout()), SIGNAL(playbackFinished())); QTranslator *translator = new QTranslator(parent); QString locale = Qmmp::systemLanguageID(); translator->load(QString(":/libqmmpui_") + locale); qApp->installTranslator(translator); m_core = new SoundCore(this); m_settings = new QmmpUiSettings(this); m_pl_manager = new PlayListManager(this); connect(m_core, SIGNAL(nextTrackRequest()), SLOT(updateNextUrl())); connect(m_core, SIGNAL(finished()), SLOT(playNext())); connect(m_core, SIGNAL(stateChanged(Qmmp::State)), SLOT(processState(Qmmp::State))); connect(m_core, SIGNAL(trackInfoChanged()),SLOT(updateMetaData())); } MediaPlayer::~MediaPlayer() { m_instance = nullptr; } MediaPlayer* MediaPlayer::instance() { return m_instance; } PlayListManager *MediaPlayer::playListManager() { return m_pl_manager; } void MediaPlayer::play(qint64 offset) { m_pl_manager->currentPlayList()->doCurrentVisibleRequest(); if (m_core->state() == Qmmp::Paused) { m_core->pause(); return; } if (m_pl_manager->currentPlayList()->count() == 0) return; QString s = m_pl_manager->currentPlayList()->currentTrack()->path(); if (s.isEmpty()) { m_nextUrl.clear(); return; } if(m_nextUrl == s) { m_nextUrl.clear(); return; } m_core->play(s, false, offset); } void MediaPlayer::stop() { m_core->stop(); m_nextUrl.clear(); m_skips = 0; } void MediaPlayer::next() { bool playNext = m_core->state() != Qmmp::Stopped; stop(); if (m_pl_manager->currentPlayList()->next() && playNext) play(); } void MediaPlayer::previous() { bool playNext = m_core->state() != Qmmp::Stopped; stop(); if (m_pl_manager->currentPlayList()->previous() && playNext) play(); } void MediaPlayer::playNext() { if(m_settings->isRepeatableTrack()) { play(); return; } if(m_settings->isNoPlayListAdvance()) { stop(); return; } if (!m_pl_manager->currentPlayList()->next()) { stop(); return; } play(); } void MediaPlayer::updateNextUrl() { m_nextUrl.clear(); PlayListTrack *track = nullptr; if(m_settings->isRepeatableTrack()) track = m_pl_manager->currentPlayList()->currentTrack(); else if(!m_settings->isNoPlayListAdvance()) track = m_pl_manager->currentPlayList()->nextTrack(); if(track) { bool ok = m_core->play(track->path(), true); if(ok) { m_nextUrl = track->path(); qDebug("MediaPlayer: next track state: received"); } else qDebug("MediaPlayer: next track state: error"); } else qDebug("MediaPlayer: next track state: unknown"); } void MediaPlayer::processState(Qmmp::State state) { switch ((int) state) { case Qmmp::NormalError: m_core->stop(); m_nextUrl.clear(); if (m_skips <= m_pl_manager->currentPlayList()->count()) { m_skips++; playNext(); } break; case Qmmp::FatalError: m_core->stop(); m_nextUrl.clear(); break; case Qmmp::Playing: m_finishTimer->stop(); m_skips = 0; break; case Qmmp::Stopped: m_finishTimer->start(); break; default: ; } } void MediaPlayer::updateMetaData() { TrackInfo info = m_core->trackInfo(); qDebug("===== metadata ======"); qDebug("ARTIST = %s", qPrintable(info.value(Qmmp::ARTIST))); qDebug("TITLE = %s", qPrintable(info.value(Qmmp::TITLE))); qDebug("ALBUMARTIST = %s", qPrintable(info.value(Qmmp::ALBUMARTIST))); qDebug("ALBUM = %s", qPrintable(info.value(Qmmp::ALBUM))); qDebug("COMMENT = %s", qPrintable(info.value(Qmmp::COMMENT))); qDebug("GENRE = %s", qPrintable(info.value(Qmmp::GENRE))); qDebug("YEAR = %s", qPrintable(info.value(Qmmp::YEAR))); qDebug("TRACK = %s", qPrintable(info.value(Qmmp::TRACK))); qDebug("DISCNUMBER = %s", qPrintable(info.value(Qmmp::DISCNUMBER))); qDebug("---------------------"); qDebug("BITRATE = %s", qPrintable(info.value(Qmmp::BITRATE))); qDebug("SAMPLERATE = %s", qPrintable(info.value(Qmmp::SAMPLERATE))); qDebug("CHANNELS = %s", qPrintable(info.value(Qmmp::CHANNELS))); qDebug("BITS_PER_SAMPLE = %s", qPrintable(info.value(Qmmp::BITS_PER_SAMPLE))); qDebug("FORMAT_NAME = %s", qPrintable(info.value(Qmmp::FORMAT_NAME))); qDebug("DECODER = %s", qPrintable(info.value(Qmmp::DECODER))); qDebug("FILE_SIZE = %s", qPrintable(info.value(Qmmp::FILE_SIZE))); qDebug("---------------------"); qDebug("REPLAYGAIN_TRACK_GAIN = %f", info.value(Qmmp::REPLAYGAIN_TRACK_GAIN)); qDebug("REPLAYGAIN_TRACK_PEAK = %f", info.value(Qmmp::REPLAYGAIN_TRACK_PEAK)); qDebug("REPLAYGAIN_ALBUM_GAIN = %f", info.value(Qmmp::REPLAYGAIN_ALBUM_GAIN)); qDebug("REPLAYGAIN_ALBUM_PEAK = %f", info.value(Qmmp::REPLAYGAIN_ALBUM_PEAK)); qDebug("---------------------"); qDebug("DURATION = %lld", info.duration()); qDebug("== end of metadata =="); PlayListModel *pl = m_pl_manager->currentPlayList(); if (pl->currentTrack() && pl->currentTrack()->path() == info.path()) { pl->currentTrack()->updateMetaData(&info); pl->updateMetaData(); } }