Source code

Revision control

Copy as Markdown

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "custommediainputsnippets.h"
void CustomMediaInputSnippets::setupAndRecordVideo()
{
//! [QVideoFrameInput setup]
QMediaCaptureSession session;
QMediaRecorder recorder;
QVideoFrameInput videoInput;
session.setRecorder(&recorder);
session.setVideoFrameInput(&videoInput);
MediaGenerator generator; // Custom class providing video frames
connect(&videoInput, &QVideoFrameInput::readyToSendVideoFrame,
&generator, &MediaGenerator::nextVideoFrame);
connect(&generator, &MediaGenerator::videoFrameReady,
&videoInput, &QVideoFrameInput::sendVideoFrame);
recorder.record();
//! [QVideoFrameInput setup]
// Start event loop here to keep objects alive and make the snippets runnable without crashing
QTimer::singleShot(1000, qApp, &QCoreApplication::quit); // Close the app after 1 second
qApp->exec();
}
void CustomMediaInputSnippets::setupAndRecordAudio()
{
//! [QAudioBufferInput setup]
QMediaCaptureSession session;
QMediaRecorder recorder;
QAudioBufferInput audioInput;
session.setRecorder(&recorder);
session.setAudioBufferInput(&audioInput);
MediaGenerator generator; // Custom class providing audio buffers
connect(&audioInput, &QAudioBufferInput::readyToSendAudioBuffer,
&generator, &MediaGenerator::nextAudioBuffer);
connect(&generator, &MediaGenerator::audioBufferReady,
&audioInput, &QAudioBufferInput::sendAudioBuffer);
recorder.record();
//! [QAudioBufferInput setup]
// Start event loop here to keep objects alive and make the snippets runnable without crashing
QTimer::singleShot(1000, qApp, &QCoreApplication::quit); // Close the app after 1 second
qApp->exec();
}
//! [nextVideoFrame()]
void MediaGenerator::nextVideoFrame()
{
QVideoFrame frame = nextFrame();
emit videoFrameReady(frame);
}
//! [nextVideoFrame()]
//! [nextAudioBuffer()]
void MediaGenerator::nextAudioBuffer()
{
QAudioBuffer buffer = nextBuffer();
emit audioBufferReady(buffer);
}
//! [nextAudioBuffer()]
QVideoFrame MediaGenerator::nextFrame()
{
// Create mock video frame which is not interpretet as empty by the recorder
QVideoFrameFormat format(QSize(1080, 720), QVideoFrameFormat::Format_NV12);
QVideoFrame frame(format);
return frame;
}
QAudioBuffer MediaGenerator::nextBuffer()
{
// Create mock audio buffer which is not interpretet as empty by the recorder
QAudioFormat format;
format.setSampleRate(48000);
format.setChannelCount(2);
format.setSampleFormat(QAudioFormat::Float);
int bufferSize = format.bytesPerSample() * 128;
QByteArray byteArray(bufferSize, 0);
return QAudioBuffer(byteArray, format);
}