| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Calling restartViewfinder() would try to access m_cameraSession without
checking if it was valid. This change adds guards around the calls to
restartViewfinder(), and one in the function itself.
Task-number: QTBUG-50282
Change-Id: I1f2b4d2b2342bf2dc2b7f28a7bcd00e08a0edb44
Reviewed-by: jian liang <jianliang79@gmail.com>
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Add locks around the global media player pool to avoid races. And since
we don't need any of the features a map provides us, there's no reason
to use one. In the most extreme case it's unlikely that there will be
more then a couple media players active at one time, so iterating over
continuously storage containing only pointers should be at least as
fast, if not faster, then a map or a hash (and use less space).
Change-Id: Id8d7810b43a9217da402a4b825d7beec891cdf74
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This should be the default when the wrapper is destroyed.
Note: It's not possible to re-use the instance after release() is
called.
Change-Id: I761cac05ed2c2cda49573c69c6803b136892c528
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Reading the meta-data can be slow and cause the UI to become
unresponsive. This is especially noticeable when the media source
is loaded from a remote location, or over a slow network.
To improve this situation the media-reader is moved off the main thread
and we wait until the media is loaded before starting the meta-data
extraction.
Task-number: QTBUG-46491
Change-Id: I0b9cf2ae6b8e08596a2f0b8fa0042d74604c46f9
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
| |\|
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
src/plugins/android/src/wrappers/jni/androidcamera.cpp
Change-Id: Ibb34f710b1dfb9a23b378462f31432581c6c26f4
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Not all camera operations are documented to raise exceptions, but they
actually might do so depending on the hardware/drivers.
Check for exceptions in all functions that could porentially fail
and react appropriately.
Task-number: QTBUG-49134
Change-Id: I633ca7f2e3aeb6532e1c445735e62135f52cf25f
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Some devices require MediaRecorder.setPreviewDisplay() to always be
called, even though the Android doc says otherwise.
Task-number: QTBUG-37837
Change-Id: I1e9b56f06e7c41bdf684f93b5ec7635f8ae9f379
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
QCamera can now pass raw frame data to its QAbstractVideoSurface.
The now deprecated Android camera API we're using doesn't allow to
get frame data without also displaying the frames in a SurfaceView
or a SurfaceTexture. To work around that, an invisible dummy
SurfaceView is used.
This allows to retrieve frames in the NV21, YV12, YUY2 or RGB565
formats, depending on the Android version and on the device.
Task-number: QTBUG-35416
Change-Id: I77b4f50505c3b91efb4b2288a57f50398922c0db
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
There's no need for callbacks to block any other threads from reading
from the camera pool, so use a read/write lock instead. There's also no
benefits gained from using a QMap, so use a QHash map instead.
Change-Id: Iaac74c0173d2dddc296f5d2c03116724ffdc588c
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
|/ /
| |
| |
| |
| |
| |
| | |
... in Android, AudioCapture and m3u plugins.
Change-Id: If06a97e49cfa4d32a41da2f043710cfdbd8a7b20
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The Android plugin had a function to convert from NV21 to RGB32.
It's now moved to the Qt Multimedia library and it supports additional
source formats. It could be further improved with more SIMD code, it
could then become a public API.
Change-Id: Ibee349027048a263a1a7ea74dc51237f7747912c
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
|
|\|
| |
| |
| | |
Change-Id: I1373622a6d1fd0e2d35df2da79860a373056387f
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Since we internally use a fbo, use QOpenGLFramebufferObject::toImage()
to grab the pixel data and enable the use of map() on frames retrieved
using QAbstractVideoFilter.
Change-Id: If96e992e12e26091524913bb24926fa21d9d58cc
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
|
|\|
| |
| |
| |
| |
| |
| | |
Conflicts:
src/imports/multimedia/qdeclarativeaudio.cpp
Change-Id: I57c6252b084e4ed796f6f308b2e0c717d0f59b13
|
| |
| |
| |
| |
| | |
Change-Id: I6b281c9b2d02cf223e66e04e31fdd0268aa277fc
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The preview frame callback is cleared by the Android Camera whenever a
MediaRecorder is set up. We need to reset the callback after starting
the media recorder.
Change-Id: I604320b11eb3a7f6f8d7d3167d5aae371999be14
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
|
|/
|
|
|
|
|
|
|
| |
We try to link in Qt5PlatformSupport, which depends on libqtfreetype, which in turn
is not installed. However we don't really need Qt5PlatformSupport, only QtCore private
headers for the JNI bridge.
Change-Id: Ic6d577081327eda7b80ce03c6fb7fd5cf024d05f
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- When the video capture resolution or the image capture resolution
changes, we now always set the viewfinder resolution to the highest
available one with the same aspect ratio as the capture resolution.
We were previously not doing anything if the new capture resolution
had the same aspect ratio as the current viewfinder resolution.
- Some devices don't support using a viewfinder resolution different
from the video capture resolution. Make sure we handle this case.
Change-Id: I8d3ab7b01c56ed78d1ca838a522ba459692fc332
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
|
|\
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
.qmake.conf
src/plugins/avfoundation/camera/avfcamerasession.h
src/plugins/avfoundation/camera/avfcamerasession.mm
Change-Id: Ib2e25d907a7069591920d2f69e007f314cc0fd85
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In QAndroidCaptureSession::stop() we call restartViewFinder() which
eventually calls QAndroidCaptureSession::stop() again, but this time
the media recorder object is already released.
Task-number: QTBUG-45637
Change-Id: I943c423398a99d98ccda1063fc16e47cba470deb
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It was the backend's responsibility to handle resource files in an
appropriate way. In practice, it was either not handled at all,
or implemented in an almost identical manner in every backend
that does handle it.
This is now dealt with in QMediaPlayer, always passing to the
backend something it will be able to play. If the backend has the
StreamPlayback capability, we pass a QFile from which it streams
the data. If it doesn't, we copy the resource to a temporary
file and pass its path to the backend.
Task-number: QTBUG-36175
Task-number: QTBUG-42263
Task-number: QTBUG-43839
Change-Id: I57b355c72692d02661baeaf74e66581ca0a0bd1d
Reviewed-by: Andrew Knight <qt@panimo.net>
Reviewed-by: Peng Wu <peng.wu@intopalo.com>
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
|
|\|
| |
| |
| | |
Change-Id: Id24f14bef17b86e7027e055473f0357854780979
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When loading the first media while the video output was not yet ready,
mediaChanged() and mediaStatusChanged() signals were not emitted.
That's because in that particular situation, the backend believed
the delayed loading was a reload of the same media.
Change-Id: If5dfbf383ea2dac065fc26b70640ebfb2c52862d
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
|
|\|
| |
| |
| | |
Change-Id: I5575a4ba13212c9bfe73a3de3ef17c6528beafc3
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The viewfinder resolution must be in the same aspect ratio as the
image capture resolution. When adjusting the viewfinder resolution to
comply with that restriction, we assumed that the ratios had to be
exactly equal. Though, in practice, there can be a small difference.
For example for resolutions 2592x1952 (ratio=1.3278) and resolution
640x480 (ratio=1.3333).
Task-number: QTBUG-37525
Change-Id: Ia5a6dd3a4a6d901b24bf74f8aa4e34bffe61f89b
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
|
| |
| |
| |
| |
| |
| | |
Task-number: QTBUG-44383
Change-Id: I2c63d5530ad76474ccad8ad69493419dd46032fa
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.
Change-Id: I1c6faa4f59f8eca54f01ef20941fa60161dd7872
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add the QAbstractVideoFilter base class and integrate it with VideoOutput.
This can be used to perform arbitrary filtering or image processing
on the frames of a video stream of a VideoOutput element right before
the OpenGL texture is provided to the scenegraph by the video node.
This opens up the possibility to integrate computer vision
frameworks or accelerated image processing with Qt Quick applications
that display video streams using Qt Multimedia.
Conceptually it is somewhat similar to QVideoProbe, this
approach however allows modifying the frame, in real time
with tight integration to the scenegraph node, and targets
Qt Quick meaning setting up the filter and processing the results
of the computations happen completely in QML.
[ChangeLog] Added QAbstractVideoFilter that serves as a base class for QML
video filtering elements that integrate compute, vision, and image processing
frameworks with VideoOutput.
Change-Id: Ice1483f8c2daec5a43536978627a7bbb64549480
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
|/
|
|
|
|
|
|
|
| |
[ChangeLog][GStreamer][Android] Camera exposure mode extended to support
Action, Landscape, NightPortrait, Theatre, Sunset, SteadyPhoto,
Fireworks, Party, Candlelight, and Barcode modes.
Change-Id: I13d4bb042d27c0bd2ffcd369882b56bbabc84335
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
| |
Avoid local caching.
Change-Id: I1e30896da664c5a45c38c09412c16cb8ff70c5c7
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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>
|
|
|
|
|
|
|
|
|
| |
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>
|
|\
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/gsttools/qgstreamervideoinputdevicecontrol.cpp
src/plugins/gstreamer/camerabin/camerabinserviceplugin.cpp
src/plugins/gstreamer/mediacapture/qgstreamercaptureserviceplugin.cpp
Change-Id: Ic854589562d2deeaa0ebf75840cb8a2ee32e99de
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
|/
|
|
|
|
|
|
|
| |
- 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>
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
| |
Change-Id: I6dfc4e13b8a0bccb1bcfead728f7e1ddb7b58bb4
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
| |
- 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>
|
|
|
|
|
|
|
| |
Makes the abstraction more clear.
Change-Id: Ia9a7b0b157e1182158cd26b62775d13f6c5e1727
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
|
|
|
|
|
| |
Change-Id: I3400b18379242ea4d1b4f94f5da6b60c64d551e4
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
|
|
|
|
|
| |
Change-Id: I2ce15c8475da3186f128ba59b7c58f9b5b0a67e1
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|