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();
93 void applyAudioDevice();
96 void updateMetaData();
98 void updateSubtitleTracks();
99 void updateDuration();
102 void startPlaybackTimers();
103 void stopPlaybackTimers();
106 qint64 currentPositionMs()
const;
107 QSize nativeVideoSize()
const;
111 QObject *context() {
return &m_positionUpdateTimer; }
115 ComPtr<IMFMediaEngine> m_mediaEngine;
116 ComPtr<IMFMediaEngineEx> m_mediaEngineEx;
117 ComPtr<IMFTimedText> m_timedText;
118 ComPtr<QMediaEngineTimedTextNotify> m_timedTextNotify;
119 ComPtr<QMediaEngineNotify> m_notify;
122 ComPtr<ID3D11Device> m_d3dDevice;
123 ComPtr<IMFDXGIDeviceManager> m_dxgiManager;
124 UINT m_resetToken = 0;
127 ComPtr<ID3D11Texture2D> m_transferTexture;
129 QVideoFrameFormat m_videoFormat;
130 std::chrono::microseconds m_frameDuration{};
132 int m_deviceLostRetries = 0;
133 static constexpr int kMaxDeviceLostRetries = 3;
136 QPlatformVideoSink *m_videoSink =
nullptr;
137 QPlatformAudioOutput *m_audioOutput =
nullptr;
141 QIODevice *m_stream =
nullptr;
144 QMediaMetaData m_metaData;
145 QFuture<
void> m_metadataFuture;
153 std::vector<Entry> entries;
154 int currentIndex = -1;
156 TrackTypeMap<TrackInfo> m_tracks;
159 std::chrono::milliseconds m_duration{};
160 std::optional<std::chrono::milliseconds> m_seekTarget;
161 qreal m_playbackRate = 1.0;
162 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.