Revision control

++ // 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);
++ }