Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
samplegrabber.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 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 "samplegrabber_p.h"
5
6STDMETHODIMP SampleGrabberCallback::QueryInterface(REFIID riid, void** ppv)
7{
8 if (!ppv)
9 return E_POINTER;
10 if (riid == IID_IMFSampleGrabberSinkCallback) {
11 *ppv = static_cast<IMFSampleGrabberSinkCallback*>(this);
12 } else if (riid == IID_IMFClockStateSink) {
13 *ppv = static_cast<IMFClockStateSink*>(this);
14 } else if (riid == IID_IUnknown) {
15 *ppv = static_cast<IUnknown*>(this);
16 } else {
17 *ppv = NULL;
18 return E_NOINTERFACE;
19 }
20 AddRef();
21 return S_OK;
22}
23
24STDMETHODIMP_(ULONG) SampleGrabberCallback::AddRef()
25{
26 return InterlockedIncrement(&m_cRef);
27}
28
29STDMETHODIMP_(ULONG) SampleGrabberCallback::Release()
30{
31 ULONG cRef = InterlockedDecrement(&m_cRef);
32 if (cRef == 0) {
33 delete this;
34 }
35 return cRef;
36
37}
38
39// IMFClockStateSink methods.
40
41STDMETHODIMP SampleGrabberCallback::OnClockStart(MFTIME hnsSystemTime, LONGLONG llClockStartOffset)
42{
43 Q_UNUSED(hnsSystemTime);
44 Q_UNUSED(llClockStartOffset);
45 return S_OK;
46}
47
48STDMETHODIMP SampleGrabberCallback::OnClockStop(MFTIME hnsSystemTime)
49{
50 Q_UNUSED(hnsSystemTime);
51 return S_OK;
52}
53
54STDMETHODIMP SampleGrabberCallback::OnClockPause(MFTIME hnsSystemTime)
55{
56 Q_UNUSED(hnsSystemTime);
57 return S_OK;
58}
59
60STDMETHODIMP SampleGrabberCallback::OnClockRestart(MFTIME hnsSystemTime)
61{
62 Q_UNUSED(hnsSystemTime);
63 return S_OK;
64}
65
66STDMETHODIMP SampleGrabberCallback::OnClockSetRate(MFTIME hnsSystemTime, float flRate)
67{
68 Q_UNUSED(hnsSystemTime);
69 Q_UNUSED(flRate);
70 return S_OK;
71}
72
73// IMFSampleGrabberSink methods.
74
75STDMETHODIMP SampleGrabberCallback::OnSetPresentationClock(IMFPresentationClock* pClock)
76{
77 Q_UNUSED(pClock);
78 return S_OK;
79}
80
82{
83 return S_OK;
84}
85
86//void AudioSampleGrabberCallback::addProbe(MFAudioProbeControl* probe)
87//{
88// QMutexLocker locker(&m_audioProbeMutex);
89
90// if (m_audioProbes.contains(probe))
91// return;
92
93// m_audioProbes.append(probe);
94//}
95
96//void AudioSampleGrabberCallback::removeProbe(MFAudioProbeControl* probe)
97//{
98// QMutexLocker locker(&m_audioProbeMutex);
99// m_audioProbes.removeOne(probe);
100//}
101
103{
104 m_format = format;
105}
106
107STDMETHODIMP AudioSampleGrabberCallback::OnProcessSample(REFGUID guidMajorMediaType, DWORD dwSampleFlags,
108 LONGLONG llSampleTime, LONGLONG llSampleDuration, const BYTE * pSampleBuffer,
109 DWORD dwSampleSize)
110{
111 Q_UNUSED(dwSampleFlags);
112 Q_UNUSED(llSampleTime);
113 Q_UNUSED(llSampleDuration);
114 Q_UNUSED(pSampleBuffer);
115 Q_UNUSED(dwSampleSize);
116
117 if (guidMajorMediaType != GUID_NULL && guidMajorMediaType != MFMediaType_Audio)
118 return S_OK;
119
120 QMutexLocker locker(&m_audioProbeMutex);
121
122// if (m_audioProbes.isEmpty())
123 return S_OK;
124
125 // Check if sample has a presentation time
126 if (llSampleTime == _I64_MAX) {
127 // Set default QAudioBuffer start time
128 llSampleTime = -1;
129 } else {
130 // WMF uses 100-nanosecond units, Qt uses microseconds
131 llSampleTime /= 10;
132 }
133
134// for (MFAudioProbeControl* probe : std::as_const(m_audioProbes))
135// probe->bufferProbed((const char*)pSampleBuffer, dwSampleSize, m_format, llSampleTime);
136
137 return S_OK;
138}
STDMETHODIMP OnProcessSample(REFGUID guidMajorMediaType, DWORD dwSampleFlags, LONGLONG llSampleTime, LONGLONG llSampleDuration, const BYTE *pSampleBuffer, DWORD dwSampleSize) override
void setFormat(const QAudioFormat &format)
The QAudioFormat class stores audio stream parameter information.
\inmodule QtCore
Definition qmutex.h:317
STDMETHODIMP OnShutdown() override
STDMETHODIMP QueryInterface(REFIID iid, void **ppv) override
STDMETHODIMP OnClockSetRate(MFTIME hnsSystemTime, float flRate) override
STDMETHODIMP OnClockStop(MFTIME hnsSystemTime) override
STDMETHODIMP OnClockPause(MFTIME hnsSystemTime) override
STDMETHODIMP OnClockRestart(MFTIME hnsSystemTime) override
STDMETHODIMP OnSetPresentationClock(IMFPresentationClock *pClock) override
STDMETHODIMP OnClockStart(MFTIME hnsSystemTime, LONGLONG llClockStartOffset) override
GLint GLsizei GLsizei GLenum format
#define Q_UNUSED(x)
IUIViewSettingsInterop __RPC__in REFIID riid
IUIViewSettingsInterop __RPC__in REFIID __RPC__deref_out_opt void ** ppv
STDMETHODIMP_(ULONG) SampleGrabberCallback