Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
avfaudiopreviewdelegate.mm
Go to the documentation of this file.
1
// Copyright (C) 2021 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#
include
"avfaudiopreviewdelegate_p.h"
5
6
#
include
<
camera
/
avfcamerasession_p
.
h
>
7
8
#
include
<
QtCore
/
qdebug
.
h
>
9
#
include
<
QtCore
/
private
/
qcore_mac_p
.
h
>
10
11
QT_USE_NAMESPACE
12
13
@implementation AVFAudioPreviewDelegate
14
{
15
@
private
16
AVSampleBufferAudioRenderer *m_audioRenderer;
17
AVFCameraSession *m_session;
18
AVSampleBufferRenderSynchronizer *m_audioBufferSynchronizer;
19
dispatch_queue_t m_audioPreviewQueue;
20
}
21
22
- (
id
)init
23
{
24
if
(self = [super init]) {
25
m_audioBufferSynchronizer = [[AVSampleBufferRenderSynchronizer alloc] init];
26
m_audioRenderer = [[AVSampleBufferAudioRenderer alloc] init];
27
[m_audioBufferSynchronizer addRenderer:m_audioRenderer];
28
return
self;
29
}
30
return
nil;
31
}
32
33
- (
void
)captureOutput:(AVCaptureOutput *)captureOutput
34
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
35
fromConnection:(AVCaptureConnection *)connection
36
{
37
Q_UNUSED(connection);
38
Q_ASSERT(m_session);
39
40
if
(!CMSampleBufferDataIsReady(sampleBuffer)) {
41
qWarning() << Q_FUNC_INFO <<
"sample buffer is not ready, skipping."
;
42
return
;
43
}
44
45
auto
buffer = QCFType<CMSampleBufferRef>::constructFromGet(sampleBuffer);
46
47
dispatch_async(m_audioPreviewQueue, ^{
48
[self renderAudioSampleBuffer:buffer];
49
return
;
50
});
51
}
52
53
- (
void
)renderAudioSampleBuffer:(CMSampleBufferRef)sampleBuffer
54
{
55
Q_ASSERT(sampleBuffer);
56
Q_ASSERT(m_session);
57
58
if
(m_audioBufferSynchronizer && m_audioRenderer) {
59
[m_audioRenderer enqueueSampleBuffer:sampleBuffer];
60
if
(m_audioBufferSynchronizer.rate == 0)
61
[m_audioBufferSynchronizer setRate:1 time:CMSampleBufferGetPresentationTimeStamp(sampleBuffer)];
62
}
63
}
64
65
- (
void
)resetAudioPreviewDelegate
66
{
67
[m_session->audioOutput() setSampleBufferDelegate:self queue:m_audioPreviewQueue];
68
}
69
70
- (
void
)setupWithCaptureSession: (AVFCameraSession*)session
71
audioOutputDevice: (NSString*)deviceId
72
{
73
m_session = session;
74
75
m_audioPreviewQueue = dispatch_queue_create(
"audio-preview-queue"
,
nullptr
);
76
[m_session->audioOutput() setSampleBufferDelegate:self queue:m_audioPreviewQueue];
77
#
ifdef
Q_OS_MACOS
78
m_audioRenderer.audioOutputDeviceUniqueID = deviceId;
79
#
endif
80
}
81
82
- (
void
)setVolume: (
float
)volume
83
{
84
m_audioRenderer.volume = volume;
85
}
86
87
- (
void
)setMuted: (
bool
)muted
88
{
89
m_audioRenderer.muted = muted;
90
}
91
92
-(
void
)dealloc {
93
m_session = nil;
94
[m_audioRenderer release];
95
[m_audioBufferSynchronizer release];
96
dispatch_release(m_audioPreviewQueue);
97
98
[super dealloc];
99
}
100
101
@end
QmlIR::Object::id
int id
Definition
qqmlirbuilder_p.h:312
qtmultimedia
src
plugins
multimedia
darwin
camera
avfaudiopreviewdelegate.mm
Generated on
for Qt by
1.18.0