4#ifndef QMEDIAENGINEPLAYER_P_H
5#define QMEDIAENGINEPLAYER_P_H
18#include <qwindowsmfdefs_p.h>
20#include <QtMultimedia/qmediametadata.h>
21#include <QtMultimedia/qvideoframeformat.h>
22#include <QtMultimedia/private/qplatformmediaplayer_p.h>
23#include <QtCore/qchronotimer.h>
24#include <QtCore/qfuture.h>
25#include <QtCore/qurl.h>
26#include <QtCore/private/qcomptr_p.h>
38class QMediaEngineNotify;
39class QMediaEngineTimedTextNotify;
40class QPlatformVideoSink;
43class QWindowsD3D11RhiTextureImporter;
62 void setMedia(
const QUrl &media, QIODevice *stream)
override;
79 bool initMediaEngine();
80 void releaseMediaEngine();
83 void handleMediaEngineEvent(DWORD event, DWORD_PTR param1, DWORD param2);
86 void presentVideoFrame();
87 void updateVideoFrameFormat();
88 void updateNativeSize();
91 void applyAudioOutput();
94 void updateMetaData();
96 void updateSubtitleTracks();
97 void updateDuration();
100 void startPlaybackTimers();
101 void stopPlaybackTimers();
104 qint64 currentPositionMs()
const;
105 QSize nativeVideoSize()
const;
109 QObject *context() {
return &m_positionUpdateTimer; }
113 ComPtr<IMFMediaEngine> m_mediaEngine;
114 ComPtr<IMFMediaEngineEx> m_mediaEngineEx;
115 ComPtr<IMFTimedText> m_timedText;
116 ComPtr<QMediaEngineTimedTextNotify> m_timedTextNotify;
117 ComPtr<QMediaEngineNotify> m_notify;
120 ComPtr<ID3D11Device> m_d3dDevice;
121 ComPtr<IMFDXGIDeviceManager> m_dxgiManager;
122 UINT m_resetToken = 0;
125 ComPtr<ID3D11Texture2D> m_transferTexture;
127 QVideoFrameFormat m_videoFormat;
128 std::chrono::microseconds m_frameDuration{};
130 int m_deviceLostRetries = 0;
131 static constexpr int kMaxDeviceLostRetries = 3;
134 QPlatformVideoSink *m_videoSink =
nullptr;
135 QPlatformAudioOutput *m_audioOutput =
nullptr;
139 QIODevice *m_stream =
nullptr;
142 QMediaMetaData m_metaData;
143 QFuture<
void> m_metadataFuture;
151 std::vector<Entry> entries;
152 int currentIndex = -1;
154 TrackTypeMap<TrackInfo> m_tracks;
157 std::chrono::milliseconds m_duration{};
158 std::optional<std::chrono::milliseconds> m_seekTarget;
159 qreal m_playbackRate = 1.0;
160 bool m_pendingPlay =
false;
bool canReadQrc() const override
void setAudioFormat(const QAudioFormat &format) override
bool bufferAvailable() const override
QUrl source() const override
void setSourceDevice(QIODevice *device) override
QAudioFormat audioFormat() const override
QAudioBuffer read() override
void setSource(const QUrl &fileName) override
QIODevice * sourceDevice() const override
~MFAudioDecoderControl() override
virtual ~QWindowsCamera()
bool isActive() const override
void setCamera(const QCameraDevice &camera) override
void setCaptureSession(QPlatformMediaCaptureSession *) override
bool setCameraFormat(const QCameraFormat &format) override
void setActive(bool active) override
int capture(const QString &fileName) override
virtual ~QWindowsImageCapture()
int captureToBuffer() override
QImageEncoderSettings imageSettings() const override
void setImageSettings(const QImageEncoderSettings &settings) override
void setCaptureSession(QPlatformMediaCaptureSession *session)
bool isReadyForCapture() const override
ComPtr< IMFMediaSource > mediaSource() const
void load(const QUrl &url, QIODevice *stream)
Combined button and popup list for selecting options.