36 public IMFSourceReaderCallback,
37 public IMFSinkWriterCallback
51 DWORD dwStreamFlags, LONGLONG llTimestamp, IMFSample *pSample)
override;
52 STDMETHODIMP
OnFlush(DWORD dwStreamIndex)
override;
53 STDMETHODIMP
OnEvent(DWORD dwStreamIndex, IMFMediaEvent *pEvent)
override;
57 STDMETHODIMP
OnMarker(DWORD dwStreamIndex, LPVOID pvContext)
override;
65 const GUID &videoFormat, UINT32 videoBitRate, UINT32
width,
92 void updateDuration();
96 HRESULT createAggregateReader(IMFMediaSource *firstSource, IMFMediaSource *secondSource,
97 IMFMediaSource **aggregateSource, IMFSourceReader **sourceReader);
100 HRESULT createAudioMediaType(
const GUID &
format, UINT32 bitRate, IMFMediaType **mediaType);
101 HRESULT initAudioType(IMFMediaType *mediaType, UINT32 channels, UINT32 samplesPerSec,
bool flt);
102 HRESULT prepareVideoStream(DWORD mediaTypeIndex);
105 HRESULT updateSinkInputMediaTypes();
107 void stopMonitoring();
108 void releaseResources();
109 void stopStreaming();
115 IMFMediaSource *m_videoSource =
nullptr;
116 IMFMediaType *m_videoMediaType =
nullptr;
117 IMFMediaSource *m_audioSource =
nullptr;
118 IMFMediaType *m_audioMediaType =
nullptr;
119 IMFMediaSource *m_aggregateSource =
nullptr;
120 IMFSourceReader *m_sourceReader =
nullptr;
121 IMFSinkWriter *m_sinkWriter =
nullptr;
122 IMFMediaSink *m_monitorSink =
nullptr;
123 IMFSinkWriter *m_monitorWriter =
nullptr;
125 DWORD m_sourceVideoStreamIndex = MF_SOURCE_READER_INVALID_STREAM_INDEX;
126 DWORD m_sourceAudioStreamIndex = MF_SOURCE_READER_INVALID_STREAM_INDEX;
127 DWORD m_sinkVideoStreamIndex = MF_SINK_WRITER_INVALID_STREAM_INDEX;
128 DWORD m_sinkAudioStreamIndex = MF_SINK_WRITER_INVALID_STREAM_INDEX;
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;
148 qint64 m_currentDuration = -1;
149 qint64 m_lastDuration = -1;