129 qCDebug(qLcAudioDecoder) <<
"start";
130 auto checkNoError = [
this]() {
131 if (error() == QAudioDecoder::NoError)
134 durationChanged(kInvalidDuration);
135 positionChanged(kInvalidPosition);
143 m_decoder = std::make_unique<AudioDecoder>(m_audioFormat, defaultOptions);
144 connect(m_decoder.get(), &AudioDecoder::errorOccured,
this, &QFFmpegAudioDecoder::errorSignal);
146 connect(m_decoder.get(), &AudioDecoder::newAudioBuffer,
this,
147 &QFFmpegAudioDecoder::newAudioBuffer);
149 QFFmpeg::MediaDataHolder::Maybe media =
150 QFFmpeg::MediaDataHolder::create(m_url, m_sourceDevice, defaultOptions,
nullptr);
153 Q_ASSERT(media.value());
154 if (media.value()->streamInfo(QFFmpeg::TrackType::AudioStream).isEmpty())
155 error(QAudioDecoder::FormatError,
156 QLatin1String(
"The media doesn't contain an audio stream"));
158 m_decoder->setMedia(std::move(*media.value()));
160 auto [code, description] = media.error();
161 errorSignal(code, description);
167 m_decoder->setState(QMediaPlayer::PausedState);
171 m_decoder->nextBuffer();
175 durationChanged(std::chrono::milliseconds{ QFFmpeg::toUserDuration(m_decoder->duration()).get() });
237 switch (QMediaPlayer::Error(err)) {
238 case QMediaPlayer::NoError:
239 error(QAudioDecoder::NoError, errorString);
241 case QMediaPlayer::ResourceError:
242 error(QAudioDecoder::ResourceError, errorString);
244 case QMediaPlayer::FormatError:
245 error(QAudioDecoder::FormatError, errorString);
247 case QMediaPlayer::NetworkError:
249 case QMediaPlayer::AccessDeniedError:
250 error(QAudioDecoder::AccessDeniedError, errorString);