summaryrefslogtreecommitdiffstats
path: root/src/plugins/directshow/camera/dscamerasession.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Revert "Update commercial license headers"v5.15.3-lts-lgplTarja Sundqvist2021-03-251-20/+20
| | | | | | | | | | | This reverts commit 80d46e3a5f64ff2456c40bdba63b6d5c69a32cdd. Revert of commercial license headers is required for Qt 5.15.3 opensource release. Task-number: QTBUG-91108 Change-Id: I5c64ffa120f916711e5cf01c828774f8456dec06 Reviewed-by: Akseli Salovaara <akseli.salovaara@qt.io>
* Update commercial license headersTarja Sundqvist2021-01-271-20/+20
| | | | | | | | | | | | | | | | Updated header.COMM to files in tqtc-qtmultimedia. Examples, tests or documentation files are not updated. The commercial license header may contain some additional lines so that its line count equals with the earlier license header. Reaso for this is that some autotests use hard coded line numbers and a change in the line count causes failures in tests. Task-number: QTQAINFRA-4171 Change-Id: I86ebf7c3653b55983cefff246c0cb019cbcda8c4 Reviewed-by: Akseli Salovaara <akseli.salovaara@qt.io>
* DirectShow: Use also pin category when negotiatingVal Doroshchuk2020-09-241-37/+29
| | | | | | | | | | The pin should be negotiated once and use PIN_CATEGORY_CAPTURE. The same logic is implemented in chromium. Change-Id: I89ac13c1a7e982c1011b2a872e853ee5bc2036b2 Reviewed-by: Andy Shaw <andy.shaw@qt.io> (cherry picked from commit bf82ab669c53c4b9abb724e197252a788323095e) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot2020-04-141-2/+7
|\ | | | | | | Change-Id: I9687c59d15cd816969f362d72b19f279a1a2d04e
| * DirectShow: Use MEDIASUBTYPE_Y800 as QVideoFrame::Format_Y8Val Doroshchuk2020-04-081-2/+7
| | | | | | | | | | | | | | | | Added MEDIASUBTYPE_Y800 with GUID: {30303859-0000-0010-8000-00AA00389B71} Fixes: QTBUG-83071 Change-Id: I2e51ae1d2ae62d4d4cd7f68eecc0605bdc8c7f3a Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* | Introduce QVideoFrame::image()VaL Doroshchuk2019-10-311-2/+1
|/ | | | | | | | | | | | | Since QVideoFrame::pixelFormat's do not 100% match QImage::Format's, introducing converstion function. Returns an image based on current frame. Converts data if needed to supported QImage format. Change-Id: I3331578c01cf9c999a380efc4a83bf9eddb07901 (cherry picked from commit 93f966335e1ed8ed47b7e8b32452d43c2f8a7bb1) Reviewed-by: Daniel Smith <Daniel.Smith@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Merge remote-tracking branch 'origin/5.13' into devQt Forward Merge Bot2019-07-301-3/+3
|\ | | | | | | Change-Id: I329eeefafed87ff7467d21d5d099cf9897660167
| * DirectShow plugin: use new style connect syntaxRolf Eike Beer2019-07-161-2/+2
| | | | | | | | | | Change-Id: I5c2dadfe1154961adcecf779126166aea4d32393 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
| * DirectShow plugin: use nullptr instead of NULLRolf Eike Beer2019-07-161-22/+22
| | | | | | | | | | Change-Id: Ied89175c4b7f5df090deac174b1da1e8496ee533 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* | Merge remote-tracking branch 'origin/5.13' into devQt Forward Merge Bot2019-07-161-2/+4
|\| | | | | | | Change-Id: I7ca7fb6143ec296c16a37a7be236470dbd1742a7
| * Fix GetFrameRateList checks and memory leakNate Weibley2019-07-051-2/+4
| | | | | | | | | | | | | | | | | | | | GetFrameRateList passes an unmanaged pointer to the caller which must be manually freed with CoTaskMemFree. Additionally the Chromium project notes that some drivers cause quirky return values which we would not catch without stricter checks. See: https://chromium.googlesource.com/chromium/src/media/+/8cc93abd7339eeb9b7c2a12cca07b3dc245b2139/video/capture/win/video_capture_device_win.cc#484 Change-Id: I6aa4a6ea1ac0241e585e98cf9ff63240bacd3956 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* | DirectShow: Introduce nullptrFriedemann Kleint2019-06-121-34/+34
| | | | | | | | | | | | | | Apply Fixits by Qt Creator. Change-Id: Idbd52ceaac6ee02f23d05f5a9b1ab6d58298b6a5 Reviewed-by: André de la Rocha <andre.rocha@qt.io>
* | DirectShow: Use member initializationFriedemann Kleint2019-06-121-17/+0
| | | | | | | | | | Change-Id: I4e696083c2ed78b374f2df64706ecb2297f122dd Reviewed-by: André de la Rocha <andre.rocha@qt.io>
* | DirectShow: Clang warnings about else after return, breakFriedemann Kleint2019-06-121-6/+2
| | | | | | | | | | | | | | Disentangle code of DirectShowPlayerService::requestControl(). Change-Id: I2e90d5c86acdbe2f20f421f43929e0e9c5580eaf Reviewed-by: André de la Rocha <andre.rocha@qt.io>
* | DirectShow: Fix clang-warning about mixing const/non-const iteratorsFriedemann Kleint2019-06-121-1/+1
|/ | | | | Change-Id: Iadaae490ff88737cf8a73ef8024617f60773a631 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* DirectShow: Fix crash when camera is being destroyedVal Doroshchuk2019-02-061-4/+1
| | | | | | | | | | | | If a camera is going to be destroyed, a service plugin releases media service, (which releases ds camera session) and might call CoUninitialize. This leads to a crash when DirectShowSampleGrabber is destroyed after releasing the camera. Added a fix to release the sample grabber together with camera session. Task-number: QTBUG-73461 Change-Id: I8e518d0242d983c8d2bb00c30ad87c7e8e1e2c93 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* DirectShow: Don't queue video buffers from sample grabberVal Doroshchuk2018-11-291-5/+5
| | | | | | | | | | | | Fixed an issue when buffers are sent using queued connection. Thus all buffers were collected before they were handled. Now only last buffer is kept. Also moved handling of device lost timer to main thread. Task-number: QTBUG-72012 Change-Id: I338587c5854739d6081c5cb502377e5779776417 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* DirectShow: use supported pixel formats for QCamera video surfaceIhor Dutchak2018-11-281-25/+28
| | | | | | | | | | [ChangeLog][DirectShow] Do not convert QCamera video frames to RGB32 if provided QAbstractVideoSurface supports frame pixel format, requested by QCameraViewfinderSettings. Task-number: QTBUG-68768 Change-Id: I78d0aaf6c22c4bfee2b17f78a3709d7ba9a8b4fa Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* DirectShow: Display windows error string when camera failsVal Doroshchuk2018-11-271-4/+5
| | | | | | | | | | Additionally to custom error messages it needs to show standard ones with error codes. Task-number: QTBUG-71851 Change-Id: I6504ec2417b0f686ab4e1a6902c4f00eeefcbbf2 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* DirectShow: Fix typo which breaks cameraVal Doroshchuk2018-10-041-1/+1
| | | | | Change-Id: Ib2f799024b91131d33b9247dec167cae3e6adde9 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* DirectShow: Implement image capture settingsVal Doroshchuk2018-09-251-3/+28
| | | | | | | | | | | | | | | | | | | | Added camera image encoder control that 1. applies image encoder settings (resolution and codec) used to capture images 2. returns supported image codecs from QImageWriter::supportedImageFormats 3. returns supported resolutions Since DirectShow camera session uses QImage based on QVideoFrame image encoder control returns viewfinder supported resolutions. Not available if camera is not loaded. Setting resolution via encoder control causes viewfinder resolution to be ignored. Task-number: QTBUG-32743 Change-Id: I1de3ca9c6543937cb62f73cb64a81d23b0d5c4c9 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Andy Shaw <andy.shaw@qt.io> Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* DirectShow: Fix clang-tidy warnings about else after returnFriedemann Kleint2018-09-051-10/+8
| | | | | | | | | - Unindent the code or replace by switch () - Smaller fixups when reindenting (nullptr, use QStringView for comparison against wchar_t) Change-Id: I249cb00b9ebe375b089d8d53b10c2d16d5771680 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* DirectShow: Fix clang-tidy warnings about C-style castsFriedemann Kleint2018-09-051-15/+19
| | | | | | | Replace by reinterpret_cast<>. Change-Id: Iebcac7858d875e2d6f53db21489d86beb19ba947 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* DirectShow: Notify if camera has been unpluggedVal Doroshchuk2018-08-021-0/+28
| | | | | | | | | | | | | | | | | | | If being used camera has been disconnected, state and status will remain like it is still active. Also no events are sent. Previously to fix this the camera needed to be unloaded and loaded again manually. IMediaEvent provides an ability to catch device removal notification with EC_DEVICE_LOST event. Since ISampleGrabber is used to get buffers. Added a fix to check if no buffers received for some time afterwards check for EC_DEVICE_LOST event. In case if the device is lost, the camera should be unloaded. Change-Id: I3a5edf00ce8ee25d8b06800fdad833a722bdba0d Task-number: QTBUG-68035 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io> Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
* DirectShow: Postpone setting camera image processing param if not readyVal Doroshchuk2018-08-021-3/+10
| | | | | | | | | | | | | Setting camera image processing parameters fails if the graph builder is not ready. We avoid this race condition by having a list of pending parameter changes which is applied when graph builder has been created. Task-number: QTBUG-69143 Change-Id: I5702ea5a2dceacff333fcf8dce05372a0208b8d9 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
* DirectShow: Emit an error if QCamera::start() failsVal Doroshchuk2018-03-211-13/+25
| | | | | | | | | | | | | | | | | | | If a camera is not started successfully, then an error() should be emitted. After an error the camera's state will be QCamera::UnloadedState and status will be QCamera::UnloadedStatus. The error signal is handled when the camera is unable to set following states: QCamera::UnloadedState, QCamera::LoadedState or QCamera::LoadingState. Thus additionally to QCamera::start() an error can be emitted even when QCamera::load(), QCamera::unload(), or QCamera::stop() is called. Task-number: QTBUG-51825 Change-Id: Ib5ea08ed7983ea49a7bf8c0321cc5266a68d9144 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* DirectShow: Add video probe support for the cameraChristian Stromme2018-01-221-0/+22
| | | | | | | | | | This change makes it possible to use the QVideoProbe class with the camera. [ChangeLog][DirectShow] Added support for video probes in the camera. Change-Id: Ib353e80e68ea2dcc5b33fd81863f4b6613257e45 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* DirectShow: Add camera image capture controlsChristian Stromme2018-01-221-8/+36
| | | | | | | | | | Adds controls for setting the capture destination and buffer format. [ChangeLog][DirectShow] Added support for setting the capture destination and format. Change-Id: I7420ea5dce9bf1bef391b6ba3a1537bedfbcf52d Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* Merge remote-tracking branch 'origin/5.10' into devLiang Qi2018-01-061-2/+2
|\ | | | | | | | | | | | | Conflicts: .qmake.conf Change-Id: I5acdc7e0bd3729b80522dfff0f388cf2507fb111
| * DirectShow: Fix rendering of overlapping MDI subwindowsVal Doroshchuk2017-12-141-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Media type MEDIASUBTYPE_RGB32 is 32 bytes per pixel (like 0x00RRGGBB). When MDI subwindows are overlapping bottom window with QImage::Format_RGB32 requires 0xffRRGGBB. If "not used byte" is not 0xFF rendering will not be correct (0x00 produces empty image). Changed samples to ARGB32 to provide alpha channel, which is 0xFF in most cases. If alpha channel is not set to 0xFF, the bottom window will still be rendered incorrectly. Task-number: QTBUG-51405 Change-Id: I69f15d3835f901a04bf39b079394c6292b793610 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Replace Q_NULLPTR with nullptrKevin Funk2017-09-271-6/+6
|/ | | | | Change-Id: I3b7601b4a97f8a2b1d2da6ef134f1577846ba713 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* DirectShow: Copy the frame data when we get it before emittingAndy Shaw2017-08-161-3/+1
| | | | | | | | | | | Since the slot connected to the frameAvailable signal may be in another thread there is a bigger risk of it being invalid by the time the slot is invoked. Therefore we copy the data and emit with the copy to ensure that we don't lose the data. Task-number: QTBUG-61817 Change-Id: I2888661d8a7f97105a85f87b08cc9ec25f8ce8c7 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* DirectShow: Expose the camera control interfacev5.9.0-beta4Christian Stromme2017-05-031-0/+20
| | | | | | | The interface is needed to implement Qt's camera control classes. Change-Id: I468527dd1f5e9e7a0f8868f0b7addc3c069adf54 Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
* DirectShow: Fix warnings of MinGW/gcc 5.3v5.9.0-alpha1Friedemann Kleint2017-02-061-6/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | helpers\directshowmediatype.h:70:58: note: in expansion of macro 'Q_DECL_NOTHROW' inline const AM_MEDIA_TYPE *const operator &() const Q_DECL_NOTHROW { return &mediaType; } qtbase/src/corelib/global/qcompilerdetection.h:1143:26: warning: type qualifiers ignored on function return type [-Wignored-qualifiers] # define Q_DECL_NOEXCEPT noexcept ^ qtbase/src/corelib/global/qcompilerdetection.h:1153:25: note: in expansion of macro 'Q_DECL_NOEXCEPT' # define Q_DECL_NOTHROW Q_DECL_NOEXCEPT ^ helpers\directshowmediatype.h:71:59: note: in expansion of macro 'Q_DECL_NOTHROW' inline const AM_MEDIA_TYPE *const operator ->() const Q_DECL_NOTHROW { return &mediaType; } ^ camera\dscamerasession.cpp:604:24: warning: unused variable 'cLSID_SampleGrabber' [-Wunused-variable] static const CLSID cLSID_SampleGrabber = { 0xC1F400A0, 0x3F08, 0x11d3, { 0x9F, 0x0B, 0x00, 0x60, 0x08, 0x03, 0x9E, 0x37 } }; camera\dscamerasession.cpp:603:22: warning: unused variable 'iID_ISampleGrabber' [-Wunused-variable] static const IID iID_ISampleGrabber = { 0x6B652FFF, 0x11FE, 0x4fce, { 0x92, 0xAD, 0x02, 0x66, 0xB5, 0xD7, 0xC7, 0x8F } }; ^ helpers\directshowmediatype.cpp: In constructor 'DirectShowMediaType::DirectShowMediaType()': helpers\directshowmediatype.cpp:79:57: warning: missing initializer for member '_AMMediaType::formattype' [-Wmissing-field-initializers] : mediaType({ GUID_NULL, GUID_NULL, TRUE, FALSE, 1 }) helpers\directshowmediatype.cpp:79:57: warning: missing initializer for member '_AMMediaType::pUnk' [-Wmissing-field-initializers] helpers\directshowmediatype.cpp:79:57: warning: missing initializer for member '_AMMediaType::cbFormat' [-Wmissing-field-initializers] helpers\directshowmediatype.cpp:79:57: warning: missing initializer for member '_AMMediaType::pbFormat' [-Wmissing-field-initializers] camera\dscamerasession.cpp:805:111: warning: missing initializer for member '_AMMediaType::pUnk' [-Wmissing-field-initializers] static const AM_MEDIA_TYPE grabberFormat { MEDIATYPE_Video, MEDIASUBTYPE_RGB32, 0, 0, 0, FORMAT_VideoInfo }; camera\dscamerasession.cpp:805:111: warning: missing initializer for member '_AMMediaType::cbFormat' [-Wmissing-field-initializers] camera\dscamerasession.cpp:805:111: warning: missing initializer for member '_AMMediaType::pbFormat' [-Wmissing-field-initializers] camera\dscamerasession.cpp: In member function 'void DSCameraSession::presentFrame()': camera\dscamerasession.cpp:585:52: warning: 'captureId' may be used uninitialized in this function [-Wmaybe-uninitialized] emit imageCaptured(captureId, captureImage); Change-Id: I2870c1489bd375d3d43a31742551dab220015660 Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
* DirectShow: Use the new sample grabber in DsCameraChristian Strømme2017-01-271-95/+19
| | | | | | | | There's no need to have a separate implementation in the camera code, so removing this one in favor of the new sample grabber. Change-Id: I5b68d804788745b6ed3d3fceba295d1d99bb5915 Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
* DirectShow: Add utility classChristian Strømme2017-01-271-32/+3
| | | | | | | Centralized place for helper functions etc. Change-Id: Ia4474d0681a37fc95a100a3766800141a8b1d900 Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
* DirectShow: Sanitize DirectShowMediaTypeChristian Strømme2017-01-271-96/+9
| | | | | | | | | | | | | | | | The DirectShowMediaType is now a thin data wrapper around AM_MEDIA_TYPE and will for the most look and work the same way, with the exception that it cleans up after itself. All utility functions are now static, except clear() which, for convenience, is also provided as a non-static member function. In addition to the changes mentioned above, duplicated methods were removed, conversion for ARGB32 was added, and an attempt to make the usage of AM_MEDIA_TYPE and DirectShowMediaType was made more consistent. Change-Id: Iad32fb8eeabd9d4183e9bd10426cac3963e5d99a Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
* DirectShow: Remove manual filter and pin disconnection in DsCameraChristian Strømme2016-11-151-31/+1
| | | | | | | | | In commit 3fb3231a9 we added code to disconnect all filters in the graph, that includes any filters we add our self, so there's no need to have special handling for those. Change-Id: Id601933b3ff749294cfa71a0cca99e7d25e94a39 Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
* Merge remote-tracking branch 'origin/5.7' into 5.8Liang Qi2016-09-191-0/+2
|\ | | | | | | Change-Id: I022c07dab3ded6072f7c103e299822caaf40cf34
| * Merge remote-tracking branch 'origin/5.6' into 5.7Liang Qi2016-09-171-0/+2
| |\ | | | | | | | | | Change-Id: I27d68b69f2ad15e930b6adab5b2ff583f4642fac
| | * DirectShow: support MJPEG camerasYoann Lopes2016-09-161-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | Map MEDIASUBTYPE_MJPG to QVideoFrame::Format_Jpeg, which makes sure that cameras that only support MJPEG are configured properly. Task-number: QTBUG-55359 Change-Id: I732c56afc51109aba0231c8537f795e8d276c194 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | | Merge remote-tracking branch 'origin/5.7' into devLiang Qi2016-08-171-8/+15
|\| | | | | | | | | | | Change-Id: Ib8d05d6e21c7beb19f618cd1edc52d248b1e43b8
| * | Merge remote-tracking branch 'origin/5.6' into 5.7Liang Qi2016-08-131-8/+15
| |\| | | | | | | | | | Change-Id: I3204cdf695f4b47730a88a7c41fc7a6de967b161
| | * DirectShow: fix possible deadlock when capturing camera imageYoann Lopes2016-08-121-8/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | Don't emit signals while mutexes are locked. Task-number: QTBUG-41573 Change-Id: I287b031a579cbec1cd178501df4426ceff9e9142 Reviewed-by: Christian Stromme <christian.stromme@qt.io> Reviewed-by: Ruslan Vorobei <zvorobei@gmail.com>
* | | DirectShow: refactor custom renderer filterYoann Lopes2016-07-061-1/+1
|/ / | | | | | | | | | | | | | | | | | | | | Refactor out some of the filter and pin logic into the DirectShowBaseFilter and DirectShowPin abstract classes. This will avoid code duplication when implementing the probe filter. The existing source filter (for qrc files) can also be refactored to use these abstract classes. Change-Id: Iaf141472dea82579ad085b3318624f9a57aa46d8 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Merge remote-tracking branch 'origin/5.6' into 5.7Liang Qi2016-04-081-3/+13
|\| | | | | | | Change-Id: I7de78c63b5f81620474c69e5c651202c553a70d7
| * DirectShow: Release all filters when disconnecting the graph.Christian Strømme2016-03-311-3/+13
| | | | | | | | | | | | | | | | | | | | | | | | When disconnecting the graph we need to make sure that all the filters in the graph are released, even the ones that are automatically added. Since we can't know in advance which filters the graph consists of, we need release them one by one. Task-number: QTBUG-49281 Change-Id: Ifdf2fb6fe1c90ab85b47565c5fe82b6ebe55b183 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
* | Updated license headersAntti Kokko2016-01-191-14/+20
| | | | | | | | | | | | | | | | | | | | | | From Qt 5.7 -> LGPL v2.1 isn't an option anymore, see http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/ Updated license headers to use new LGPL header instead of LGPL21 one (in those files which will be under LGPL v3) Change-Id: I324f65c61171f36641472964d095d72e452afb3a Reviewed-by: Jani Heikkinen <jani.heikkinen@theqtcompany.com> Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* | Merge remote-tracking branch 'origin/5.6' into devChristian Strømme2016-01-151-0/+312
|\| | | | | | | | | | | | | | | Conflicts: src/plugins/android/src/mediacapture/qandroidcamerasession.cpp src/plugins/wmf/mftvideo.cpp Change-Id: I78868b416ea4baec89ca3e2dc9eb4712db16d5fc
| * DirectShow: Get current image processing parameter from the cacheDenis Shienkov2015-12-101-39/+17
| | | | | | | | | | | | | | | | | | | | We can simplify a code, do not need to call pVideoProcAmp->Get() each time when we want to get current parameter value. It is better to do this once from updateImageProcessingParametersInfos(). In this case we will return desired parameter from the local cache. Change-Id: If33c3882230c9ae817071ace5b792dfe31685a7f Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>