Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
custommediainputsnippets.cpp
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
5
6void CustomMediaInputSnippets::setupAndRecordVideo()
7{
8 //! [QVideoFrameInput setup]
9 QMediaCaptureSession session;
10 QMediaRecorder recorder;
11 QVideoFrameInput videoInput;
12
13 session.setRecorder(&recorder);
14 session.setVideoFrameInput(&videoInput);
15
16 MediaGenerator generator; // Custom class providing video frames
17
18 connect(&videoInput, &QVideoFrameInput::readyToSendVideoFrame,
19 &generator, &MediaGenerator::nextVideoFrame);
20 connect(&generator, &MediaGenerator::videoFrameReady,
21 &videoInput, &QVideoFrameInput::sendVideoFrame);
22
23 recorder.record();
24 //! [QVideoFrameInput setup]
25
26 // Start event loop here to keep objects alive and make the snippets runnable without crashing
27 QTimer::singleShot(1000, qApp, &QCoreApplication::quit); // Close the app after 1 second
28 qApp->exec();
29}
30
32{
33 //! [QAudioBufferInput setup]
34 QMediaCaptureSession session;
35 QMediaRecorder recorder;
36 QAudioBufferInput audioInput;
37
38 session.setRecorder(&recorder);
39 session.setAudioBufferInput(&audioInput);
40
41 MediaGenerator generator; // Custom class providing audio buffers
42
43 connect(&audioInput, &QAudioBufferInput::readyToSendAudioBuffer,
44 &generator, &MediaGenerator::nextAudioBuffer);
45 connect(&generator, &MediaGenerator::audioBufferReady,
46 &audioInput, &QAudioBufferInput::sendAudioBuffer);
47
48 recorder.record();
49 //! [QAudioBufferInput setup]
50
51 // Start event loop here to keep objects alive and make the snippets runnable without crashing
52 QTimer::singleShot(1000, qApp, &QCoreApplication::quit); // Close the app after 1 second
53 qApp->exec();
54}
55
56//! [nextVideoFrame()]
57void MediaGenerator::nextVideoFrame()
58{
59 QVideoFrame frame = nextFrame();
60 emit videoFrameReady(frame);
61}
62//! [nextVideoFrame()]
63
64//! [nextAudioBuffer()]
66{
67 QAudioBuffer buffer = nextBuffer();
68 emit audioBufferReady(buffer);
69}
70//! [nextAudioBuffer()]
71
72QVideoFrame MediaGenerator::nextFrame()
73{
74 // Create mock video frame which is not interpretet as empty by the recorder
75 QVideoFrameFormat format(QSize(1080, 720), QVideoFrameFormat::Format_NV12);
76 QVideoFrame frame(format);
77 return frame;
78}
79
80QAudioBuffer MediaGenerator::nextBuffer()
81{
82 // Create mock audio buffer which is not interpretet as empty by the recorder
83 QAudioFormat format;
84 format.setSampleRate(48000);
85 format.setChannelCount(2);
86 format.setSampleFormat(QAudioFormat::Float);
87 int bufferSize = format.bytesPerSample() * 128;
88 QByteArray byteArray(bufferSize, 0);
89 return QAudioBuffer(byteArray, format);
90}
void nextAudioBuffer()
[nextVideoFrame()]