Commit Graph

89 Commits

Author SHA1 Message Date
Laszlo Agocs
96407d8d89 Fix bogus videonode plugin handling
Each plugin must provide its own unique key. Otherwise we will only ever
see one single plugin.

Right now running on i.MX6 is often broken because the imx6 videonode plugin is
not picked up since only the egl one is seen by the system. With the fix both plugins
provide their own unique key so both become visible.

Additionally, introduce a QT_VIDEONODE environment variable. This is useful to specify
which plugin to use. This is necessary in case multiple custom videonode plugins support
the same formats.

Change-Id: Iaa1988f8436dcb938cb9a95e2e0d68a4e92e113c
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2014-11-18 18:09:09 +01:00
Christian Strømme
b366a99eb1 Android: Use the new findClass() method.
Avoid local caching.

Change-Id: I1e30896da664c5a45c38c09412c16cb8ff70c5c7
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2014-10-17 13:35:35 +02:00
Yoann Lopes
ec24592186 Android: fix some problems with the media player.
- Correctly emit positionChanged signal. One of the problems with
  this was that QMediaPlayer automatically sends periodic
  position updates while playing a media. There's no need to have
  the same logic in the backend.
- Seeking after reaching the end of the media now correctly works

Auto tests included.

Change-Id: I6d5ecbae6e05f94a8aac1a0834cf57427adf219b
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-09-26 14:26:58 +02:00
Yoann Lopes
c1c205b772 Android: fix QMediaPlayer's state and mediaStatus signals.
Emit signals only after both properties are written to avoid having
incoherent values in signal handlers.

Task-number: QTBUG-40314
Change-Id: I6c8445e61cccf1a9803647329c4fa1f0e452f56d
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-09-24 14:46:38 +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
341b86c63f Android: fix retrieving metadata from assets, qrc and remote files.
We need the same logic as for the media player: local files and assets
must be loaded with a FileDescriptor.
Because of a bug in Android API level >= 14, remote files have to be
loaded in different ways depending on the version.

Task-number: QTBUG-40274
Change-Id: I6411b959064d22219cf981a4dc8f4f26cf16f65f
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-08-25 17:29:37 +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
Christian Strømme
a7d10a265a Android: Make sure we check and clear exceptions from the camera.
In several places we where ignoring the fact that we might get an
exception from the camera code on Android. Failing to clear them will
cause the application to to terminate.

Task-number: QTBUG-39425
Change-Id: Idfe40e1749f54d551d37dae25912d9ddbc3da01e
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-07-14 01:59:35 +02:00
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Yoann Lopes
cd0533166f Android: correctly report QMediaRecorder actual output location.
Report the recorded media location to have changed only when
recording is finished and successful.

Change-Id: Iee7565b9ba12d9de09f86dffb34c40936fee198c
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-03-17 13:47:41 +01:00
Yoann Lopes
29ba8cf4c4 Android: correctly report QMediaRecorder status.
QMediaRecorder should have the LoadedStatus before starting recording.
When recording the camera, the recorder should be considered loaded
when all prerequisites are met (viewfinder started, recording mode set
to video and capture ready).

Task-number: QTBUG-36828
Change-Id: I3279bdfdc2b361c7e0707c52e74ae47e0bb4a93d
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-03-17 13:47:04 +01:00
Yoann Lopes
b2f40ef75d Android: implement QCameraInfoControl.
VideoOutput will now take into account the camera sensor orientation to
adjust the viewport orientation, we don't need to apply a rotation on
the Android Camera anymore.

Change-Id: Ia7639f0a5711ab6cc6f80b9716bc1a6f389499b4
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-02-28 14:10:22 +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
Frederik Gladhorn
c6ec402d25 Merge remote-tracking branch 'origin/stable' into dev
Change-Id: Ie93615076177662e75d46f3d13beeb88d424b4a6
2014-02-12 14:11:35 +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
8fd3a5a198 Android: add missing information in frames retrieved with QVideoProbe.
The number of bytes per line was missing.

Change-Id: I0afbdcfd6d7195b7beb3fd09f4ed262f756be848
Reviewed-by: Denis Kormalev <dkormalev@ics.com>
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-01-30 14:34:00 +01:00