50 DWORD dwStreamFlags, LONGLONG llTimestamp, IMFSample *pSample)
override;
58 bool activate(
const QString &cameraId,
59 const QCameraFormat &cameraFormat,
60 const QString µphoneId);
64 const GUID &videoFormat, UINT32 videoBitRate, UINT32 width,
65 UINT32 height, qreal frameRate,
const GUID &audioFormat,
94 HRESULT createSource(
const QString &deviceId,
bool video, ComPtr<IMFMediaSource> &source);
95 HRESULT createAggregateReader(
const ComPtr<IMFMediaSource> &firstSource,
96 const ComPtr<IMFMediaSource> &secondSource,
97 ComPtr<IMFMediaSource> &aggregateSource,
98 ComPtr<IMFSourceReader> &sourceReader);
99 HRESULT createVideoMediaType(
const GUID &format, UINT32 bitRate, UINT32 width, UINT32 height,
100 qreal frameRate, ComPtr<IMFMediaType> &mediaType);
101 HRESULT createAudioMediaType(
const GUID &format, UINT32 bitRate, ComPtr<IMFMediaType> &mediaType);
102 HRESULT initAudioType(
const ComPtr<IMFMediaType> &mediaType, UINT32 channels, UINT32 samplesPerSec,
bool flt);
103 HRESULT prepareVideoStream(DWORD mediaTypeIndex);
104 HRESULT prepareAudioStream();
105 HRESULT initSourceIndexes();
106 HRESULT updateSinkInputMediaTypes();
107 HRESULT startMonitoring();
108 void stopMonitoring();
109 void releaseResources();
110 void stopStreaming();
111 DWORD findMediaTypeIndex(
const QCameraFormat &reqFormat);
114 QWaitCondition m_hasFinalized;
115 ComPtr<IMFMediaSource> m_videoSource;
116 ComPtr<IMFMediaType> m_videoMediaType;
117 ComPtr<IMFMediaSource> m_audioSource;
118 ComPtr<IMFMediaType> m_audioMediaType;
119 ComPtr<IMFMediaSource> m_aggregateSource;
120 ComPtr<IMFSourceReader> m_sourceReader;
121 ComPtr<IMFSinkWriter> m_sinkWriter;
122 ComPtr<IMFMediaSink> m_monitorSink;
123 ComPtr<IMFSinkWriter> m_monitorWriter;
124 QString m_audioOutputId;
129 UINT32 m_frameWidth = 0;
130 UINT32 m_frameHeight = 0;
131 qreal m_frameRate = 0.0;
133 bool m_active =
false;
134 bool m_streaming =
false;
135 bool m_recording =
false;
136 bool m_firstFrame =
false;
137 bool m_paused =
false;
138 bool m_pauseChanging =
false;
139 bool m_inputMuted =
false;
140 bool m_outputMuted =
false;
141 qreal m_inputVolume = 1.0;
142 qreal m_outputVolume = 1.0;
144 LONGLONG m_timeOffset = 0;
145 LONGLONG m_pauseTime = 0;
146 LONGLONG m_lastTimestamp = 0;
147 QTimer m_durationTimer;
148 qint64 m_currentDuration = -1;
149 qint64 m_lastDuration = -1;