It doesn't actually require GstPhotography to be available at compile
time.
Change-Id: I738e71e4a108a40e79440096be6607afff0134fa
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Instead of always using xvimagesink as GStreamer backend for the
widget and window control (works only with X11), we now try to
pick a video sink that fits the current configuration.
It first tries a set of known video sinks that can work with
the Qt platform plugin in use. If none is available, it
dynamically picks a video sink available on the system that can be
used with our backend.
Even if the video sink is now picked in a smarter way, xcb is still
the only supported platform plugin. The reason is that it's the
only Unix plugin which can provide a valid native window handle.
Additional work is needed to support other plugins like wayland
or directfb.
Change-Id: I3843dea363d6a0b85a6cc1f2952783b743e48ac6
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
- Don't pretend we support changing the image or video capture
settings while the camera is active. The pipeline needs to be
restarted in order to renegotiate caps.
- Improved retrieving the supported capture resolutions and frame
rates when using wrappercamerabinsrc. We now always get the
supported values directly from the video source.
Change-Id: I107193288e370af105a25d16568a8f5a76022ada
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Don't try setting a sample rate or a channel count equal to 0.
Change-Id: Ib2e1728f0d9af09df9c4d3fd1322b5cb174a2981
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Exposure, Flash, Focus and Locks controls were always initialized,
even when the GstPhotography interface was not available (on desktop
for example), causing some warnings and fooling the user in believing
that these features were available.
These controls are now lazily initialized and only when
GstPhotography is available.
The zoom control is not compile-checked anymore since it doesn't
actually require GstPhotography.
Change-Id: I5e8315d796dd920c9c29ccfa4155707f5f0fd7dc
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Not all status changes where reported and setting the QCamera
to LoadedState was not actually loading anything.
State and status changes have been refactored.
Camera status is now reported directly by the camera session.
Setting the camera state to LoadedState now sets the camerabin to
GST_STATE_READY, that allows to query for camera capabilities without
having to start the camera (and have a valid viewfinder).
Change-Id: I249b1ad32690679ff34a427410bc709ed3ab461c
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Provide these controls only when the xvimagesink gstreamer element is
available. This allows QVideoWidget to fallback to QVideoRendererControl
when xvimagesink is not available.
Task-number: QTBUG-41618
Change-Id: I59f90ea8857c7ec0ffa08be9804e5458d95b79c4
Reviewed-by: Christian Stromme <christian.stromme@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 support for changing resolution and frame rate with mfw_v4lsrc.
This is essential for embedded applications that are not happy with
the default VGA@30.
This makes constructs like the following functional on devices like
i.MX6 with MIPI cameras:
Camera { viewfinder { resolution: "320x240"; maximumFrameRate: 15 } }
Change-Id: Ia297afdb5ca51c6e55ad45dce37fdab7da3a5cfb
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
[ChangeLog] New color filter property for QCameraImageProcessing.
Change-Id: I999e349e3e4f284b533fa62ba50903fbd21cb400
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
[ChangeLog][GStreamer] Implemented the face detection focus point mode
in the gstreamer camerabin backend.
Change-Id: Ia582d2fb5e74d5b438aa0038224c5e20e597d53e
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
It can be used to set which video source element should be used by
the camerabin.
Change-Id: I8d1cd8c4ba6fe5a89817699f645b0997e713aaca
Reviewed-by: Samuli Piippo <samuli.piippo@digia.com>
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
To get the recording duration, we were using the camerabin's position,
which represents the time since it was started, not the time it's been
recording to a file.
We now retrieve the camerabin's filesink position.
Change-Id: I68eeb25d1718666288655d22deea23e25de73b90
Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
This is not comprehensive since different encoders have different names
and representations for many settings, but it should cover bit rate for
most encoders, and quality and encodingMode for a number of common
encoders.
Change-Id: I0ba4e70c2f234e0deaaa02bdecc0f5198122c1e9
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
ff527de0 was submitted to 5.3 while cddbe873 was submitted to 5.4.
The former's behavior was not preserved when 5.3 got merged into 5.4.
Change-Id: I7435ea30634001ae6e87c316eb8a8ab6f5e988e3
Reviewed-by: Lisandro Damián Nicanor Pérez Meyer <perezmeyer@gmail.com>
Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
Do not build related stuff if not found.
Makes GStreamer support available on Hurd.
Task-number: QTBUG-39762
Change-Id: I1f70b6975e5bef99ab2441aac4d90508bc8b64bd
Reviewed-by: Lisandro Damián Nicanor Pérez Meyer <perezmeyer@gmail.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Cleans up duplicate device enumeration code so the devices listed by
the QMediaServiceProviderPlugin are the same as those in the
QVideoInputDeviceControl and includes face and orientation information
if available.
Change-Id: Iaa4c303c973bcf3e0f7c8c2fd7a7de629bccec86
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
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>
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>
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>
Many GStreamer objects were not properly managed or never released.
Change-Id: I38b3854e8b9e2264b5b647f331d3bb16b886e2d6
Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
Clear the tag list before syncing with reference set so old values
are removed and explicitly remove invalid QVariants from the reference
set so that the type correction doesn't result in invalid values being
written instead.
Change-Id: I7d1bdc95cd2a2d601720db84c9b3ef629477bc99
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
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>
This enables writing gps positioning information to captured images.
Change-Id: I663f7b94b5e6040865358df1ae45d67b73c54f92
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
GStreamer tags are typed and the correct type must be used when inserting
a value into a GstTagList or subsequent merges or data accesses can crash
because of invalid casts.
Found while adding additional mappings for GPS values.
Change-Id: I95ab40a480a4685bf4e69064315557faa9de288e
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Don't set profiles if no settings are specified.
Apply all settings before starting a pipeline as the mode can switch
without being restarted and incompatible video recording settings can
prevent the pipeline starting even in image capture mode.
Set audio encoding settings and encoder profiles if they are supplied.
Change-Id: I06febf977c2cae306383f9dbaae0f81f531b4757
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Orientation tags need to be transformed from the string tag returned
by gstreamer to the orientation in degrees. Date tags need to be
inserted with gst_date_time_new_local_time. Finally setting a tag
value shouldn't clear all other tags.
Change-Id: I28922148251084c12cf6c93d9b097fa5df41da9d
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Reloading the capture pipeline before recording is unnecessary and
introduces a big pause. Don't do it.
https://bugzilla.gnome.org/show_bug.cgi?id=649832 was resolved in gstreamer 0.10.23
Change-Id: I0de02af52dcc193bce7a4e3e61407ae1c2d3818c
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Guessing badly prevents the camerabin pipeline from loading at all and
the fallbacks used are not representive of the capabilities of most
cameras. So either stay out of the process and let gstreamer negotiate
a resolution if it can, or use a resolution supplied through the viewfinder
settings control by someone hopefully better informed.
Task-number: QTBUG-30842
Change-Id: Iec2dcc2476f38822f9e0d02301e46a1f49b7c6da
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>