Commit Graph

65 Commits

Author SHA1 Message Date
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
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
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
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
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
Timur Pocheptsov
6ad5ea7fa0 Camera zoom control - version for the AVFoundation plugin
AVFCameraZoomControl for AVFoundation plugin (videoZoomFactor in
AVCaptureDeviceFormat). iOS only.

Change-Id: I585b8df4c2a477971ada7bd81fabbd44f2371d98
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-02-05 22:23:49 +00:00
Timur Pocheptsov
39f5de4106 AVFCameraExposureControl - exposure control for iOS
Exposure control, version for AVFoundation plugin (this code is using
quite a new API, iOS >=8 only).

Change-Id: I6871a758e8dfb98ab46b66d91a44142163e0bb44
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-02-05 17:25:10 +00:00
Timur Pocheptsov
60541844c1 AVFCameraFocusControl - focus control for iOS / OS X
Camera focus control for AVFoundation plugin (iOS/OS X).

Change-Id: I0a79e7057ecbb66413debb8eac0f48ff679fc7ba
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-02-05 17:24:59 +00:00
James Turner
9444c8ec61 iOS video frame render implementation.
Uses CVTextureCache, iOS only for now, OS-X code could be ported
but will need further work to support TEXTURE_RECTANGLE in the
QVideoNode classes.

When we can’t share a context, falls back to an offscreen window,
FBO rendering and grabbing a QImage.

Change-Id: I23b831fdcc63aeb1b67b7741d8d56779470240d3
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-02-04 11:28:02 +00:00
James Turner
9a215d954b Rename camera classes to avoid name clash.
Change-Id: I08fe8f7e75bdbf2c4975863642072061741b5bc6
Reviewed-by: Filipe Azevedo <filipe.azevedo@kdab.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-01-15 10:45:11 +01:00
Timur Pocheptsov
c31d8cddd0 AVFImageCaptureControl - invalid connection
AVCaptureConnection from AVCaptureStillImageOutput becomes invalid
as we remove/add AVCaptureDevice.

Change-Id: I698ffcc0b91b76cd5d7c25e4b244eaa0aa459159
Task-number: QTBUG-42035
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
2015-01-08 17:48:12 +01:00
Frederik Gladhorn
a7b67a97ec Merge remote-tracking branch 'origin/5.4' into dev
Change-Id: I8b9177d90afac8b834d333efc6c22b6b35dceaf8
2014-10-09 18:04:44 +02:00
Yoann Lopes
f02d9e9343 AVFoundation: fix media player video rendering in QML.
The AVPlayerLayer was set on the QVideoRendererControl before its
geometry was updated, causing the renderer control to display frames
with an invalid size.

Change-Id: I90e18dce69d4b48a3d7932d44a7eab4fd443f1fb
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-10-01 16:23:33 +02:00
Ludger Krämer
762ff94f67 implement QVideoProbe for iOS camera
This commit allows to use QVideoProbe for QCamera on iOS.
The logic for the implementation is taken from the Android plugin.

[ChangeLog][Platform Specific Changes][iOS]
QVideoProbe support is implemented for QCamera on iOS

Change-Id: I1db50defa8518287c4f1f3cc6602881702a95849
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-09-12 17:57:52 +02:00
Jens Cornelis
8d5114a630 Fixed avfmediaplayersession.mm for OSX 10.10 Yosemite.
Implicit cast caused build to fail. Explicit cast builds fine.

Task-number: QTBUG-41136
Change-Id: I0147c26a0f8b8198d6ed9944311547b81a50bccb
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-09-11 18:56:53 +02:00
Frederik Gladhorn
659f238bbb Merge remote-tracking branch 'origin/5.3' into 5.4
Conflicts:
	src/gsttools/qgstreamervideoinputdevicecontrol.cpp
	src/plugins/gstreamer/camerabin/camerabinserviceplugin.cpp
	src/plugins/gstreamer/mediacapture/qgstreamercaptureserviceplugin.cpp

Change-Id: Ic854589562d2deeaa0ebf75840cb8a2ee32e99de
2014-09-01 12:52:51 +02:00
Yoann Lopes
5f0f81bcc1 AVFoundation: fix some controls not being correctly destroyed on iOS.
This patch also makes sure AVF video layers are removed from their
parent layer when their corresponding Qt video outputs are destroyed.

Task-number: QTBUG-39385
Change-Id: I164cd0da7084f84c0473ed3e396e734acce2a22e
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-08-25 17:30:31 +02:00
Yoann Lopes
bee6244e24 AVFoundation: fix retrieving tracks information from live sources.
For live sources, tracks information is available only after the
AVPlayer changed its status to AVPlayerStatusReadyToPlay. It also
seems to be available only from AVPlayerItem.tracks rather than
AVAsset.tracks.
The audioAvailableChanged() and videoAvailableChanged()
signals are now correclty emitted and the video layer is
correctly positioned for live sources.

Task-number: QTBUG-38666
Change-Id: I8ee015a6ce81694c1fc1e44c679887cf7ccb0fd6
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-08-25 17:30:23 +02:00
Antti Kokko
2732e23887 Update license headers and add new license files
- 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>
2014-08-24 17:30:13 +02:00
Frederik Gladhorn
86d5c7e4dc Merge remote-tracking branch 'origin/5.3' into dev
Change-Id: If8e5050901a320f1ff692e842f173c0062bed5fe
2014-07-22 20:23:12 +02:00
Yoann Lopes
f935715767 AVFoundation: correctly pass output URLs to AVCaptureMovieFileOutput.
The URL string passed to NSURL was not fully encoded, causing the
recorder to start with a nil URL, leading to an exception.
We now use QURL::toNSURL() which automatically encode the URL.

Task-number: QTBUG-38668
Change-Id: I06bf881a0a25fb37efd8784ebf518c8b90ecc6b4
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2014-07-10 15:59:53 +02:00
Kai Koehne
124b6a4ee6 Fix compilation with -no-opengl
Change-Id: Ib8f39dcea58018f076d6a3fa733303958c707f1a
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2014-07-01 10:25:51 +02:00
Andy Nichols
ea5d56c5ab AVFoundation: Add QVideoWindowControl support
This adds the capability to render videos directly to native
window surfaces when using the AVFoundation plugin.  This adds limited
support for displaying videos from QML on iOS.  These videos are
displayed in a CALayer above the QQuickWindow, so it will not be
possible to render any QtQuick items on top of a video using the
QVideoWindowControl to provide video.

[ChangeLog][QtMultimedia][iOS] Add limited support for playing videos in
QtQuick on iOS (Videos are played on top of scene with limited transform
support).

Change-Id: I80381d9a07b45b6fa1959678166e6da0004f8c19
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-20 23:06:20 +01:00
Andy Shaw
73de758274 Prevent crash when there is no camera device available
If you try to use QAudioInputSelectorControl with the iOS Simulator then
it would crash as there is no camera device available. This prevents a
crash from happening in that case.

Change-Id: I3904f3d299a11a6df21e66a1138a4319cc0b8a5c
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-03-19 10:56:30 +01:00
Andy Nichols
d7533fd935 AVFoundation: Fix another crash when destroying a QMediaPlayer
We need to unload media before we delete the player.

Task-number: QTBUG-37447
Change-Id: I09263214c425339c0d8c192091aeaa6e3fb5331f
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-14 12:40:14 +01:00
Yoann Lopes
024c841415 AVFoundation: fix crash when no camera is available on the system.
Change-Id: I0b473babae4d1fae605667957deca21ba1dc0c09
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-03-07 14:59:13 +01:00
Andy Nichols
b6b974361a AVFoundation: Prevent Crash in QMediaPlayer
Task-number: QTBUG-34213
Change-Id: I0883436175439abbb4ea964ed552a17b970ed05c
Reviewed-by: Michael Bruning <michael.bruning@digia.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-07 14:58:17 +01:00
Andy Nichols
1286300a4c AVFoundation: Cleanup AVCaptureSession with proper reference counting
The reference counting was not being done for AVCaptureSession so it was
being destroyed before we got a chance to properly clean it up (which
lead to crashes).  We also make sure to remove any observers from
AVCaptureSession now before destroying it.

Task-number: QTBUG-37109
Task-number: QTBUG-29955
Change-Id: Ia9b49ad1eab01b4f7424e2a1c699d903cd9bf902
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-04 17:53:39 +01:00
Yoann Lopes
9a55f5ce57 AVFoundation: implement QCameraInfoControl.
Change-Id: I05f3daa5c4acb90e046e26d6d577ae40dfed0e30
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-03-04 17:53:18 +01:00
Andy Nichols
70415c3d97 AVFoundation: Call stop() on VideoSurface when changing sources
Before we were reusing the active surface when we switched videos.  This
leads to an inconsitency in states, and the sourceRect property of the
video surface does not get updated.

Task-number: QTBUG-28655
Change-Id: Ie29bf1d9b1c11b6f51a869253c730202001c07cf
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-04 15:34:09 +01:00
Andy Nichols
1fe5a7964f AVFoundation: Fix y-inverted QML Videos
When the code that supports iOS was added, we introduced a bug where QML
videos would be played y-inverted on OS X.  This is because we made no
effort to y-invert the Framebuffer Object before rendering the texture
in the SceneGraph.  Now we render the video the the FBO y-inverted, so
there is no need to y-invert the resulting texture.

Task-number: QTBUG-35955
Change-Id: I41af1aaae57923b9972b5be5ec65f7d2a97d77c5
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-04 14:13:11 +01:00
Andy Nichols
16430262d9 AVFoundation: Remove debug code
Some debug code made it into the released code, so each time you used
the QWidget based video player the terminal would print data about the
window frame size.

Change-Id: I86eb00ce5edb23b7a2abf6a63893cd17aaeb0ee3
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2014-03-03 16:45:47 +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
Yoann Lopes
54066d2c21 AVFoundation: mirror viewfinder frames of front-facing cameras.
Change-Id: I95920aa459ff0931819cb6f8278ab296db542601
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-02-14 15:05:13 +01:00
tom
d26fcf043d Fixes mediaplayer crashes on OSX
Fixes the "libqavfmediaplayer.dylib 0x0000000110fa7c8c -[AVFMediaPlayerSessionObserver unloadMedia]" crash on Macs.
The problem was: writing to memory that had already been released. If not sure, one should always check if the objects exist before deleting it.

Solution tested on OSX 10.7, 10.8, 10.9

[ChangeLog][qtmultimedia][avfmediaplayersession]

Task-number: QTBUG-34213
Change-Id: Iac108711851c348e96e73542b4e71653007eeb54
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
2014-01-24 13:33:01 +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
Andy Nichols
48a6a8a043 AVFoundation: Basic camera support for iOS
Enables basic software rendering support for iOS.

Change-Id: Icd29076ea627295819ede6d9680de576ba39b34e
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-08-27 14:16:26 +02:00
Andy Nichols
94ccfbc132 AVFoundation: Enable QVideoWidget on iOS
Change-Id: I88041e7a2ea052fe449542eeaada31c09d93d163
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-08-27 14:16:18 +02:00
Andy Nichols
51d0f852b9 AVFoundation: Use CoreAnimation to render video to QVideoWidget
Previously a QGLWidget was used as a target for the
AVFVideoFrameRenderer.  This was uncessary as it is possible to render
directly on top of the QWidget using the CoreAnimation Framework.

Change-Id: I08923c85fd56c8874c1d8c187ae5145e220fab92
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-08-27 14:16:10 +02:00
Andy Nichols
17a700292a AVFoundation: Enable use of QMediaPlayer for audio on iOS
This commit disables the video components of the AVFoundation
mediaplayer backend when building for iOS and enables the use of
QMediaPlayer with audio assets.

Change-Id: Iadd6f9c61ed1e656301326e90a22cbca6428b654
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-08-27 14:15:54 +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
Sze Howe Koh
f4348fe3ae Decouple qmediametadata.h from qmultimedia.h
qmultimedia.h is included in more places, but qmediametadata.h is
larger. This patch should reduce unnecessary #include-ing.

Change-Id: I4a3d174bafc555d794bb75087c1f6b79745ae903
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
2013-05-14 11:27:05 +02:00
Andy Nichols
e728a61eb6 AVFoundation: Emit error when media fails to load
This also makes sure that if you attempt to load an invalid media file
while another file is playing that the old session is stopped.

Task-number: QTBUG-30411

Change-Id: Ied4dbaffeac50465112c1e94e7c69d1600a6de51
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
Reviewed-by: Dan Winkler <dantwinkler@gmail.com>
2013-04-17 01:47:07 +02:00
Andy Nichols
ae042feed3 AVFoundation: Remove stray semicolon after condition
Change-Id: I1c9a822ee54e7c189fe8806a11334cd23cd79a31
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
2013-04-16 15:20:26 +02:00
Sze Howe Koh
ab54cc46c6 Doc: Fix minor typos
Task-number: QTWEBSITE-514
Change-Id: Ie8f3689d18d15fd0e88e0ada4a745d9994d9c2ae
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
2013-04-10 13:20:46 +02:00
Oswald Buddenhagen
4760e1fb02 make use of qtHaveModule()
Change-Id: I14da5455b7dd4681254e1652395df5f5c65746bd
Reviewed-by: Tasuku Suzuki <stasuku@gmail.com>
Reviewed-by: Jonas Rabbe <jonas.rabbe@gmail.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-01-11 15:15:05 +01:00