Commit Graph

852 Commits

Author SHA1 Message Date
Yoann Lopes
bcaec9624c AVFoundation: fix microphone permission when using the camera.
The microphone permission was always requested when using the camera,
even when not actually using the microphone, which can only happen when
recording a video. The permission request is triggered by adding an
audio AVCaptureDeviceInput to the AVCaptureSession, which was done when
setting the camera to LoadedState. This is now done when setting the
camera mode to CaptureVideo.

Task-number: QTBUG-45659
Change-Id: I3692797128cfb70ba5ccbc7a36b6955471039e80
Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com>
2015-04-23 18:39:08 +00:00
Yoann Lopes
d910b6d63f AVFoundation: correctly detect the default audio capture device.
Use AVCaptureDevice::defaultDeviceWithMediaType instead of the first
device in the list of available devices.

Change-Id: I436921f99280a28d7158d345cd977a874cfb8968
Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com>
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-04-23 12:57:49 +00:00
Peng Wu
61033aa420 winrt: fix camera sample queue thread safety
Replace sample buffer QVector with C array to avoid reallocations. The
resource needs to be protected, so use atomic indexes to prevent writing
into the same array element that is being read.

Task-number: QTBUG-45667
Change-Id: Ifd30dd128765ea4794fe8614f25ef596bba891ee
Reviewed-by: Andrew Knight <qt@panimo.net>
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@theqtcompany.com>
2015-04-23 07:10:28 +00:00
Peng Wu
be0a231be4 winrt: fix camera preview on Lumia 630
Certain devices give black frames when blitting to the target texture for
image preview. However, a workaround has been found that simply mapping
the buffer forces the frames to be rendered properly. As this degrades
performance on devices with hardware buffers, a blacklist is introduced
to specify which devices require this workaround.

Task-number: QTBUG-44838
Change-Id: I137a1dc4e5126e7cf9ee00cb2d7e7722bf917efa
Reviewed-by: Andrew Knight <qt@panimo.net>
2015-04-16 17:36:16 +00:00
Liang Qi
51d6b5c811 Update copyright headers
Just do bbfccc7135 for new added files.

Change-Id: Ibbcd515d5e7577a8a3b33163094f9153072c8846
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-04-15 08:52:27 +00:00
Liang Qi
1925bb404e Merge remote-tracking branch 'origin/5.4' into 5.5
Conflicts:
	src/multimedia/playback/playlistfileparser.cpp
	src/plugins/windowsaudio/qwindowsaudiodeviceinfo.cpp

Change-Id: I52950def2b8283ae15797d05d4ead6a1256eba19
2015-04-15 09:26:14 +02:00
Yoann Lopes
f9145aca16 DirectShow: correctly update camera list.
8923c0ff fixed the list not being updated after plugging/unplugging a
camera from the system. However, it was only a partial fix affecting
only QCameraInfo::availableCameras(). DSVideoDeviceControl was still
internally keeping a list of cameras that was never updated, causing
the QCamera constructor to not take into account new or removed
cameras.

Change-Id: Ie5e79c46002017b1e85bfc53c6391a2a747361a0
Task-number: QTBUG-39708
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-04-14 14:49:56 +00:00
Yoann Lopes
07606dde9a WindowsAudio: improve supported formats detection.
QAudioDeviceInfo::isFormatSupported() now tries to open the device with
that format to theck if it is supported. We were before simply checking
that its parameters were included in the list of supported values,
which might be incomplete.

In addition, since the Windows API to check device capabilities is quite
limited, we now test additional common formats and add them to the
supported formats if the device can open them.

Task-number: QTBUG-42648
Change-Id: Idd0affbd6d91d4fd027a6a4c86c2f3fe008a118f
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-04-14 14:42:21 +00:00
Yoann Lopes
b109f093d9 WMF: fix reported sample type of 8-bit audio formats.
Always report 8-bit PCM data as unsigned integer. Even though there's
no API to actually know that, it's standard on Windows. 8-bit is
unsigned and 16-bit is signed.

Task-number: QTBUG-45540
Change-Id: I4a3c09084de688ea7afc3bc147508184fb582224
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-04-14 14:30:16 +00:00
Yoann Lopes
f3a07360dd CoreAudio: fix crash on iOS 5.
The plugin was using some iOS 6 APIs, even though we're supposed to
support iOS 5.
Add version checks for all these APIs.

Task-number: QTBUG-44790
Change-Id: I9268963b7d3601222451ce0c948c2d024d37c86f
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-04-14 14:30:10 +00:00
Timur Pocheptsov
6187b72c51 Camera flash control - version for iOS/OS X
AVCaptureDevice has API to work with camera flash on both iOS and OS X
(quite limited on OS X though) - so camera flash control can be implemented
in AVFoundation plugin.

Task-number: QTBUG-37996
Change-Id: Ie9aaed09a709e7d09ccc1cedded93a69fea93975
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-04-13 14:26:12 +00:00
Konstantin Ritt
277d104faa [DirectShow] Fix potential memory access violation
Change-Id: I5da495d255e6fdd3a70c1ed486afb61f157c923e
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-04-13 09:58:28 +00:00
Konstantin Ritt
740f16ac60 [DirectShow] Fix potention undefined behavior on destruction
The exact warning is:
> deleting object of polymorphic class type which has non-virtual
  destructor might cause undefined behavior

Change-Id: I8f259def3f1f7f776fb31ace9dfcc7145426f5c0
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-04-13 09:58:12 +00:00
Yoann Lopes
def89d7171 AVFoundation: fix QCameraInfo::availableCameras() on OS X.
Cameras can be dynamically added or removed on OS X. Make sure
the cache is updated often enough so QCameraInfo::availableCameras()
return an up to date list.

Task-number: QTBUG-39708
Change-Id: Id806d52278e1a29163fcc6707da7f86c0f3e7c0d
Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com>
2015-04-10 09:12:41 +00:00
Yoann Lopes
63cff37741 QMediaPlayer: handle resource files in a cross-platform way.
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>
2015-04-07 17:21:47 +00:00
Andy Shaw
72a43cee90 Fix compile issue when building with -no-widgets
Change-Id: I49a9aa684b0dfbe0e3d9e576aad06d65d6c3ecdd
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-04-07 13:28:16 +00:00
Sergio Martins
197373b2d1 Fix BlackBerry -qtnamespace build
Change-Id: I717dad59a466cb7a7480bc772d8f6308ca669d54
Task-number: QTBUG-43569
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
2015-04-01 16:17:40 +00:00
Andy Shaw
90fe52d086 WMF: don't resume playback after doing a seek while paused.
Task-number: QTBUG-32746
Change-Id: I5a9ee96324e0ddc65311f47dc887bcb91b036fd2
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-03-31 11:15:18 +00:00
Yoann Lopes
4f7e5bf169 WMF: report the surface's supported formats in the correct order.
QAbstractVideoSurface::supportedFormats() returns the formats in
descending order of preference while IMFMediaTypeHandler expects the
list to be in ascending order.

Change-Id: I0ecb5a3b228c0cad78c1a84091e3c3cf272f7ebc
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-03-24 16:03:13 +00:00
Timur Pocheptsov
09afe9377d AVFCameraViewfinderSettings - add NV12 format
Add QVideoFrame::Format_NV12 (AVFoundation has kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
and kCVPixelFormatType_420YpCbCr8BiPlanarFullRange). Report it (set it) only if
it's supported by renderer's surface. Add bi-planar format support into CVPixelBufferVideoBuffer.

Change-Id: Ibc1c2be056bddf5cf3b595570fc40c626ee3ccf5
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-03-20 13:23:00 +00:00
Yoann Lopes
2d8fcc1560 WMF: fix RGB24 format matching.
MFVideoFormat_RGB24 has a BGR layout and should therefore be matched to
QVideoFrame::Format_BGR24, not Format_RGB24.

Task-number: QTBUG-42323
Change-Id: I1749b575b1738168e3d3c0d055dee10f6d870c0c
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-03-18 10:54:19 +00:00
Peng Wu
10354f4127 Fix WinRT Audio elements cannot play Qt resouce audio files
URL argument of Windows media API SetSourceFromByteStream can not be
empty. Initial proper value for playing audio stream case.

Task-number: QTBUG-42263
Change-Id: If0bb44b60d517228bfe8b6cb30afeeb4a8ac62d3
Reviewed-by: Andrew Knight <qt@panimo.net>
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-03-17 14:32:31 +00:00
Frederik Gladhorn
64b75cc1d7 Merge remote-tracking branch 'origin/5.4' into 5.5
Change-Id: Id24f14bef17b86e7027e055473f0357854780979
2015-03-17 09:48:51 +01:00
Yoann Lopes
e1d76e2df5 Revert "Alsa: fix crash when detecting devices."
This reverts commit 0ab81ef59f.
The workaround causes software devices not to appear in the list
of available devices. Besides, since the crash is caused by a bug
in older versions of Alsa, the workaround was probably a bad idea
in the first place. People should update Alsa instead.

Task-number: QTBUG-42326
Change-Id: I37923a87180d1c5abc18d52d84f633e14ba46860
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-03-11 14:17:14 +00:00
Friedemann Kleint
2099a8c3c7 Fix uninitialized memory reads in MFAudioDecoderControl.
Initialize all members in constructor.

[W] UMR: Uninitialized memory read in MFAudioDecoderControl::handleMediaSourceReady(void) {1 occurrence}
         Error location
            MFAudioDecoderControl::handleMediaSourceReady(void) [c:\qt\qt-55-32\qt-55-32\qtmultimedia\src\plugins\wmf\decoder\mfaudiodecodercontrol.cpp:254]
[W] UMR: Uninitialized memory read in MFAudioDecoderControl::activatePipeline(void) {1 occurrence}
            MFAudioDecoderControl::activatePipeline(void) [c:\qt\qt-55-32\qt-55-32\qtmultimedia\src\plugins\wmf\decoder\mfaudiodecodercontrol.cpp:289]

Task-number: QTBUG-40571
Change-Id: I6f97cf72284f739ceffcf65162963d00de979ea2
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-03-10 17:02:39 +00:00
Timur Pocheptsov
f839f9e3eb AVCaptureDeviceFormat - avoid duplicates (OS X/iOS)
Excluding video range (iOS) is not the right way to avoid "duplicates" - with
other devices there can be also duplicates (formats with the same resolutions),
but completely different pixel formats. Since we do not know what they will be in advance,
we take the media subtype from the initial preset for a capture device and use it
as a filter. Update viewfinder and image encoder settings controls.

Change-Id: If20aea24b19b43574d5c3e9bf2ba85f50fc08916
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-03-10 16:35:59 +00:00
Yoann Lopes
95e9155b7f Android: fix some MediaPlayer signals not being emitted on first load.
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>
2015-03-04 16:36:04 +00:00
Frederik Gladhorn
b348c9e7b0 Merge remote-tracking branch 'origin/5.4' into 5.5
Conflicts:
	src/gsttools/qgstutils.cpp

Change-Id: Ic54ab6c6560ded0db4b98f83256d997bee828083
2015-03-03 18:18:12 +01:00
Timur Pocheptsov
33b27c3c15 Image encoder control - version for OS X/iOS
QImageEncoderControl - implementation for AVFoundation plugin (OS X/iOS,
at the moment iOS >= 7.0).

Change-Id: Ibc2c3ae48252dd4698e263f5abca5c328482d5e7
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-03-02 12:44:51 +00:00
Timur Pocheptsov
985ee3261b Viewfinder settings control (1) for OS X/iOS
QCameraViewfinderSettingsControl - version for AVFoundation plugin
('obsolete' viewfinder settings control interface, camera session uses v2
instead). v1 is implemented using v2 (the v2 object from camera service).

Change-Id: I81207b52b0ba5a67e64465f0e5e0c80d7267df3e
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-03-02 12:44:41 +00:00
Timur Pocheptsov
0d783b7303 Viewfinder settings control (2) - version for iOS/OS X
QCameraViewfinderSettingsControl2 - version for AV foundation plugin
(the new settings control interface implemented).

Change-Id: I3fbfb87925e57c914d43eb711fa5422e26981207
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-03-02 12:44:29 +00:00
Timur Pocheptsov
d27f493df0 Add AVF camera utilities - general aux. functions/classes
Move configuration lock class into avfutility.h + add several standalone functions
to work with  AVCaptureDeviceFormat/AVCaptureDevice etc. - utility functions that are not
specific to any class.

Change-Id: Idba544248772a3b2a4e00dddb377b1c0e62b8085
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-03-02 12:44:19 +00:00
Andy Shaw
f39d8b73ee Check for the quick module before adding the videonode plugin
Change-Id: I050356086f5d82221968016754eb01c1b8f35490
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-02-27 12:37:14 +00:00
Yoann Lopes
5a0a3791a1 DirectShow: implemented QCameraViewfinderSettingsControl2.
Change-Id: I42ed49676e2fbc7207d8fe4579ad1fc0d62df138
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-02-26 15:56:27 +00:00
Frank Osterfeld
4e07ff99f6 ios: Enable volume and mute functionality
AVPlayer::setVolume and setMute also exist on iOS, so no need to ifdef
them to be OS X-only. As they require iOS 7.0, add runtime checks to
ensure that the methods exist.

Task-number: QTBUG-39240
Change-Id: I10810705cef8e5d8c18e4c79a15fa06425ea57f9
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
Reviewed-by: James Turner <james.turner@kdab.com>
2015-02-25 15:39:03 +00:00
Frank Osterfeld
b0f283b65e ios: Do not leak texture cache objects
Do not recreate m_textureCache if it already exists. This changes the
memory allocation behavior of a simple iOS example program from
linearly increasing to constant over time.

Change-Id: I6ff13b586c653fb7b4cadfa9f4ebf985b07ee455
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-02-25 12:36:38 +00:00
Frederik Gladhorn
39bb642cb2 Merge remote-tracking branch 'origin/5.4' into 5.5
Conflicts:
	qtmultimedia.pro
	src/gsttools/qgstreamervideowidget.cpp
	src/plugins/gstreamer/camerabin/camerabinservice.cpp

Change-Id: I883f20dc17924ab42514a1aa00d16675a0f13d99
2015-02-24 17:38:46 +01:00
Sergio Ahumada
e7e34562fe Merge "Merge remote-tracking branch 'origin/5.4' into dev" into refs/staging/dev 2015-02-22 22:21:39 +00:00
Rafael Roquetto
e5ffc6a876 Remove BlackBerry PlayBook support.
Change-Id: I21f9c21bd3badd30f3a989ce3412c9ad03f5f21d
Reviewed-by: Bernd Weimer <bernd.weimer@pelagicore.com>
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
2015-02-18 15:44:42 +00:00
Yoann Lopes
178c040168 GStreamer: some improvements with the camerabin's capture settings.
- 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>
2015-02-18 13:15:45 +00:00
Yoann Lopes
656da3d4d6 GStreamer: improve camerabin audio settings checking.
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>
2015-02-18 13:15:36 +00:00
Yoann Lopes
e47ecb75b5 GStreamer camerabin: don't recreate camera source on device change.
Change-Id: If62573b11c8e3112d386d93de9a504f49965d597
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-02-18 13:15:30 +00:00
Yoann Lopes
b179f15bb3 GStreamer: remove unused function and enum.
Change-Id: I67b329784d94e60b94c10d4a8942d02b050e0b2c
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-02-18 13:15:25 +00:00
Yoann Lopes
e48546b44f GStreamer: runtime check for controls that require GstPhotography.
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>
2015-02-18 13:15:20 +00:00
Yoann Lopes
e4bf7d90bf GStreamer: implemented QCameraViewfinderSettingsControl2.
Change-Id: I4436e39c152f6c251792c1504d4a7b57db7b9d9a
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
2015-02-18 13:15:09 +00:00
Yoann Lopes
d9354b2299 GStreamer: fix camerabin state and status changes.
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>
2015-02-18 13:14:59 +00:00
Yoann Lopes
fcf5d826a0 GStreamer: improved logic for window and widget controls usage.
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>
2015-02-18 11:38:34 +00:00
Frederik Gladhorn
f9014d136f Merge remote-tracking branch 'origin/5.4' into dev
Change-Id: I5575a4ba13212c9bfe73a3de3ef17c6528beafc3
2015-02-13 13:10:48 +01:00
Antti Kokko
bbfccc7135 Update copyright headers
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>
2015-02-12 10:27:47 +00:00
Yoann Lopes
06259f1dfb Android: fix adjusting camera viewfinder resolution.
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>
2015-02-11 14:11:23 +00:00