Changeset View
Changeset View
Standalone View
Standalone View
core/audioplayer.cpp
Show First 20 Lines • Show All 81 Lines • ▼ Show 20 Line(s) | 57 | public: | |||
---|---|---|---|---|---|
82 | QBuffer * m_buffer; | 82 | QBuffer * m_buffer; | ||
83 | SoundInfo m_info; | 83 | SoundInfo m_info; | ||
84 | }; | 84 | }; | ||
85 | 85 | | |||
86 | 86 | | |||
87 | AudioPlayerPrivate::AudioPlayerPrivate( AudioPlayer * qq ) | 87 | AudioPlayerPrivate::AudioPlayerPrivate( AudioPlayer * qq ) | ||
88 | : q( qq ), m_state( AudioPlayer::StoppedState ) | 88 | : q( qq ), m_state( AudioPlayer::StoppedState ) | ||
89 | { | 89 | { | ||
90 | QObject::connect( &m_mapper, SIGNAL(mapped(int)), q, SLOT(finished(int)) ); | | |||
91 | } | 90 | } | ||
92 | 91 | | |||
93 | AudioPlayerPrivate::~AudioPlayerPrivate() | 92 | AudioPlayerPrivate::~AudioPlayerPrivate() | ||
94 | { | 93 | { | ||
95 | stopPlayings(); | 94 | stopPlayings(); | ||
96 | } | 95 | } | ||
97 | 96 | | |||
98 | int AudioPlayerPrivate::newId() const | 97 | int AudioPlayerPrivate::newId() const | ||
Show All 24 Lines | 111 | { | |||
123 | { | 122 | { | ||
124 | case Sound::External: | 123 | case Sound::External: | ||
125 | { | 124 | { | ||
126 | QString url = si.sound->url(); | 125 | QString url = si.sound->url(); | ||
127 | qCDebug(OkularCoreDebug) << "External," << url; | 126 | qCDebug(OkularCoreDebug) << "External," << url; | ||
128 | if ( !url.isEmpty() ) | 127 | if ( !url.isEmpty() ) | ||
129 | { | 128 | { | ||
130 | int newid = newId(); | 129 | int newid = newId(); | ||
131 | m_mapper.setMapping( data->m_mediaobject, newid ); | 130 | QObject::connect( data->m_mediaobject, &Phonon::MediaObject::finished, q, [this, newid]() { | ||
131 | finished(newid); | ||||
132 | }); | ||||
132 | QUrl newurl; | 133 | QUrl newurl; | ||
133 | if ( QUrl::fromUserInput(url).isRelative() ) | 134 | if ( QUrl::fromUserInput(url).isRelative() ) | ||
134 | { | 135 | { | ||
135 | newurl = m_currentDocument.adjusted(QUrl::RemoveFilename); | 136 | newurl = m_currentDocument.adjusted(QUrl::RemoveFilename); | ||
136 | newurl.setPath(newurl.path() + url ); | 137 | newurl.setPath(newurl.path() + url ); | ||
137 | } | 138 | } | ||
138 | else | 139 | else | ||
139 | { | 140 | { | ||
140 | newurl = QUrl::fromLocalFile(url); | 141 | newurl = QUrl::fromLocalFile(url); | ||
141 | } | 142 | } | ||
142 | data->m_mediaobject->setCurrentSource( newurl ); | 143 | data->m_mediaobject->setCurrentSource( newurl ); | ||
143 | m_playing.insert( newid, data ); | 144 | m_playing.insert( newid, data ); | ||
144 | valid = true; | 145 | valid = true; | ||
145 | } | 146 | } | ||
146 | break; | 147 | break; | ||
147 | } | 148 | } | ||
148 | case Sound::Embedded: | 149 | case Sound::Embedded: | ||
149 | { | 150 | { | ||
150 | QByteArray filedata = si.sound->data(); | 151 | QByteArray filedata = si.sound->data(); | ||
151 | qCDebug(OkularCoreDebug) << "Embedded," << filedata.length(); | 152 | qCDebug(OkularCoreDebug) << "Embedded," << filedata.length(); | ||
152 | if ( !filedata.isEmpty() ) | 153 | if ( !filedata.isEmpty() ) | ||
153 | { | 154 | { | ||
154 | qCDebug(OkularCoreDebug) << "Mediaobject:" << data->m_mediaobject; | 155 | qCDebug(OkularCoreDebug) << "Mediaobject:" << data->m_mediaobject; | ||
155 | int newid = newId(); | 156 | int newid = newId(); | ||
156 | m_mapper.setMapping( data->m_mediaobject, newid ); | 157 | QObject::connect( data->m_mediaobject, &Phonon::MediaObject::finished, q, [this, newid]() { | ||
158 | finished(newid); | ||||
159 | }); | ||||
157 | data->m_buffer = new QBuffer(); | 160 | data->m_buffer = new QBuffer(); | ||
158 | data->m_buffer->setData( filedata ); | 161 | data->m_buffer->setData( filedata ); | ||
159 | data->m_mediaobject->setCurrentSource( Phonon::MediaSource( data->m_buffer ) ); | 162 | data->m_mediaobject->setCurrentSource( Phonon::MediaSource( data->m_buffer ) ); | ||
160 | m_playing.insert( newid, data ); | 163 | m_playing.insert( newid, data ); | ||
161 | valid = true; | 164 | valid = true; | ||
162 | } | 165 | } | ||
163 | break; | 166 | break; | ||
164 | } | 167 | } | ||
165 | } | 168 | } | ||
166 | if ( !valid ) | 169 | if ( !valid ) | ||
167 | { | 170 | { | ||
168 | delete data; | 171 | delete data; | ||
169 | data = nullptr; | 172 | data = nullptr; | ||
170 | } | 173 | } | ||
171 | if ( data ) | 174 | if ( data ) | ||
172 | { | 175 | { | ||
173 | QObject::connect( data->m_mediaobject, SIGNAL(finished()), &m_mapper, SLOT(map()) ); | | |||
174 | qCDebug(OkularCoreDebug) << "PLAY"; | 176 | qCDebug(OkularCoreDebug) << "PLAY"; | ||
175 | data->play(); | 177 | data->play(); | ||
176 | m_state = AudioPlayer::PlayingState; | 178 | m_state = AudioPlayer::PlayingState; | ||
177 | } | 179 | } | ||
178 | return valid; | 180 | return valid; | ||
179 | } | 181 | } | ||
180 | 182 | | |||
181 | void AudioPlayerPrivate::stopPlayings() | 183 | void AudioPlayerPrivate::stopPlayings() | ||
Show All 13 Lines | 191 | { | |||
195 | // if the sound must be repeated indefinitely, then start the playback | 197 | // if the sound must be repeated indefinitely, then start the playback | ||
196 | // again, otherwise destroy the PlayData as it's no more useful | 198 | // again, otherwise destroy the PlayData as it's no more useful | ||
197 | if ( si.repeat ) | 199 | if ( si.repeat ) | ||
198 | { | 200 | { | ||
199 | it.value()->play(); | 201 | it.value()->play(); | ||
200 | } | 202 | } | ||
201 | else | 203 | else | ||
202 | { | 204 | { | ||
203 | m_mapper.removeMappings( it.value()->m_mediaobject ); | | |||
204 | delete it.value(); | 205 | delete it.value(); | ||
205 | m_playing.erase( it ); | 206 | m_playing.erase( it ); | ||
206 | m_state = AudioPlayer::StoppedState; | 207 | m_state = AudioPlayer::StoppedState; | ||
207 | } | 208 | } | ||
208 | qCDebug(OkularCoreDebug) << "finished," << m_playing.count(); | 209 | qCDebug(OkularCoreDebug) << "finished," << m_playing.count(); | ||
209 | } | 210 | } | ||
210 | 211 | | |||
211 | 212 | | |||
▲ Show 20 Lines • Show All 48 Lines • Show Last 20 Lines |