Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.
Change-Id: I1c6faa4f59f8eca54f01ef20941fa60161dd7872
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
Checking the sender of the mediaSourceReady signal to prevent accessing
the incorrect source resolver.
When the source resolver has finished the asynchronous operation and
the source resolver gets recreated in the player at the same time in a
different thread the signal mediaSourceReady still gets emitted from the
old source resolver.
The player assumes that the signal was emitted from the current source
resolver and accesses the unresolved media source in the
handleMediaSourceReady slot.
Task-number: QTBUG-39980
Change-Id: Ic52f6918995aac250048d91f89c520cfea111bd0
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
According to the docs, MESessionTopologyStatus with status == MF_TOPOSTATUS_READY should be the correct place for the GetService call.
Change-Id: I7fdbedbe43b2191b35b95c7fd9c86940f58daff7
Reviewed-by: Wouter Huysentruit <wouter_huysentruit@hotmail.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
- Correctly initialize and clear PROPVARIANT structures
- Return coherent data even when the information is not available
Change-Id: I22b46f95f255cbb740a154c6296a5c3a91e64f67
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
It was not taken into account at all.
Change-Id: I4ce85aba214cb4d89dcd018b1616a2a38094b5a6
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
When going back to normal rate after playing in fast forward (greater
than 2x), playback seemed frozen for some amount of time (up to 8
seconds).
When playing in fast forward, only key frames are shown, ignoring all
the others. When returning to a normal rate, the source reader will
usually be pointing to a key frame in the future compared to the
player clock position, meaning that all the frames in between won't be
shown until the player clock catches up with the latest key frame that
was read.
When leaving fast-forward, we now reset the position on the player to
force the source reader to point back to the frame at the current clock
position and avoid the seamingly frozen playback.
Also, emit playbackRateChanged() signal when changing the playback
rate.
Change-Id: I4f04f0f250083378e94fb4a47f9f917abeaaf24e
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
When seeking, the presentation clock can enter an undefined state until
it is started again from the new position. Wait for the clock to be
restarted before scheduling the prerolled frames, otherwise these
frames might get a wrong presentation time.
Change-Id: I02cb3338239775b7ef5d206ec5aa1b26719ac978
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
- When scrubbing, request frames only one at a time.
- Discard frames when too late or too much in advance
- Fix integer overflow causing undefined behavior
[ChangeLog][QtMultimedia][Windows] Fixed video playback playing at
twice the normal rate after reaching 3:34.
[ChangeLog][QtMultimedia][Windows] Fixed video playback that could
freeze after seeking to a different position.
Task-number: QTBUG-31800
Change-Id: Ie620c684c58ee790537969ffc40f01610b6745ea
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
Instead of setting the volume on the audio session, which is shared by
all QMediaPlayers, we now set the volume on the media player's own audio
stream. This results in all QMediaPlayers correctly having independent
volumes.
[ChangeLog][QtMultimedia][Windows] QMediaPlayer::setVolume() does not
affect the volume of other QMediaPlayers anymore.
Task-number: QTBUG-30317
Change-Id: I8ea8ec47fc86127da01dc5c8247fb6f72c834630
Reviewed-by: Wouter Huysentruit <wouter_huysentruit@hotmail.com>
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
- Switch to BufferedMedia only once playback actually started, not when
requesting to start.
- Report the position to have changed when seeking in stopped state.
Change-Id: I930b3e6977cebe5935ed033d0a4d4e1eb899ad2c
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
This reverts commit d599f7319a.
This was not the correct logic...
According to the documentation, the BufferedMedia status should be
set only when in the PlayingState.
Change-Id: I36053ebc09c0517fcd2a1a7f2b091fbe8f04f3d0
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
Do not add the AudioEndpoint to the topology if no Audio output device
is available. Fixes video not playing if you deactivate your soundcard
or have no headphones/speakers plugged in.
Change-Id: I9fc2486198a299b3e75af648f69475270968c6f7
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
This is necessary for QML MediaPlayer to report the correct position at
the end of a media.
Change-Id: Ifac2a721b850c726305d1a98e360da638b1fa87a
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
We were using one function which is available only on Windows 7 (and
later). Replace it with Vista-compatible calls.
Task-number: QTBUG-32864
Change-Id: I77492a407330c3689dfbf8dc1180894cf7ca5f8d
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
The QVideoFrame documentation explicitly says that the time is in
microseconds, however the GStreamer backend was setting the time in
milliseconds and the WMF backend in 100-nanosecond units.
With WMF, the time was missing from the QVideoFrame when presenting it to
the video surface.
Task-number: QTBUG-31731
Change-Id: I0638d2abf8eed25b3a531db67c19a18703e5b630
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
It was changing to EndOfMedia status and explicitly stopping playback
when receiving the MEEndOfPresentation event from the WMF session.
However, this event means that all data has bean read from the source but
not necessarily played yet. According to the documentation, playback is
done when the MESessionEnded event is sent. It now reports the EndOfMedia
status at that moment instead. stop() is not explicitly called anymore since
MESessionEnded also implies the session has stopped.
Task-number: QTBUG-30825
Change-Id: I6c6c09e736fe33f7cf17c75038ea7be1b5701a1c
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
To have a consistent behavior with other backends, the WMF plugin now
starts the session after loading a media in order to start buffering some
data and correctly notify when the media is buffered.
It was previously reporting a BufferedMedia status only (and wrongly)
after explicitly starting the media player.
Not all source readers (usually a source reader is specific to a file
format) implement the service needed to query buffering progress. In that
case just report the media to be buffered immediately after loading.
Change-Id: I6e6332ae08e96fc789556761e5169b88c36c5e37
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
qmultimedia.h is included in more places, but qmediametadata.h is
larger. This patch should reduce unnecessary #include-ing.
Change-Id: I4a3d174bafc555d794bb75087c1f6b79745ae903
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
It also applies to QGraphicsVideoItem when used on a GL viewport.
We now have a new video sink that is based on Microsoft's EVR sink, we just
replace the default Presenter with our own. Frames are rendered into D3D
surfaces using DXVA, then copied into a shared D3D/EGL surface and finally
bound to a GL texture to be used by the video surface.
The shared D3D/EGL surface is a feature provided by ANGLE and therefore Qt
must be compiled with ANGLE for this new video sink to be compiled and
used.
Change-Id: I0b7b9968eed5488f9ef1a2dcca5213bd0af232ab
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
When using our custom MediaSink with RGB formats, Media Foundation fails
sometimes to resolve the topology. Inserting ourselves a ColorConverter
transform in the topology resolves the problem.
The ColorConverter transform cannot handle dynamic frame size changes
(this can happen with H264 videos for example) so we also need to insert a
Resizer transform to handle transparently frame size changes.
Change-Id: Id7f37a0af65f142fbe6d420ad7b2c1ac2156c21b
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
For the VideoRendererControl, also stop the video surface at the same
time.
This fixes a crash when changing video.
Change-Id: I49484f8b277c345dafb3e5947cf5d23df15546f3
Reviewed-by: Jason Barron <jason@cutehacks.com>
Fixed the way the custom MF Transform (getting the frames) works:
- Recreate it whenever we load a new media
- During media type negotiation between nodes, the MFT should support
the same types as the video sink supports
- Allow input and output types to be changed as many times as needed,
otherwise the topology cannot be resolved in some cases
Change-Id: I7ca77e1a3dee83643f1a97f2e6ada9c5c0e88309
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
When loading the source fails because the file format is not supported, we
now report a FormatError instead of a ResourceError.
When the file format is supported but the media cannot be played (topology
cannot be resolved), it is most likely caused by a missing codec and we
then report a FormatError.
Change-Id: I101a86c129a0c5dccb543fc1247cb741994684fd
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
MFMediaSession doesn't seem to handle correctly the change of media
source, causing the playback not to work afterwards.
A single MFMediaSession was created and used for every loaded media, we
now create a new one whenever we load a new media (releasing the old one
beforehand).
Task-number: QTBUG-26819
Change-Id: Id99c9dd54e161823d9580933e063f16240806529
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Reviewed-by: Jason Barron <jason@cutehacks.com>
A wrong shutdown sequence was causing a wait condition to never be met,
resulting in a 5 seconds hang on shutdown.
Also reduced the wait condition timeout to 100 ms.
Task-number: QTBUG-28432
Change-Id: Ib415bf66634603d839be3e34e497e3a3c5a19ad9
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Reviewed-by: Jason Barron <jason@cutehacks.com>
Using the video probe cause unstability in the video playback.
Disabled for 5.0 release.
Should be fixed and re-enabled in the next version.
Change-Id: I274212a0943ac098194ad59d6e07bed7740bc8a3
Reviewed-by: Andy Nichols <andy.nichols@digia.com>