Commit Graph

94 Commits

Author SHA1 Message Date
Sergio Ahumada
41a1c16340 Merge remote-tracking branch 'origin/5.3' into 5.4
Conflicts:
	.qmake.conf

Change-Id: Iad73368a22c6d4662188e6f357a265d0c26756d0
2014-09-26 15:28:44 +02:00
Yoann Lopes
49dc6dc459 WMF: fix crash on media player destruction.
A race condition could cause a frame to be presented even after the
QAbstractVideoSurface was deleted. We now check that the surface is
valid before presenting a frame.

Task-number: QTBUG-41158
Change-Id: If593469a8267583e499e781336af38d3fbf318fd
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-09-24 14:17:21 +02:00
Yoann Lopes
78dccc998f WMF: fix video rendering with ANGLE.
The format of the offscreen surface used for video rendering should be
compatible with the EGL config.

Change-Id: Ic016245ce80c2483771e620c3eed345262d03c44
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-09-24 14:10:08 +02:00
Nodir Temirkhodjaev
569dd64083 WMF: fix initializing of media player's volume.
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>
2014-09-11 14:31:11 +02:00
Nodir Temirkhodjaev
5be2524328 WMF: fix memory leaks.
Release requested interfaces.

Task-number: QTBUG-32481
Change-Id: I846981f6a7a7ea77588b9322fc41e05e583bdb15
Reviewed-by: Wouter Huysentruit <wouter_huysentruit@hotmail.com>
Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Reviewed-by: Jeff Tranter <jtranter@ics.com>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
2014-09-11 10:17:40 +02:00
Yoann Lopes
90fd3ac399 WMF: fix start time of QAudioProbe's buffers.
Task-number: QTBUG-40954
Change-Id: Icd1d144dcff3a3191432722da44a263ca286dbb6
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-09-09 18:07:06 +02:00
Allan Sandfeld Jensen
f803f87068 Fix build with QT_OPENGL_DYNAMIC
Change-Id: I4375a808170f3e4888101fea7a833399061a8935
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-09-09 14:06:57 +02:00
Frederik Gladhorn
659f238bbb Merge remote-tracking branch 'origin/5.3' into 5.4
Conflicts:
	src/gsttools/qgstreamervideoinputdevicecontrol.cpp
	src/plugins/gstreamer/camerabin/camerabinserviceplugin.cpp
	src/plugins/gstreamer/mediacapture/qgstreamercaptureserviceplugin.cpp

Change-Id: Ic854589562d2deeaa0ebf75840cb8a2ee32e99de
2014-09-01 12:52:51 +02:00
Yoann Lopes
20da381608 WMF: fix bufferStatus() and availablePlaybackRanges().
- 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>
2014-08-25 17:39:55 +02:00
Antti Kokko
2732e23887 Update license headers and add new license files
- Renamed LICENSE.LGPL to LICENSE.LGPLv21
- Added LICENSE.LGPLv3 & LICENSE.GPLv2
- Removed LICENSE.GPL

Change-Id: Ied06887225df341064c12bcc14c259ae74116f2e
Reviewed-by: Jani Heikkinen <jani.heikkinen@digia.com>
2014-08-24 17:30:13 +02:00
Laszlo Agocs
66ba21971b Support dynamic opengl32 - ANGLE switching on Windows
Change-Id: I38532db3ab0ad4fcb8dbabd0cbb528f7d8e4ba06
Reviewed-by: Andrew Knight <andrew.knight@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
2014-07-29 12:18:37 +02:00
Yoann Lopes
e9e10b2b1f WMF: fix video frames' viewport.
It was not taken into account at all.

Change-Id: I4ce85aba214cb4d89dcd018b1616a2a38094b5a6
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-05-15 15:12:18 +02:00
Yoann Lopes
f6e57f80a8 WMF: improve changing playback rate on a media player.
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>
2014-04-09 13:43:50 +02:00
Yoann Lopes
0821606260 WMF: more reliable video seeking.
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>
2014-04-08 18:50:02 +02:00
Yoann Lopes
47d2ed915e WMF: don't return undefined value in Release() function.
The function was returning a member variable after the object was
deleted. Return a local copy instead.

Change-Id: I077e7e1c184ed0cfd4899a80c9147a2939c93cd7
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-04-08 00:03:44 +02:00
Yoann Lopes
5ff2f4c52d WMF: support playback rate in our custom video sink.
Change-Id: Ic8fde3398813df68d2f77b2542f1fa507c8ea674
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-04-08 00:03:30 +02:00
Liang Jian
244c63f72a Fix memory leak in SampleGrabberCallback
Add virtual destructor to SampleGrabberCallback to let it properly
destruct its subclass when calling 'detete this'

Change-Id: I5f74f82314e22225a0a153c7f4bca531a79dd8f9
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-02 11:23:47 +02:00
Liang Jian
155ae9e88b Fix SourceResolver::State object leak
Initialize m_cRef to 0 in constructor of SourceResolver::State, otherwise
it will be leaked

Change-Id: I703ef8e91ad88112102ede7e8321d0eca795b840
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-01 18:40:32 +02:00
Yoann Lopes
04edeafade WMF: fix some issues with our custom video sink.
- 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>
2014-03-18 14:48:02 +01:00
Yoann Lopes
4855707ed7 WMF: remove some debug output.
Task-number: QTBUG-37539
Change-Id: I5c2f232195de946dce04eb873ac381d0bb9e73b2
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-03-18 14:47:53 +01:00
Yoann Lopes
7d894ca0aa WMF: each media player now has its own volume.
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>
2014-03-07 15:12:13 +01:00
Yoann Lopes
b28ee24628 New QCameraInfo class.
The class allows to get the list of available cameras on the system as
well as getting some static information about them such as their unique
ID, display name, physical position and sensor orientation.

This makes QCamera::availableDevices() and QCamera::deviceDescription()
obsolete.

This patch contains the API, documentation and auto-tests but not the
actual implementation by each backend (except for retrieving the default
camera device).

[ChangeLog][QtMultimedia] Added new QCameraInfo class
[ChangeLog][QtMultimedia] QCamera: availableDevices() and
deviceDescription() are deprecated, use QCameraInfo instead

Change-Id: I64fd65729ab26a789468979ed5444ee90bb82cd0
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-02-28 14:10:00 +01:00
Oswald Buddenhagen
13882cd5da Merge remote-tracking branch 'origin/dev' into stable
Change-Id: I84b36fa41f3d5f8fea2dec2545f72ebe6a0c7908
2014-02-19 10:05:11 +01:00
Andy Shaw
391e8a7147 Fix linking problem when built with -no-opengl
When -no-opengl was used then it was not automatically pulling in the
needed Windows libraries as it was not loading opengl.prf to get them
from.

Change-Id: I9b73e5ee01da964a64c71b6261ff4ed98ce6f1a9
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-02-17 19:03:38 +01:00
Thiago Macieira
e4035bf6d0 Normalize signal & slot signatures in connection
Profiling shows Qt Creator spends 2% of its load time normalizing

Change-Id: I1a4bef16be79ced35c47da865153ebe1bee22f9c
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-02-03 20:12:35 +01:00
Yoann Lopes
29ded57cef WMF: remove dead code.
Change-Id: Ib3b595263e64336cc5d0482edd890e7b4e534927
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-12-11 10:31:45 +01:00
Yoann Lopes
653041db1d WMF: fix some crashes.
Task-number: QTBUG-30827
Change-Id: Iafc53f7095ad9c086b3982afb2af045c54497dc9
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-12-11 10:31:25 +01:00
Yoann Lopes
99bebdbb7d WMF: fixed various media player issues.
- 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>
2013-12-04 18:46:26 +01:00
Yoann Lopes
cbe9fc8e4d Revert "WMF: fixed MediaPlayer buffering logic."
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>
2013-12-04 18:46:07 +01:00
Marius Wachtler
160656d688 Fix WMF Video not playing if no soundcard is available
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>
2013-11-26 13:54:52 +01:00
Yoann Lopes
acbd998749 WMF: emit positionChanged() signal when reaching the end of a media.
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>
2013-10-29 11:43:08 +01:00
Yoann Lopes
068169528c WMF: fix output samples from our video probe MFTransform.
The EVR sink allocates its buffers and expect the node connected to it
to use them. Our video probe MFTransform should therefore copy the input
buffers into the EVR buffers rather than just passing on the input
buffers.

Task-number: QTBUG-30435
Change-Id: I978479ced341b96ce627c682f99662dec1dfdb3f
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-10-16 12:09:50 +02:00
Yoann Lopes
99c4a08c38 WMF: allow to set a qrc file name as source of a QAudioDecoder.
Task-number: QTBUG-33518
Change-Id: I01d8a1fa7b9a1c3ea2af9de6033dff2773cd6ace
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-10-14 18:44:03 +02:00
Yoann Lopes
a23b14874c WMF: allow to load media whose content doesn't match its file extension.
This also allows to play streams without providing a MIME type.

Task-number: QTBUG-33631
Task-number: QTBUG-33518
Change-Id: Ia106592cb5ed0a0f7ede6308dc8e2c12cf4e63b1
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-10-14 18:43:48 +02:00
Yoann Lopes
6f0cdc264f WMF: fixed compilation on Windows Vista.
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>
2013-10-11 16:08:22 +02:00
Yoann Lopes
a2f078f108 WMF and GStreamer: fixed incorrect frame startTime and endTime.
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>
2013-08-22 13:16:49 +02:00
Yoann Lopes
291f1229fe WMF: fixed QMediaPlayer changing to EndOfMedia status too early.
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>
2013-08-16 15:30:10 +02:00
Yoann Lopes
bdf0cc7a16 WMF: use qFabs instead of fabsf.
Task-number: QTBUG-32360
Change-Id: Ibec3d044ac38f54abd895d56f1851011bf6b5272
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-08-16 15:30:00 +02:00
Yoann Lopes
d599f7319a WMF: fixed MediaPlayer buffering logic.
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>
2013-07-19 09:42:42 +02:00
Yoann Lopes
e25db62a59 Multimedia plugins now have a unique JSON metadata 'Keys' property.
They previously had the multimedia services they provided as keys. This
was a problem when several plugins were available on the same platform,
providing the same multimedia service, but with different features or
capabilities. Since they had the same key, only the first plugin in the
directory was loaded.

Nevertheless, it was actually working until commit 732dcfe7 in qtbase,
as all plugins were loaded even when sharing the same key.

The services a multimedia plugin provides are now declared in the
'Services' property. To preserve compatibility with third-party plugins,
if that new property doesn't exist it falls back to the 'Keys' property.

Task-number: QTBUG-31868
Task-number: QTBUG-31476
Change-Id: Ic3ba32eeef21b69b922bd3d4feb111101559d132
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-06-21 12:07:00 +02:00
Friedemann Kleint
5c5d19e874 WMF-plugin: Fix warnings about unused variables.
Change-Id: I2b7864463799b23418fc4c3099d73a63709fe8c5
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-05-27 16:11:29 +02:00
Sze Howe Koh
f4348fe3ae Decouple qmediametadata.h from qmultimedia.h
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>
2013-05-14 11:27:05 +02:00
Yoann Lopes
2db2cde0d8 WMF: removed unnecessary dynamic_cast.
Task-number: QTBUG-29722

Change-Id: Ia0e5c8fb90b231a8d9764524709d5848397c2afb
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2013-02-19 14:22:38 +01:00
Yoann Lopes
101c78983a WMF: enabled HW-accelerated video decoding for the QML video item.
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>
2013-01-23 22:34:07 +01:00
Yoann Lopes
02add40392 WMF: fixed unresolved topologies when using the custom MediaSink.
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>
2013-01-23 18:31:54 +01:00
Yoann Lopes
381bfe879c WMF: fixed scrubbing and changing rate to 0 or negative values.
Task-number: QTBUG-29147
Change-Id: I3e32e520d676d120d60bcd07d122006c1346eb0d
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-01-23 17:58:14 +01:00
Oswald Buddenhagen
4760e1fb02 make use of qtHaveModule()
Change-Id: I14da5455b7dd4681254e1652395df5f5c65746bd
Reviewed-by: Tasuku Suzuki <stasuku@gmail.com>
Reviewed-by: Jonas Rabbe <jonas.rabbe@gmail.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-01-11 15:15:05 +01:00
Sergio Ahumada
399500f87e Update copyright year in Digia's license headers
Change-Id: Ia8c1c38aba1544603fada8c414cc856f365fd15b
Reviewed-by: Akseli Salovaara <akseli.salovaara@digia.com>
Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
2013-01-10 17:56:01 +01:00
Yoann Lopes
2d54a14ac1 WMF: added more metadata keys (on Windows 7 and later).
Change-Id: I01eebd0582d33eb3d581176bba2a84fa75db2463
Reviewed-by: Jason Barron <jason@cutehacks.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-01-08 19:56:43 +01:00
Yoann Lopes
60eb27dfef WMF: release video controls before releasing the session
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>
2013-01-07 09:34:43 +01:00