Commit Graph

54 Commits

Author SHA1 Message Date
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
Yoann Lopes
67b86a9fbd Merge "Merge remote-tracking branch 'origin/stable' into dev" into refs/staging/dev 2014-01-30 14:32:29 +01:00
Yoann Lopes
b690a4d902 Android: fix crash in QAndroidCaptureSession.
Don't try to apply video recording settings until a camera is actually
started.

Change-Id: I5348b91669835b9d776f56a3f49e3f8a11533d15
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-01-29 14:30:12 +01:00
Frederik Gladhorn
819f30df33 Merge remote-tracking branch 'origin/release' into stable
Change-Id: Ifcb0e0bac29c11980ea2a9d67b12e1b79c4bd9f6
2014-01-22 11:36:50 +01:00
Yoann Lopes
a0746fe49c Android: fixed video rendering with multiple media players.
It seems all Android media players share the same video buffers, which
results in textures containing frames for the wrong media player.
When getting a new frame, we now copy it into a FBO in order to avoid
that another media player overwrites the frame being shown on screen.

Task-number: QTBUG-35868
Change-Id: I6701cf7368a3ef9e73d649c3ece1f206cafd5bb3
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-01-20 17:26:21 +01:00
Yoann Lopes
437db8df51 Android: fixes custom camera focus point.
The custom focus point passed to the camera was in viewport orientation
but should be in sensor orientation. The two might differ.

Task-number: QTBUG-36208
Change-Id: Id272402090c2814e02abc527c0f6a6e932a60081
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-01-20 10:08:30 +01:00
Yoann Lopes
a52f552d42 Android: optimized NV21 top ARGB32 conversion.
Now based on fixed-point arithmetic and uses pre-generated lookup tables
for YUV coefficients and RGB clamping.
The new implementation is on average 2x-3x faster than the previous one
(tested on the Samsung Galaxy S4).

Change-Id: I1daf12f7f9b2f2334e90e0ede79e6d83800f1db6
Reviewed-by: Denis Kormalev <dkormalev@ics.com>
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-01-17 15:11:24 +01:00
Yoann Lopes
30078eeee1 Android: fixes some issues with JCamera.
- Quit the worker thread only when the worker is deleted. This makes
sure all events are processed before terminating the worker.
- Correctly cache the preview size even when it's an invalid one.

Task-number: QTBUG-36204
Change-Id: I76055984e8ece3f7f40dba7dd89d28a4faa1e72e
Reviewed-by: Denis Kormalev <dkormalev@ics.com>
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-01-16 17:24:56 +01:00
Jędrzej Nowacki
e485e066ac Use QStringRef instead of QString whenever possible.
That way we reduce count of temporary QString instances.

Change-Id: Id806c68ea616828c2355c07b8576616fa6a8da17
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-01-15 17:12:41 +01:00
Denis Kormalev
0ebcf43f22 Android: QVideoProbe support for camera
QMediaVideoProbeControl sublclass added to capture service to make
QVideoProbe work with Android camera.

[ChangeLog][QtMultimedia][Android] QVideoProbe support for camera

Task-number: QTBUG-35416
Change-Id: I14d0a0e8abd14ee8f577e2901b976b8ed46eb320
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-01-08 16:09:27 +01:00
Denis Kormalev
a0df6c3836 Android: camera moved to a dedicated thread
Actual camera work moved to JCameraWorker which lives in dedicated
thread. JCamera now acts as proxy calling JCameraWorker methods with
invokeMethod (when it is needed).

[ChangeLog][QtMultimedia][Android] camera operations moved to a
dedicated thread

Task-number: QTBUG-35564
Change-Id: Ie4edcbf0869d56b0fef4ad0c820450cc77657fdd
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-12-23 12:17:58 +01:00
Denis Kormalev
ecce937a05 Android: fix camera preview
At some(?) devices we can't rely on one shot preview callback because
it receives data only after we start new previewing session. And this
cause situation when imageCaptured signal is never emitted.
This fix applies preview callback with already allocated buffers and
collects all preview images in these buffers. When we capture image -
we can simply fetch last preview image (if there was any) from c++ part.

Task-number: QTBUG-34993
Change-Id: I608750c344ca3c089f4673df4907e0f47e57e2ba
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-12-11 18:25:57 +01:00
Christian Strømme
966d4bc86f Android add support for qrc in mediaplayer.
[ChangeLog][QtMultimedia][Android] Enable mediaplayer to read files
from the Qt Resource system.

Task-number: QTBUG-31422

Change-Id: Iaaefb35566b623b78b9f8aa22daf6ac92fb35e67
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-12-09 18:09:20 +01:00
Yoann Lopes
13d7f835fa Android: fix camera viewfinder orientation.
The camera sensor on Android devices might be in a different orientation
than the device natural orientation. There is no API in Qt to know about
the camera orientation, so correcting the viewfinder orientation is not
possible without making guesses. This patch makes sure the viewfinder
orientation always matches the device natural orientation. For example,
if the camera is mounted in landscape, and the device natural
orientation is portrait, the viewfinder will automatically be rotated 90
degrees counter-clockwise.

Task-number: QTBUG-35086
Change-Id: Ia890872971d72657debe709f61edba27d09dec65
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-12-05 19:28:16 +01:00
Frederik Gladhorn
fb0620219b Merge remote-tracking branch 'origin/release' into stable
Change-Id: I53a7a2a3e096f76d50f2bb3ae125f6022de5c3f5
2013-12-03 18:22:20 +01:00
Christian Strømme
186aca3ba7 Android: Add missing 'L' prefix and ';' postfix in areaToRect()
While it works just fine without the post-/prefix, they are suppose
to be there...

Change-Id: I99365d37c70c65ccf0713d6b2d8330030b265e8e
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-12-03 14:10:56 +01:00
Yoann Lopes
fd3efc0163 Android: print a warning when using SurfaceTexture on Android 2.3.
SurfaceTexture is available since Android 3.0, print a warning when
camera preview or video playback is used on an older Android version.

Task-number: QTBUG-35075
Change-Id: Ie04c62df99048a25e8fd971e0708157d0d32c503
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-11-30 17:58:40 +01:00
Yoann Lopes
301baf2b68 Android: use correct format when capturing a picture to a buffer.
Don't decode the JPEG data to raw RGB using QImage. QCameraImageCapture
reports anyway that JPEG is the only supported buffer format.

Change-Id: Ib17760e4361b004775c002b686ef7529b3768aab
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-11-06 14:28:16 +01:00
Yoann Lopes
2412c298d4 Android: fix two race conditions in the media player.
start() could be called before the media player was marked as prepared.
When changing media, setMediaPath() could be called before the media
player was reset.

Task-number: QTBUG-34558
Change-Id: I886fd5f5008f76dcbc88c57d7b16a439b394d4a7
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-11-06 14:24:35 +01:00
Yoann Lopes
30cf028fb1 Android: fix camera preview showing black frames after restarting it.
Clear the camera preview size when stopping the preview in order to
force it to be reset when starting it again.

Task-number: QTBUG-34346
Change-Id: I0edf8d996348745b9aa7cf0790c16b6cd813b33b
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-10-29 20:26:24 +01:00
Friedemann Kleint
98a6eefda9 Add Linguist comment for translation of Drive-mode.
Translators not familiar with cameras might mistake it for
something related to driving a car.

Change-Id: If54a563a32af537d291b79253056b7b57e108f5b
Reviewed-by: Robert Loehning <robert.loehning@digia.com>
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2013-10-15 15:38:55 +02:00
Yoann Lopes
b49746b588 Android: fix media recording location.
When letting the plugin decide where to save the recorded media, doing
several recordings would always use the same output file instead of
creating a different one every time.

Change-Id: If352257d6c91ada8565c1463820321f84c9bb92f
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-10-09 18:02:44 +02:00
Yoann Lopes
28df116570 Android: fixed image capture preview.
We used to generate the capture preview from the video output, grabbing
the pixels of the last frame (in a FBO). This is not possible anymore,
we instead query the camera for a preview frame, which is in the NV21
format and needs to be converted to RGB.

Change-Id: I1c728b3a708a6f052a83aebf9f15f511eab7a02f
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-10-01 17:26:31 +02:00
Yoann Lopes
be7a6241e7 Android: refactor video renderer.
Removed the overhead of having to create a shared OpenGL context in the GUI
thread and pre-render the frame into a FBO.

We now directly render the GL_TEXTURE_EXTERNAL_OES in the QtQuick render
thread, using an Android-specific QSGVideoNode.
We also use a callback from the render thread to create the texture from
there and not have to create a separate shared OpenGL context.

Change-Id: I6c8eb94b47d0a03329c912701b8af3fb5ebd1876
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-10-01 17:26:21 +02:00
Yoann Lopes
2162d9a2cc Android: fix plugin json metadata.
Change-Id: I0f2feca44843760df13a938d9190daf2d447d645
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-09-26 12:26:18 +02:00
Christian Strømme
ac029c65f2 Android: Adapt the multimedia plugin to new QJNI API
Change-Id: Id87f5518724eed6c9de6d5d3b8141860bd511643
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-09-20 10:11:50 +02:00
Yoann Lopes
17480111ed Android: fix compilation on x86.
Task-number: QTBUG-33554
Change-Id: I4da7410d3b77ec6d72a73d3b6ceb7b76bb48d2b7
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2013-09-19 14:44:17 +02:00
Yoann Lopes
0a7882f6b3 Android: added camera support.
This patch includes all camera features: viewport, settings, image
capture, and video recording.
It also adds support for QAudioRecorder.

Change-Id: Ib962177cc8de4bac03f42a2bc0f534e03464bbfc
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-09-12 12:56:57 +02:00
Christian Strømme
ca769ba264 Android: Use isValid() to check if the jobject is valid.
Change-Id: I5ec67b9b2abfae2e2c2a44f0bcc7c72cb54beb49
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-08-21 13:31:53 +02:00
Yoann Lopes
4585518d52 Android: fixed media player buffering logic.
When the media is ready, the status should always transition to
LoadedMedia and then immediately to BufferingMedia or BufferedMedia.
Also, when the duration is queried before the media is ready but already
buffering, it should always return 0 to avoid errors from the Android
media player.

Task-number: QTBUG-32635
Change-Id: Ibcb9c23b4f64c4f9a1a8e0ef81989ae78cfb19ef
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-08-19 15:31:21 +02:00
Christian Strømme
6c941c6c2b Android: Make it possible for MediaPlayer to read from assets.
The Android MediaPlayer doesn't handle assets automatically, so we need to
open it and pass it in as a file descriptor.

Task-number: QTBUG-31422
Change-Id: Ic29c0ab6348d760cf21aa89ae423d41e15523976
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-07-09 14:46:49 +02:00
Yoann Lopes
5e7e8e04d1 Android: wait to have a valid video surface before loading a media.
Setting the video surface on the Android media player after it has
loaded the media doesn't work on some hardware.

Change-Id: I5e621a34ace9de458bfc65bfac8fa50c29cee9a5
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-07-09 09:41:32 +02:00
Yoann Lopes
1dfbe44d90 Android: release the Android media player before destroying it.
Change-Id: I18715efd7ff346a9f6f2214727ec66ee79ad0d33
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-07-09 09:41:17 +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
Christian Strømme
16a775d47a Android: Fix for uncaught java exception.
If an exception's getMessage() function returns a null object, we can't
send it directly to the Log function, as it will throw an exception...
To avoid this we can prepend the string from getMessage() with an empty
string.

Change-Id: Ie026cbf9af133352919a4536c152b6d35cb8c0a7
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-06-13 17:56:04 +02:00
Yoann Lopes
5c087bb615 Android: fixed crash when resetting the video surface.
Change-Id: I64a28cbcb8a48d13a9e1c98005da9f4cce821cb4
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-05-22 12:56:07 +02:00