19class SteppingAudioRenderer :
public Renderer
25 RenderingResult renderInternal(Frame
frame)
override
31 m_resampler = std::make_unique<QFFmpegResampler>(
frame.codec(), m_format);
33 emit newAudioBuffer(m_resampler->resample(
frame.avFrame()));
43 std::unique_ptr<QFFmpegResampler> m_resampler;
46class AudioDecoder :
public PlaybackEngine
55 return RendererPtr{ {}, {} };
57 auto result = createPlaybackEngineObject<SteppingAudioRenderer>(m_format);
58 m_audioRenderer =
result.get();
60 connect(
result.get(), &SteppingAudioRenderer::newAudioBuffer,
this,
61 &AudioDecoder::newAudioBuffer);
69 Q_ASSERT(!m_audioRenderer->isStepForced());
71 m_audioRenderer->doForceStep();
79 QPointer<Renderer> m_audioRenderer;
100 m_sourceDevice =
nullptr;
108 return m_sourceDevice;
121 qCDebug(qLcAudioDecoder) <<
"start";
122 auto checkNoError = [
this]() {
134 m_decoder = std::make_unique<AudioDecoder>(m_audioFormat);
137 connect(m_decoder.get(), &AudioDecoder::newAudioBuffer,
this,
148 m_decoder->setMedia(std::move(*media.
value()));
150 auto [code, description] = media.
error();
161 m_decoder->nextBuffer();
171 qCDebug(qLcAudioDecoder) <<
">>>>> stop";
180 return m_audioFormat;
194 qCDebug(qLcAudioDecoder) <<
"reading buffer" <<
buffer.startTime();
197 m_decoder->nextBuffer();
207 qCDebug(qLcAudioDecoder) <<
"new audio buffer" <<
b.startTime();
217 qCDebug(qLcAudioDecoder) <<
">>>>> DONE!";
245#include "moc_qffmpegaudiodecoder_p.cpp"
247#include "qffmpegaudiodecoder.moc"
IOBluetoothDevice * device
bool isValid() const noexcept
Returns true if this is a valid buffer.
qint64 startTime() const noexcept
Returns the time in a stream that this buffer starts at (in microseconds).
The QAudioDecoder class implements decoding audio.
void setSource(const QUrl &fileName) override
void newAudioBuffer(const QAudioBuffer &b)
QIODevice * sourceDevice() const override
void errorSignal(int err, const QString &errorString)
QAudioFormat audioFormat() const override
void setAudioFormat(const QAudioFormat &format) override
virtual ~QFFmpegAudioDecoder()
QFFmpegAudioDecoder(QAudioDecoder *parent)
QAudioBuffer read() override
void setSourceDevice(QIODevice *device) override
QUrl source() const override
\inmodule QtCore \reentrant
constexpr Value & value()
constexpr const Error & error() const
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
\macro QT_RESTRICTED_CAST_FROM_ASCII
void clear()
Resets the content of the QUrl.
Combined button and popup list for selecting options.
#define Q_LOGGING_CATEGORY(name,...)
#define qCDebug(category,...)
GLboolean GLboolean GLboolean b
GLint GLsizei GLsizei GLenum format
QLatin1StringView QLatin1String
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection)