Commit Graph

551 Commits

Author SHA1 Message Date
Yoann Lopes
f352e44df9 Android: fix setting camera parameters from QML.
We were ignoring new parameter values when the camera was not loaded.
All QML properties that were set at initialization time were therefore
ignored since the camera is not loaded at that point.
We now store all camera parameters and apply them once the camera is
loaded.

Task-number: QTBUG-39307
Change-Id: If66d768941c25cede2aea1b48fb928c4735c10f8
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-07-10 16:00:06 +02:00
Yoann Lopes
f935715767 AVFoundation: correctly pass output URLs to AVCaptureMovieFileOutput.
The URL string passed to NSURL was not fully encoded, causing the
recorder to start with a nil URL, leading to an exception.
We now use QURL::toNSURL() which automatically encode the URL.

Task-number: QTBUG-38668
Change-Id: I06bf881a0a25fb37efd8784ebf518c8b90ecc6b4
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-07-10 15:59:53 +02:00
Yoann Lopes
85f4b8177c PulseAudio: make plugin more robust.
Handle more thoroughly error cases, such as when the PulseAudio daemon
does not respond or terminates while QAudioInput/QAudioOutput is
active, in which cases it used to crash or hang.

We now correctly emit the error signal and change the state when errors
occur.

Task-number: QTBUG-29742
Change-Id: I173d35aece60d96e578785e1522cf78b24dcb8b8
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-07-10 15:59:37 +02:00
Frederik Gladhorn
074bd6ab37 Merge remote-tracking branch 'origin/5.3' into dev
Change-Id: I38ebcb3da0e4d2acc9e7108c9579ea98323864e0
2014-07-10 10:14:36 +02:00
Andrew den Exter
4ba4f1a51d Implement customFocusPoint in camerabin backend.
Send a regions-of-interest event containing a rectangle surrounding the
focus point to the camera source when the camera's focusPointMode
is QCameraFocus::CustomFocusPoint.  Reset the regions-of-interest if the
focusPointMode changes to any other value.

[ChangeLog][GStreamer] Implement customFocusPoint in camerabin backend.

Change-Id: If75405733b18d476dff5467abae3f08271caf06a
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-07-10 01:39:22 +02:00
Dyami Caliri
a63da4b593 QAlsaAudioOutput remove async callback.
The async callback mechanism in ALSA is prone to deadlock.
There was already a timer fallback mechanism that appears to be
sufficient.

Task-number: QTBUG-39677
Change-Id: I44b59e6b16eea1c9c4eeb6967335ce4f468cf3c4
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-07-04 16:14:48 +02:00
Dyami Caliri
a391ad4763 QAlsaAudioInput remove unused async_handler member.
The member 'ahandler' was not used and will not be used. Removing to
avoid confusion.

Change-Id: I35f3659a650f109c564c6308573a211f324e5411
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-07-04 16:14:20 +02:00
Yoann Lopes
fbd57c983d GStreamer: correctly handle URLs from QMediaRecorder::setOutputLocation
Task-number: QTBUG-39949
Change-Id: Idf575b126bd3531655c8abda55c9e04149a4fb85
Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
2014-07-03 15:49:53 +02:00
Yoann Lopes
a7f924186c GStreamer: fix looping a media when it's loaded from qrc.
When playing a media for the second time, the backend resets the
the media by calling setMedia() with the same value.
The problem is that setMedia() clears the previous media, which is
a QFile in this case and is the one we are trying to set again...
The QFile was deleted, causing the current media to be a dangling
pointer.

Change-Id: I6854b40212fd084d1e31e756a040a02ad103b7ba
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-07-03 15:45:46 +02:00
Kai Koehne
124b6a4ee6 Fix compilation with -no-opengl
Change-Id: Ib8f39dcea58018f076d6a3fa733303958c707f1a
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2014-07-01 10:25:51 +02:00
Yoann Lopes
c8b88cd027 Android: fix crash when stopping the camera while a recording is active
When unloading the camera, any active recording is automatically
stopped, which in turn triggers the viewfinder to be restarted...
We don't try anymore to restart the viewfinder after stopping recording
unless the camera is still active.

Change-Id: I77e4e3fc8d7116ac660d8bb23f6c400ebed4ffed
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-06-30 16:03:26 +02:00
Yoann Lopes
23d7bf7ac8 Android: fix registering recorded videos with the Android media scanner
Change-Id: I6dfc4e13b8a0bccb1bcfead728f7e1ddb7b58bb4
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-06-30 16:02:22 +02:00
Yoann Lopes
99ce312731 Android: correctly update camera focus zones.
When setting a null custom focus point, we were correctly resetting
the focus zones but we were not emitting the focusZonesChanged signal,
causing the QML Camera to not update its focus zones.

Change-Id: I59940c4cd2979fa08dc26566dc0f6d19e503f64f
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-06-30 14:48:08 +02:00
Andrew den Exter
310402c6c1 Fix stuttering with RTSP streams.
Set the rtspsrc buffer-mode to 'slave' which is the default in
gstreamer 1.0 and doesn't cause the stuttering apparent with
the default buffer mode.

Change-Id: I4241fbe638c176ad93f441a3f76a1041ef1cb6bb
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
2014-06-26 01:45:52 +02:00
Yoann Lopes
eb75bf8e3b Enable both PulseAudio and Alsa plugins on Linux.
It was previously only one or the other, and all Qt packages for linux
were only including the PulseAudio backend.
Now, both will be included; if PulseAudio is available it will be used
by default, otherwise it will fall back to Alsa.

Change-Id: I393c7728ec9741b1b58681608c184cd1b92126b1
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
2014-06-19 15:34:06 +02:00
Sergio Ahumada
d691f5ca2b Merge remote-tracking branch 'origin/5.3' into dev
Conflicts:
	.qmake.conf

Change-Id: Iecd8d7b94e52a8981526b12cffa40e99870ba62f
2014-06-14 21:59:24 +02:00
Yoann Lopes
eadf1c8c41 Fix static initialization order fiasco in some plugins.
Some static variables were initialized using QMediaMetaData
values, which are also statically initialized.

Task-number: QTBUG-39202
Change-Id: Ibedc0a77d96cdfa575aad122c4ec654e6830e1f7
Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
2014-06-06 11:12:21 +02:00
Christian Strømme
8a66559e0b Android: Use a file descriptor for all local media files.
Using a fd is more consistent across different Android versions and
also works with files that are in the applications private storage.

Task-number: QTBUG-39346
Change-Id: I462822459d12d7842d15f1cb7caafc75c18fe32c
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-06-05 23:25:23 +02:00
Yoann Lopes
a3a6670172 Android: don't start camera preview until the viewfinder is ready.
If no video output is set for a camera, don't try to start the camera
and report an error.
If the video output is not ready, delay starting until it is.

Change-Id: Id08e31a4e795b71ac036a6532e9499ca5670d790
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-06-05 11:42:16 +02:00
Yoann Lopes
cf4aba93e4 Android: fix media player's volume.
- Preserve the volume when changing the current media.
- Don't actually set a new volume when the media player is muted.
  Intead, save the value to apply it when setMuted(false) is called.

Change-Id: I829eb280406ea35ff82a0c2638b2d19cf1d90643
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-06-05 11:42:16 +02:00
Robin Burchell
ae567c3f35 Handle resource requests through singleton.
Many applications have multiple objects dealing with audio, and each
needs to request audio resources from resource policy manager. Resource
policy manager handles audio resources per-manager. Each ResourceSet
instance creates new manager, which causes applications having multiple
audio objects to fight for the audio resources internally, even though
the streams are played from the same process id.

To overcome this in QtMultimedia applications, handle all ResourceSet
operations through singleton. This way one client has only one manager
id registered, and resource acquiring and releasing can be limited to
only when no resources are acquired or all resources are freed. To
reduce unnecessary noise from resource policy plugin to the clients,
keep track of client states and only notify clients which themselves
request for resources etc.

Change-Id: Ifa4488a9f6298a3f601399e9d339f7bd819be757
Done-with: Juho Hämäläinen <juho.hamalainen@tieto.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-06-04 13:58:08 +02:00
Christian Strømme
b9b06defc7 Android: Don't expose java calls in the control classes.
Makes the abstraction more clear.

Change-Id: Ia9a7b0b157e1182158cd26b62775d13f6c5e1727
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-06-04 13:19:40 +02:00
Christian Strømme
1ef3ef6a30 Make it possible to build multimedia for embedded Android
Change-Id: I3400b18379242ea4d1b4f94f5da6b60c64d551e4
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-06-04 13:19:28 +02:00
Christian Strømme
9214742012 Android: Rename the wrapper classes
Change-Id: I2ce15c8475da3186f128ba59b7c58f9b5b0a67e1
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-06-04 13:19:21 +02:00
Yoann Lopes
5a0e49369d OpenSL: don't try to enqueue new buffers when the buffer queue is full.
It could lead to corrupted sound since we were overwritting buffers
that weren't played yet.

Task-number: QTBUG-39015
Change-Id: I4c015c5383b813955998145d6316acc8c22f19a3
Reviewed-by: jian liang <jianliang79@gmail.com>
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-05-30 14:47:20 +02:00
Yoann Lopes
69598e22f3 Remove C++11 code in iMX6 video node plugin.
Use Q_FOREACH instead of C++11 range-based For loops.

Task-number: QTBUG-38900
Change-Id: I2b9f8444f2ac3ae71811112244c687cab79753c9
Reviewed-by: Thomas Senyk <thomas.senyk@pelagicore.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-05-30 14:46:42 +02:00
Yoann Lopes
92096afdb4 Android: fix calling start() and stop() on the video surface.
We restart the surface when the frame size changes, though we were
not using the correct function to get the surface's current frame size.
This was causing start() and stop() to be called for every frame.

Change-Id: I8ff4b4852cb7fcc92ac3b1b3ad7bf991d7bddc6b
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-05-30 14:46:13 +02:00
Christian Strømme
7e668fe58f Android: Fix loading from qrc
On Android < 4.1 our temporary file is discarded without checking the
content. With this change we just open the file and pass the fd to the
mediaplayer instead.

Change-Id: I9233822725d8987c572b2d0b598721cee886de80
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-05-21 00:14:15 +02:00
Yoann Lopes
93e73fd8ee DirectShow: remove debug output.
Task-number: QTBUG-38924
Change-Id: Ibc08fd99f6eb10035e4d7da963d4d384012bbdbf
Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
2014-05-19 14:57:23 +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
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