Commit Graph

471 Commits

Author SHA1 Message Date
Yoann Lopes
235c863db9 Android: fix QMediaPlayer::bufferStatus value.
It was returning the buffering progress for the whole media, which is
not what is expected according to the documentation.
It should return instead how much the playback buffer is filled. This
information is not available on Android so we simply return 100% when
the status is BufferedMedia or BufferingMedia, 0% otherwise.

Change-Id: I9fb55a9317948ba9375291a57bbf100f186382a2
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-05-15 15:12:18 +02:00
Christian Strømme
469f9a0c07 Android: Fix namespace usage.
Make it possible to build multimedia with a Qt namespace

Change-Id: Ibaeaf7edb38f8d784b8d0fcb9a26ca712488c23b
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-05-12 15:30:16 +02:00
Yoann Lopes
101dce7a29 GStreamer: disable clock syncing in video sink for live sources.
Task-number: QTBUG-38465
Change-Id: Icdf2df36b9b3c09dd047e60ac24e221a3d233c6f
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-05-09 19:48:53 +02:00
Yoann Lopes
5339aed040 Moved QMediaStorageLocation out of the Android plugin.
It's now a private API in the QtMultimedia library in order to be
accessible in other plugins.

Change-Id: I63541de1e8c540cebc210f9037646ce74d866c6f
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-05-09 16:33:12 +02:00
Andreas Holzammer
c9a3bbc3e6 [QNX] Introduce env variable for default audio sink
Make it possible to change the default audio sink
via a environment variable.

Change-Id: Id0e14318fc99a896b8a41196941b758a31d23600
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
2014-04-25 10:46:51 +02:00
Jani Heikkinen
7a88dd8c97 Merge remote-tracking branch 'origin/release' into stable
Change-Id: Ieb521fb1e9f297a167eea19c771cb5915c01df97
2014-04-23 12:45:21 +03:00
Christian Strømme
b088962950 Android: Camera code clean-up
Change-Id: Ib400afde12067764c3dcc0f44e40ddc1abb3012f
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-15 16:46:57 +02:00
Christian Strømme
60a911096f Android: Use QMutexLock in camera callbacks.
We should not release the locks before the native callbacks returns.

Change-Id: Ia2691f6c5be66a3dcf371e48e3bac7498b401833
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-15 16:46:49 +02:00
Christian Strømme
b33e6d4672 Android: Release the surface texture when not in use
With some Android versions the preview texture is released when the
application is suspended. If we don't release the texture in our
code, the preview will be empty when the application resumes.

Task-number: QTBUG-38165

Change-Id: I72244727081d8f94ee5f6cb0ab660ca59f4bb2de
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-12 06:40:28 +02:00
Christian Strømme
8a047ef087 Android: Use Q_GLOBAL_STATIC instead of a static QMap
Change-Id: I7b65e0874051c4ef504914a0bd66e8471ec34fa7
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-09 16:13:38 +02:00
Christian Strømme
03672d570d Android: Fix the signature for setOnInfoListener.
The argument part of the signature should be OnInfoListener and not
OnErrorListener.

Change-Id: I735fe1b0338b66c2f729254ed9e3251136781cbe
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-09 16:13:38 +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
464ed66119 GStreamer: correctly get metadata from live sources.
For some unknown reason, "iradio-mode" was set to false on the
source element, which was preventing new metadata to be received
when playing live streams.

Task-number: QTBUG-37640
Change-Id: Ib90297e81e26a99c3dfc753bdcd5cbd1ee2f6764
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-04-09 13:43:42 +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
Christian Strømme
6fb0d97838 Android: Fix QtMediaRecorder
Don't extend the MediaRecorder class as this causes ART to fail when it
doesn't find the postEventFromNative() function.

Task-number: QTBUG-38166

Change-Id: Ia38ce4558a2cc95a9b4cd05b9f926d41e53fdc0d
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-08 00:21:41 +02:00
Christian Strømme
a8854cc549 Android: Use androidSdkVersion() to get the API level.
Change-Id: Idc0b09ab2dc5d93e8da8dab3bd0e99e27fbc57e1
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-08 00:18:04 +02:00
Christian Strømme
a241874a7f Android: Remove inheritance to QJNIObject in the Camera wrapper
The QJNIObject was never intended to be used as a base class.

Change-Id: I4986aeaebecd6e4136fed311e69368e20da4d060
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-08 00:15:32 +02:00
Christian Strømme
ebf9528eae Android: Fix MediaRecorder wrapper
The QJNIObject was never intended to be used as a base class.

Change-Id: I8311f909a37aeae6040eba4471b379cfc732297b
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-08 00:12:38 +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
Fabian Bumberger
b770fefa81 QNX: Fix MediaPlayer states handling
Task-number: QTBUG-37753
Change-Id: I61ff490f061dedd8a9bdc22d76969d9afb9a6795
Reviewed-by: Bernd Weimer <bweimer@blackberry.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
2014-04-07 15:02:57 +02:00
Oswald Buddenhagen
f78193c730 let videonode plugins declare that they extend QtQuick
Change-Id: I4facc9ca0616927f7b1101cecb989fece38c2f7a
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-04-07 11:51:56 +02:00
Yoann Lopes
bfccbcfc4e DirectShow: fix media seeking while stopped.
When changing the position of a media player while stopped, playback
was automatically resuming. We now cache the value and actually set the
position only when starting playback.

Task-number: QTBUG-38068
Change-Id: Ib35302e01967d70350125f9ad920551df2a3c25b
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-04-07 11:51:22 +02:00
Yoann Lopes
d3ba2d6f3f GStreamer: cleanup system includes.
Replaced some linux includes with <private/qcore_unix_p.h> to be more
portable.
Use qt_safe_open() and qt_safe_close() instead of ::open() and
::close().

Task-number: QTBUG-38061
Change-Id: Idb3f50d070ec1701cafba98e79e2e85824653a3a
Reviewed-by: Lisandro Damián Nicanor Pérez Meyer <perezmeyer@gmail.com>
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-04-07 11:50:29 +02:00
Yoann Lopes
3d51c9565d GStreamer: each QMediaPlayer now has its own volume by default.
We were using the volume property of GStreamer's playbin element to set
the volume. This could behave differently depending on the system
configuration; it could affect the system volume or the media player
own audio stream.
We now use a 'volume' element to do software attenuation on the audio
data sent to the audio sink, it allows each QMediaPlayer to always have
its own volume.
To preserve the previous behavior, developers can set the
QT_GSTREAMER_USE_PLAYBIN_VOLUME environment variable to true.

[ChangeLog][QtMultimedia][GStreamer] QMediaPlayer::setVolume() doesn't
change the system volume anymore (it could be the case before depending
on the system configuration). Set the QT_GSTREAMER_USE_PLAYBIN_VOLUME
environment variable to true to restore that behavior.

Task-number: QTBUG-30317
Task-number: QTBUG-36511

Change-Id: Ia0249962a74ac21fb110fcb634c08706f8d5767a
Reviewed-by: Wouter Huysentruit <wouter_huysentruit@hotmail.com>
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-04-03 12:59:59 +02:00
Fabian Bumberger
3a18ec30f0 BlackBerry: Fix the rotation of the viewfinder
This fixes the rotation of the viewfinder. We have to adjust the orientation
depending on the primary screen orientation. On a keyboard device, the viewfinder
would not rotate at all (same if auto orientation is turned off).

Task-number: QTBUG-37894
Change-Id: I2bf955fb3303ed236d3234154ded94fe78607455
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Reviewed-by: Bernd Weimer <bweimer@blackberry.com>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
2014-04-02 16:31:53 +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
Fabian Bumberger
36649887e8 QNX: Remove most of the CPU overhead for video rendering
This patch uses the GL_OES_EGL_image extension to create a OpenGL Texture handle
for a libscreen pixmap. If the extension is not available it uses the "old"
technique as fallback where the image data is copied into a QImage.

This reduces the CPU load by more than 70% and allows HD videos to be played jitter-free.

Task-number: QTBUG-37752

Change-Id: I4cad22c39390e4cf9eb5be5f0bfe446544a11b9e
Reviewed-by: Bernd Weimer <bweimer@blackberry.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
2014-04-01 15:01:41 +02:00
Yoann Lopes
d2b54b360e CoreAudio: fix supported channel count.
We were using the number of channels actually used by audio devices as
the maximum channel count. This is wrong as CoreAudio can automatically
split or merge channels in order to accommodate the device.
We now assume all channel configurations are valid.

Task-number: QTBUG-37956
Change-Id: Ia8e8bbea8543caa7fecda305be74a2953b92fd25
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-04-01 13:43:13 +02:00
Zhang Xingtao
9a4dd5fe8e fix: 'm_state' was not declared in this scope
Error occurred when building with DEBUG_PLAYBIN defined.
It should be m_currentState from context.

Change-Id: Iad59966ca19c9d1b589fc8641599494436a0a5f3
Reviewed-by: Liang Qi <liang.qi@digia.com>
Reviewed-by: Jing Bai <doris.bai@gmail.com>
2014-03-28 11:22:19 +01:00
Dyami Caliri
5c09bba979 CoreAudio: Mismatched new[]/delete in several places.
The CoreAudio plugin code in QtMultimedia had several different places
where an array was allocated with "new[]" and deleted with "delete".
Fixed by deleting with "delete[]".

Task-number: QTBUG-37861
Change-Id: Id85bc07a054ad161b0403cc0fe5c56ec5b41d4e3
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-03-27 18:01:09 +01:00
Christian Strømme
ccce4e3da2 Android: Clean-up in jmultimediautils class.
Remove unused code.

Change-Id: I2c0db45dd95e6a79387bba1b1ccd4b62b7d22aec
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-27 16:44:24 +01:00
Christian Strømme
4ba7b22390 Android: Fix MetadataRetriver wrapper
The QJNIObject was never intended to be used as a base class.

Change-Id: Ic4effd5e1c89a08515c756bd5092fb1e1eead688
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-27 16:44:20 +01:00
Christian Strømme
cc41c7df3c Android: Fix QtSurfaceTexture
Don't extend SurfaceTexture as this causes ART to fail when it doesn't
find the postEventFromNative() function. The postEventFromNative()
function was implemented sometime after API 11, so to avoid this
situation we can use composition instead.

Task-number: QTBUG-37605

Change-Id: Ie1013d218291ba0035f1bb18a0c0655fd2170bfd
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-27 16:44:06 +01:00
Christian Strømme
3c3e2c324b Android: Don't call release() unless it's necessary.
If the mediaplayer is in either Idle or Uninitialized state, then there
is no need to call release again.

Change-Id: Idb6f2d9ea7aad7a9036e7e9a534c3bd296324068
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-27 16:43:59 +01:00
Yoann Lopes
09e3d8a28e Blackberry: implement QCameraInfoControl.
We also now correctly report the default camera to be the rear camera.

Change-Id: Ie96b2950344194637c8feace77246f036c9a3757
Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
2014-03-27 16:43:51 +01:00
Christian Strømme
5869d48441 Android: Fix reload check in onStateChanged().
The condition was missing the Uninitialized flag.

Change-Id: I555f4eae6cc33bee0a4925e626dd56041e4b0471
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-27 16:43:39 +01:00
Yoann Lopes
023c6ebcb9 GStreamer: fix memory leaks.
Many GStreamer objects were not properly managed or never released.

Change-Id: I38b3854e8b9e2264b5b647f331d3bb16b886e2d6
Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
2014-03-21 19:16:09 +01:00
Yoann Lopes
60ba0afbde GStreamer: don't try to seek when it's not supported.
This eliminates warnings on the console.

Change-Id: I6a0509dba4a0f7ec6fad33f8803be746f425a616
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-03-21 19:16:03 +01:00
Christian Strømme
dcf11bba3c Android: Make the Mediaplayer more robust
In some cases the the Android media player would get into a unexpected
state and we where then not able to recover.
With this patch we monitor the state changes more closely and recover
when possible.

Task-number: QTBUG-35651

Change-Id: I142c63fbbf716d3f94ebdcf016a7cadad7b13207
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-21 00:31:17 +01:00
Andy Nichols
ea5d56c5ab AVFoundation: Add QVideoWindowControl support
This adds the capability to render videos directly to native
window surfaces when using the AVFoundation plugin.  This adds limited
support for displaying videos from QML on iOS.  These videos are
displayed in a CALayer above the QQuickWindow, so it will not be
possible to render any QtQuick items on top of a video using the
QVideoWindowControl to provide video.

[ChangeLog][QtMultimedia][iOS] Add limited support for playing videos in
QtQuick on iOS (Videos are played on top of scene with limited transform
support).

Change-Id: I80381d9a07b45b6fa1959678166e6da0004f8c19
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-20 23:06:20 +01:00
Bernd Weimer
d8764171d6 QNX: Evaluate mm-renderer buffer status
In the playing (or paused) state the media status should reflect the
buffer state, it should not stay in the loaded media state.

Mm-renderer differentiates between buffer "status" and "level".
Unfortunately, QMediaPlayer's buffer status maps to mm-renderer's
buffer level.

Change-Id: I22ea8dc83cee975fc4aa1a6de4f172def042a9a8
QT-BUG: 37166
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
2014-03-19 15:21:03 +01:00
Andy Shaw
73de758274 Prevent crash when there is no camera device available
If you try to use QAudioInputSelectorControl with the iOS Simulator then
it would crash as there is no camera device available. This prevents a
crash from happening in that case.

Change-Id: I3904f3d299a11a6df21e66a1138a4319cc0b8a5c
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-03-19 10:56:30 +01: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
a6e0dd525a OpenSL ES: lazy initialization of QAudioInput's supported formats.
Change-Id: I51cdd35a944c990ce7df999bcb6063342e98c62d
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-03-18 14:47:48 +01:00
Yoann Lopes
c24c3b171f Android: fix QMediaRecorder failing to start in some cases.
Because camera operations are performed in a dedicated thread, starting
a recorder was sometimes failing because the camera was not yet ready
(unlocking it was not done yet). Camera locking and unlocking are now
synchronous operations.

Change-Id: I92c3c2f3666b63e7451e4ee1ab89dcbc85ae6c24
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-03-17 14:46:53 +01:00
Yoann Lopes
5b4b108d64 Android: print Java traces for MediaRecorder when in debug mode.
Change-Id: Ie39dd16227c49c8c07831750869e0cc28d2cc8ee
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-03-17 13:48:57 +01:00
Yoann Lopes
8463aae9c0 Android: restart camera viewfinder after a recorder error.
Change-Id: I33f083fda5c10cfb997a21100c0ec3d4a314aee0
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-03-17 13:48:38 +01:00