Make sure the device format is always set in the same way.
We don't actually set the format anymore when it's the same as
the current one. We also make sure the frame rate is preserved.
Change-Id: I1c68239bc99d9c3cef920effcf47fc253220c26f
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
Since the active viewfinder resolution can be overridden by the image
and video capture resolutions, we need to re-evaluate the viewfinder
settings whenever the capture mode changes.
Change-Id: Ibdb7a070585cf67ebb2fcfb95ccbdd105f5f41cf
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
Make sure the video is recorded in the same orientation as the device.
That means the top of the video matches the physical side of the device
which is on top when starting recording.
This patch makes sure the behavior is the same as on Android. In a
future version, we should have an API to pick the desired orientation
of the recorded video.
Change-Id: Ia8bbfe621a0e54de3cb6bfe0a520f37e8a932539
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
QWinRTAbstractVideoRendererControl::setActive was using
QThread::requestInterrupt previously to indicate to the render thread
that it is supposed to quit.
However, when switching cameras you cannot tell the render thread to
continue rendering. Instead start() is called and then the render thread
recognized the previous interrupt request, resulting in a quit and no
further rendering happening.
Instead we wait for the render thread to complete by using shutdown().
Task-number: QTBUG-53722
Change-Id: Ibee2ed4f64400ca14c788984a73df4be0653ed2b
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
We would attempt to delete the AndroidCameraPrivate object twice if the
native call to open failed. On recent version of Android (~6.0), this
problem is harder to reproduce, as the camera is properly released when
the application goes into the background.
Task-number: QTBUG-53536
Change-Id: I064d276f9025924dfdb071aa52311d2b553c6953
Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
c.f. the constructor already doing the same for provider and the
various fields populated by initControls(), which init() calls.
Should be redundant (all QCamera constructors do invoke d->init() as
soon as they've constructed d), but better safe than sorry. Calms
Coverity (CID 22319).
Change-Id: Ibf5d13bb1ef17be8e66fa14ed5617b700051c495
Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
- "default" is a valid argument for snd_pcm_open(), let ALSA handle that
case rather than using the first device in the list.
- Don't add "default" in the list of available devices if there is
already one.
Change-Id: Icd41aa6677923a79faf6c90d0627eedd8700b91b
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
The texture renderer could end up in a situation where a frame could be
scheduled to be rendered after the renderer was reset.
Change-Id: Ie6b6c9d0b5f5851f14aa6eb5f8421196aff8c691
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
On OSX, it's not possible to reset the frame rate to the default value
by passing kCMTimeInvalid, so just set the first value from the
supported frame rates.
Change-Id: I984101c2a95e13053228e56f19b353e716eb2b67
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
c84bdf63e4 introduced a potential crash on
Windows Phone as querying for photo resolutions still might return video
properties. As a result, querying for ImageEncodingProperties will fail
and the function returns no resolution at all causing an assert later
on.
Instead of checking for the stream type passed to
getMediaStreamResolutions we have to check for the property type of the
list itself.
Task-number: QTBUG-53714
Change-Id: I7bfc48ebf1fef4f9165135af604ce6c91a418438
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Our custom filter that streams the data into the pipeline was incorrectly
negotiating the sample type with the downstream filter.
This also fixes playback when passing a QIODevice to QMediaPlayer.
Task-number: QTBUG-46899
Change-Id: Iea8b8731d5404c416c8ed0d59cb61958b13b61b0
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
5.6 should not require c++11 features, however, nullptr slipped in here.
Replace nullptr with Q_NULLPTR for initialization.
Change-Id: Icf62618657b5bb725bd4c8f924853fa191f6e413
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Examples in binary packages now directly match the install path.
Change-Id: Ic272c741ca0bb805dc50ce591ac0ea1d93f07944
Task-number: QTBUG-52953
Reviewed-by: Antti Kokko <antti.kokko@qt.io>
Some cameras return video properties when querying for
MediaStreamType_Photo, ie. Surface Book. This caused an assert.
Instead when asking for photo resolutions, only query the available
image resolutions and skip results not of type image.
Change-Id: Ia1886a11f47676d6713eec86f3a80c664871a968
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
the "created by qt creator" header is not supposed to be checked in.
Change-Id: I6d8c623f41c633babe5923344c915412d3d6bcd4
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Android API level 16 added SurfaceTexture::attachToGLContext(). This
allows to create the OpenGL texture when the first video frame is
available, rather than at initialization. This means we can do without
the ugly hack that makes the render thread call us back through some
custom property.
Additionally, it allows to recreate a new OpenGL texture every time
the SurfaceTexture is reset.
Task-number: QTBUG-51911
Change-Id: I17b04524d426c42ef8aa0288b0731597bc9eba62
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
Compile fix: FreeBSD uses <sys/types.h> instead of the linux version <linux/types.h>, so this patch
changes the include by Q_OS_FREEBSD define.
Change-Id: Iafe18614ad2360dce9858039b22f9b6c2dd9caaa
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Don't render the frame if the SurfaceTexture has been released or
if the render size is invalid.
Change-Id: I6b8bf14e023ff54a560b0a9e6027ef9d7d06ab6a
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Some sections were not protected by the mutex, even though they should
have been. An example of problem that could happen because of this was
if the SurfaceTexture was reset while the render thread was rendering
that texture.
Change-Id: Ie95860fd4eb722bbac04cccc430cc1a8abf1df4d
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
- Add command line parsing and file argument.
- Port to Qt 5 connection syntax.
- Adapt size to available geometry (for High DPI).
Task-number: QTBUG-53114
Change-Id: I1c1c547ddb14210ef5900f99f4870d6d91b67088
Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
When possible, convert the URL to a local file name with native separators.
The method seems to accept URLs with file scheme, but fails when passing
UNC paths.
Task-number: QTBUG-53114
Change-Id: Ib7418090080be8c1b8472e77541e686adaa3a18a
Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
- return m_cameraSrc for function cameraSource() instead of m_videoSrc.
m_videoSrc is not always assigned(default 0), it will crash on:
if (g_object_class_find_property(
G_OBJECT_GET_CLASS(m_session->cameraSource()), "exposure-mode")) {
And as the function name says, it would be better to return the
value m_cameraSrc.
- make sure pointers are not NULL before using them.
Change-Id: I8a56db34a805724b428409b87de7d072ee7bfa57
Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
OS X 10.11 generates a warning when the code uses the Carbon Component
Manager to locate audio devices. The new AudioComponent interface has
been available since 10.7.
Change-Id: I46ecbcd62871ecc46ce3ebd9ea2a37a9e1342f41
Task-number: QTBUG-48828
Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
The previous code would capture frames with a 60Hz timer
into two pixmaps alternating pixmaps with each successive
frame. Rendering was somewhat disconnected from this, if
rendering was unable to occur at 60fps, multiple frames
might be copied for each frame rendered. This meant that
it might try copying a video frame into a pixmap that was
currently being used by the GPU with bad effects. The
primary effect being severe flicker on i.mx6 targets.
The change is to ensure that we don't read the window data
until we're just about to make use of it. This means we
don't ever get ahead of ourselves and read the video window
once for every frame rendered.
The code has been significantly refactored. There is now
a class that manages the pixmaps and egl images. This is
created on demand and the images are created and destroyed
when sizes change. Since this all now occurs in the proper
thread, much of the nonsense of setting _q_GLThreadCallback
to arrange a call from the render thread is avoided.
Remove BlackBerry ifdefs that are no longer used.
Change-Id: I4bf5efa4c39c8170e3f55499c167ee10e521e100
Reviewed-by: James McDonnell <jmcdonnell@qnx.com>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
A property can't be both constant and writable at the same time.
Change-Id: Ie1f81fdf10eba7fe84f98f7c34f829cdac654e75
Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
Camera control reacts to an application becoming inactive and turns off
the camera. However, when debugging or watching internals inside an IDE
this feature breaks the state of the application as the IDE gets focus
and hence camera is turned off.
Change-Id: I6f80476592c0faa32e9da11401f699c6211d226a
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
When device watcher has been started it can have the enumerationComplete
state in addition to started. Hence only start the watcher if none of
those two states is present. This fixes an assert where starting an
already started watcher failed.
Change-Id: Idc3af256845f0993a26e8d186b499ef1c7e7dacc
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Camera control management has to happen inside the xaml thread,
otherwise the behavior is undefined. This results in ie. the first
capture not working due to synchronization issues.
When (de-)activating the videoRenderer we have to switch to the UI
thread first.
In addition add focus for Windows 10 (Mobile), previously it was compiled
for Windows Phone 8.1 only. On desktop this might return no focus mode
to be supported, but API-wise this is available.
Task-number: QTBUG-47803
Change-Id: I9b345ebc82502fc6e00aede43b9096893cd0ad53
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Just forwarding the content of a ComPtr is potentially dangerous.
Change-Id: I4f3dfa04a5844d299a5653e31a4a0d1e1b86f9b5
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
1. m_writerQueue is now shared by recorder control and asset writer
to ensure it lives long enough.
2. m_delegate->method() calls from async block can be dangerous, since by the time
this block is actually executed, delegate can be deleted already. This fix uses
Q_INVOKABLE and invokeMethod with QueuedConnection instead.
3. -finishWritingWithCompletionHandler: is async and when the block finally gets
executed, lock and 'if aborted' test are still needed.
4. Simplify the logic and reduce locking.
Change-Id: If23daf2fe22043244033427a7f6517a0fe3f23d1
Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
This is handled with 34e0e908c896126138a95abdeba7456499d0fb68 in qtbase.
Change-Id: I41cf27690189aefb3000de90df4a518d8dd449f0
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
__weak previously was a simple noop, but now it ends up in a compilation
error in non-ARC'ed source code ('declaration uses __weak, but ARC is disabled').
Task-number: QTBUG-52671
Change-Id: I574519f892ba1d5f71488c5cc26423d04d5e02cf
Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
The ALSA plugin previously didn't suspend the ALSA device when the
::suspend() method is called. This results in underrun errors when
it's resumed.
In ALSA, stopping a pcm doesn't close it, so the ALSA stop/start
functions map to the QAudioInput suspend/resume functions.
Change-Id: I2507065a1b7472af29eef70c531b9f6e8e5b3072
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>