summaryrefslogtreecommitdiffstats
path: root/src/gsttools
Commit message (Collapse)AuthorAgeFilesLines
...
| | * GStreamer: Dump dot file if GST_DEBUG_DUMP_DOT_DIR is setVaL Doroshchuk2019-05-201-12/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | Dump dot file on play only. Change-Id: Ide7fe0cad56f06a89604cf40b59b858c9c9d09f2 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
| | * GStreamer: Fix crash when the bus helper is destroyedVaL Doroshchuk2019-05-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Called deleteLater() on the bus helper to ensure the cleanup is handled gracefully. QGstreamerBusHelperPrivate::doProcessMessage is called on a message from gst, which it calls QGstreamerPlayerSession::processBusMessage where new media is set and current helper object is destroyed. When for loop is ended in doProcessMessage, current object is freed and produces a crash. Change-Id: Ic9cde97c284406450d4723f1f7f71fa1ea2c0648 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
| | * Gstreamer: Allow streams in custom pipelinesVaL Doroshchuk2019-05-151-40/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | Introduced pushing buffers from QIODevice to appsrc gstreamer element: player->setMedia("gst-pipeline: appsrc ! ...", io_device); Also ported to gst 0.10. Change-Id: I1a84d22c0d5c56fe433d494413c5ab23da7c6bf3 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
| | * Gstreamer: Fix deadlock when state is requested in ASYNC modeVaL Doroshchuk2019-05-141-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When new media is set to the player, updating of "show-preroll-frame" property from the video sink is also requested: g_object_set(G_OBJECT(m_videoSink), "show-preroll-frame", value, NULL); This produces emitting of a signal: g_signal_connect(G_OBJECT(sink), "notify::show-preroll-frame", G_CALLBACK(handleShowPrerollChange), sink); Inside handleShowPrerollChange() the state of the video sink is requested with infinite timeout: gst_element_get_state(GST_ELEMENT(sink), &state, NULL, GST_CLOCK_TIME_NONE); In case if the video sink performed an ASYNC state change, means changing of the state is pending and need to wait, this function will block up for infinite timeout. But probably changing of the state is requested (and should be performed) on the same thread where it is waiting for this change, it produces a deadlock. Changing timeout to 10ms to avoid this block. Fixes: QTBUG-72468 Change-Id: I06235ccfb8f76423f65ed192d5e8de6e60723e72 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* | | Merge remote-tracking branch 'origin/5.13' into devQt Forward Merge Bot2019-05-181-1/+1
|\| | | | | | | | | | | Change-Id: I82d63ba32a0c9f8b883d00ef1bd68df3a10da96c
| * | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-05-141-1/+1
| |\| | | | | | | | | | Change-Id: I03225f5e980a69246b046351f7d7d8e84f102ca0
| | * Gstreamer: Don't reset pipeline to GST_STATE_NULL when EndOfStreamVaL Doroshchuk2019-05-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In case of EOS the state of the pipeline currently is changed to GST_STATE_NULL, which releases some resources and it might take some time to restart the playback. If the media should be played few times, there could be a gap between EOS and new play which can be heard. Suggesting to set the state to GST_STATE_PAUSED instead. If there is a need to release resources, empty QMediaContent should be set to the media player. Change-Id: Ifa5c886abfbea037fd395b7336a5590001d4a7f7 Fixes: QTBUG-75314 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* | | Gstreamer: Introduce support of OpenGL pluginVaL Doroshchuk2019-05-158-4/+233
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since uploading to gl texture is quite performance-wise operation introduced integration of opengl plugin which can provide a way to avoid uploading to texture on each draw on qt's side. Which potentially fixes some performance issues especially on embedded devices. Added glupload and glcolorconvert gst elements to pipeline. For qml apps current opengl context is provided to the gst plugin to share opengl data with. It allows at the end to just use gl textures that created and filled inside the gst. For overlay apps, glimagesink element is added. Requires gstreamer-gl-1.0 to be installed. Since this plugin is almost always available, so enabling it by default will break behavior of current pipeline and might introduce some side effects. Thus also provided QT_GSTREAMER_USE_OPENGL_PLUGIN env var to explicitly enable OpenGL features from gst. After this change video frames will be texture based. But it is still possible to map frames to download their data. In case if the video surface does not support gl textures, glmemory will be anyway requested, which will lead to uploading data, downloading and uploading it again to textures in scene graph video node. Task-number: QTBUG-66162 Change-Id: I32044ba0bf0c0cf90434d72f8991ad00927e1380 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* | | Deprecate canonicalUrl and canonicalRequest in QMediaContentVaL Doroshchuk2019-05-131-6/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since QMediaContent can contain only one content and media resources are already deprecated, canonicalUrl and canonicalRequest are a bit confusing and outdated. Deprecated and replaced by QMediaContent::request() which already contains the url. Change-Id: I418006e112f49466b0129bf1e6e1ae629c714538 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* | | Add YUV422P format support to QVideoFrame and declarative rendererTomasz Olszak2019-05-101-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog] Added QVideoFrame::Format_YUV422P. Change-Id: If7741db00cf0b628d7fc4b1cd3a6e424e0f8e2c0 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io> Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch> Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* | | Merge remote-tracking branch 'origin/5.13' into devQt Forward Merge Bot2019-03-301-0/+5
|\| | | | | | | | | | | Change-Id: If1977853a4e364f06f91bfe1d2cb128a920050f0
| * | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-03-271-0/+5
| |\| | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf Change-Id: Ie0a7534d518cd5758119edc77d8275ac3da2037c
| | * Fix compile failure with gstreamer 0.10Richard Oehlinger2019-03-181-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | This fixes an compile failure introduced in commit 67c4ec55. Fixes: QTBUG-74475 Change-Id: I0dabb72f8b5cdd75336b15515381ff9d9442788f Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* | | Merge remote-tracking branch 'origin/5.13' into devQt Forward Merge Bot2019-03-022-2/+7
|\| | | | | | | | | | | Change-Id: I0a12a39a9f3e890e2d5bbece7d8c7d895dac0707
| * | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-02-232-2/+7
| |\| | | | | | | | | | Change-Id: I7a99bdc1300e3e19c85967bf67da3481a259e3c1
| | * Gstreamer: Set surface from renderer before creating pipelineVaL Doroshchuk2019-02-222-2/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When multiple pipelines are created, and one of these gets recreated, it picks up the last set surface. This is incorrect, as it needs a surface belonging to the current renderer. This patch sets the surface before creating pipelines, retrieving it from the current renderer. Task-number: QTBUG-73557 Change-Id: I0811f7262a0eca57e01361a55515351127520064 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* | | Merge remote-tracking branch 'origin/5.13' into devQt Forward Merge Bot2019-02-231-5/+3
|\| | | | | | | | | | | Change-Id: I537d400df8ba9b1aab44a8dcb9df7e18881a6794
| * | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-02-161-5/+3
| |\| | | | | | | | | | Change-Id: I947a3b4aaf39e56b9505ae802b8b31c718922639
| | * Gstreamer: Fix compilation error with 0.10 versionVal Doroshchuk2019-02-141-5/+3
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-73740 Change-Id: I1de087b63f65bab39351d5446254a8d1832e88c3 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* | | Remove the mirclient code as this is no longer availableAndy Shaw2019-02-193-485/+0
|/ / | | | | | | | | | | | | | | Fixes: QTBUG-73878 Change-Id: Ia178d41a3e152174865264c71a75e84cfc31462a Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io> Reviewed-by: Gerry Boland <gerry.boland@canonical.com> Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* | Gstreamer: Add support of avfvideosrc for camerabinVaL Doroshchuk2019-02-081-11/+27
| | | | | | | | | | | | | | | | | | Gst Device Provider now can be used for macOS also. Added support of avfvidesrc element to be used within camerabin. Task-number: QTBUG-72125 Change-Id: I69205649c6e75432534e240656d8cb4748ee10cc Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* | Gstreamer: Return GstBuffer from QGstVideoBufferVaL Doroshchuk2019-02-041-0/+1
| | | | | | | | | | | | | | Useful to get some impl specific information from video buffer. Change-Id: I7fccf2855f0be180bd438a59e4fbaefce15b4ed8 Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
* | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-02-022-31/+60
|\| | | | | | | Change-Id: Ia13d887c3e3bf00b6ded5d052384fc5689b816fe
| * Gstreamer: Set custom pipeline using urlVaL Doroshchuk2019-01-231-30/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduced possibility to set custom pipeline using url. Now the pipeline should be set only via QMediaPlayer::setMedia using url with scheme "gst-pipeline". For example, "gst-pipeline: videotestsrc ! autovideosink" Since setting the media should be done after renderer in QML, hence a surface is ready to be used and "qtvideosink" is available in pipelines. To use it with QVideoWidget, setting the pipeline should be done after passing video output. Change-Id: Id43f8681069e4bca2eafb154df2c5d446a0ca498 Reviewed-by: Andy Shaw <andy.shaw@qt.io> Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* | GStreamer: support video orientationAlexander Volkov2019-02-012-0/+36
| | | | | | | | | | Change-Id: I233c45824f517c185cb245d8a7d77cab8551fc51 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* | GstTools: move headers to correct folderJochen Seemann2019-01-3126-6/+3020
| | | | | | | | | | | | | | | | We don't need to have the headers of QtMMGstTools in a separate directory of the QtMultimedia module. Change-Id: If304ab5ee5741aec7cf7785352f5a571bc4ec240 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* | Merge remote-tracking branch 'origin/5.12' into devQt Forward Merge Bot2019-01-221-4/+6
|\| | | | | | | | | | | | | Conflicts: .qmake.conf Change-Id: Icf8b9f73c50b16d6f5765040eb7bd918231df94a
| * Migrate QGstUtils to use QRegularExpressionSamuel Gaist2019-01-121-4/+6
| | | | | | | | | | | | | | | | | | This patch updates the QGstUtils class to use QRegularExpression in place of QRegExp which is to be considered deprecated. Fixes: QTBUG-72589 Change-Id: I67e189c48688b512cc76c884fd2a7e51e1b188f9 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* | Gstreamer: add support for ksvideosrc within camerabinVal Doroshchuk2019-01-171-0/+45
| | | | | | | | | | | | Task-number: QTBUG-72125 Change-Id: I12bc684a796c6abb6af3a51edca52011495f4ac9 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Fix warnings about deprecated QPalette enumerations and functionsFriedemann Kleint2019-01-141-2/+2
|/ | | | | | | | | | videowidget.cpp:625:32: warning: 'Background' is deprecated: Use QPalette::Window instead [-Wdeprecated-declarations] qgstreamervideowidget.cpp:56:36: warning: 'Background' is deprecated: Use QPalette::Window instead [-Wdeprecated-declarations] qgstreamervideowidget.cpp:56:36: warning: 'Background' is deprecated: Use QPalette::Window instead [-Wdeprecated-declarations] qgstreamervideowidget.cpp:83:55: warning: 'const QBrush& QPalette::background() const' is deprecated: Use QPalette::window() instead [-Wdeprecated-declarations] Change-Id: Ieb55a57c5672d3023a48461ec347fbb30210fd1e Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
* GStreamer: remove unnecessary <unistd.h> includesJ-P Nurmi2018-12-261-1/+0
| | | | | | | This makes it possible to build the GStreamer backend on Windows. Change-Id: I5b705524072d8bd89a7c9b834201b97e0d01d6cc Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* QGstUtils: fix build with MSVCJ-P Nurmi2018-12-261-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | MSVC didn't like the #iffery that was done with GST_STATIC_CAPS(). The build error was: qtmultimedia\src\gsttools\qgstutils.cpp(1323): error C2121: '#': invalid character: possibly the result of a macro expansion qtmultimedia\src\gsttools\qgstutils.cpp(1323): error C2059: syntax error: 'if' qtmultimedia\src\gsttools\qgstutils.cpp(1323): error C2143: syntax error: missing ';' before '{' qtmultimedia\src\gsttools\qgstutils.cpp(1311): error C2143: syntax error: missing ';' before '}' qtmultimedia\src\gsttools\qgstutils.cpp(1325): error C2059: syntax error: 'return' qtmultimedia\src\gsttools\qgstutils.cpp(1326): error C2059: syntax error: '}' qtmultimedia\src\gsttools\qgstutils.cpp(1326): error C2143: syntax error: missing ';' before '}' qtmultimedia\src\gsttools\qgstutils.cpp(1329): error C2143: syntax error: missing ';' before '{' qtmultimedia\src\gsttools\qgstutils.cpp(1329): error C2447: '{': missing function header (old-style formal list?) Change-Id: Ic9ac64648aba396fc4ef433e73d5c72a8c1c3da1 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* Gstreamer: Fix undeclared identifier QGstVideoRendererSink in 0.10 verVaL Doroshchuk2018-09-251-1/+1
| | | | | | Task-number: QTBUG-70465 Change-Id: I6af46cb8de0b40dc41aaa0b999faf68d102c7b48 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* Merge remote-tracking branch 'origin/5.11' into 5.12v5.12.0-alpha1Qt Forward Merge Bot2018-09-082-5/+10
|\ | | | | | | Change-Id: I886c4bda70a2b5a013a445d03487c7e3ef98e858
* | Gstreamer: Introduce custom pipelineVaL Doroshchuk2018-08-305-61/+147
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added an ability to define custom pipeline. Since new pipeline is used, playbin features will not work. Registered "qtvideosink" gstreamer element to be used in pipelines. In case if there is a need to render to QML VideoOutput element. I.e. if a pipeline is "videotestsrc ! qtvideosink" then QGstVideoRendererSink will be used as a sink and rendering will be done by one of QSGVideoNode's. In this case there is a need to create a pipeline after video surface is ready. Also added an ability to override default video sink and define custom one instead. QGstreamerVideoRendererInterface::setVideoSink() provides functionality to override default one. QGstreamerPlayerSession::rendererChanged() can be used to check if the renderer is ready to create a pipeline or set custom video sink. Task-number: QTBUG-39327 Change-Id: I635d3a07fb9a5dcf30ee63284a849b0ad3438536 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into 5.12Qt Forward Merge Bot2018-08-301-1/+1
|\| | | | | | | Change-Id: I3a41fab753e5a06fc9f30464edf7d6626e7ae92a
| * Gstreamer: Set video-profile to CameraBin before GST_STATE_READYVaL Doroshchuk2018-08-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CameraBin creates default (application/ogg, video/x-theora) video profile or sets custom defined one, but ONLY on GST_STATE_CHANGE_NULL_TO_READY. If the camera is already loaded then it is not possible to change the video profile. Since a video profile was never defined, video/x-theora was always used to record video. Moved setting video profile before it gets to READY. It fixes an issue with ignoring CameraBinRecorder::applySettings(). This also changes previous behavior when video/x-theora was always used. To apply custom video settings it requires to use QMediaRecorder::setVideoSettings before the camera enters the READY state. Task-number: QTBUG-69895 Change-Id: I3afbf1f8e7c953e2e49e9cad7e96ea0b18a29d1a Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Gstreamer: Allow to use gst specific featuresVaL Doroshchuk2018-08-293-2/+2508
|/ | | | | | | | | | | | | | Gstreamer implementation is located in a plugin. In case if there is a need to use some internal features QGstreamerPlayerControl and QGstreamerPlayerSession have been moved from plugin to QtMultimediaGstTools library. It allows to request media player control from QMediaService and use it as QGstreamerPlayerControl. Change-Id: I8e45480c4cd718b90b90d14a42bc56f6f924eae5 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* Gstreamer: Use gst_bus_remove_watch() instead of g_source_remove()Peter Seiderer2018-07-251-0/+4
| | | | | | | | | | | | | Avoids critcial warning ('GLib-CRITICAL **: Source ID 10 was not found when attempting to remove it') in case the applications initiates another glib context/main loop. The new gst_bus_remove_watch() is available since gstreamer API 1.6, otherwise fall back to g_source_remove(). Task-number: QTBUG-69468 Change-Id: I4343865cb41a2d62ac4b0c0c04f60f13727f56d0 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* Fix comment endThiago Macieira2018-04-271-1/+1
| | | | | | | | Caught by Clang 6: qgstutils.cpp:180:1: warning: '/*' within block comment [-Wcomment] Change-Id: I3840d727dee443318644fffd152938f2b4df5400 Reviewed-by: Martin Smith <martin.smith@qt.io>
* Doc: Fix documentation warningsTopi Reinio2018-04-191-2/+7
| | | | | | | | | | | | Add a custom module header, used only for documentation builds, that pulls in also the QtMultimediaWidgets module. Several documentation fixes to clean up warnings from clang. Task-number: QTBUG-67790 Change-Id: I6c1013798a648250c8555eb92684ec3b33ff7531 Reviewed-by: Martin Smith <martin.smith@qt.io> Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* Gstreamer: Fix leak in prepare-window-handle messageVaL Doroshchuk2018-03-211-1/+3
| | | | | | | | | | | If the handler returns GST_BUS_DROP, it should unref the message, else the message should not be unreffed by the sync handler. The message is not going to be unreffed after handler call is made. Task-number: QTBUG-64142 Change-Id: Ib44f574e95457cdfab66b390c691a8b572987d66 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* Gstreamer: Fix setting vaapi sink propertiesVaL Doroshchuk2018-03-211-107/+288
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Since vaapi and xvimage sinks require different ranges for the properties: brightness, contrast, hue, saturation. Added support of vaapi ranges. It also fixes problem when contrast was always 0 as default value which led to always show black screen. - brightness xvimage: Allowed values: [-1000,1000], Default value: 0 vaapi: Allowed values: [-1,1], Default value: 0 - contrast xvimage: Allowed values: [-1000,1000], Default value: 0 vaapi: Allowed values: [0,2], Default value: 1 - hue xvimage: Allowed values: [-1000,1000], Default value: 0 vaapi: Allowed values: [-180,180], Default value: 0 - saturation xvimage: Allowed values: [-1000,1000], Default value: 0 vaapi: Allowed values: [0,2], Default value: 1 Task-number: QTBUG-23761 Change-Id: I8fda8ce4c6f47c4567e67c670f802a0e9f55af6e Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* Merge remote-tracking branch 'origin/5.10' into devLiang Qi2018-01-061-5/+4
|\ | | | | | | | | | | | | Conflicts: .qmake.conf Change-Id: I5acdc7e0bd3729b80522dfff0f388cf2507fb111
| * GStreamer: Always notify CameraBinSession if a device has been selectedVaL Doroshchuk2017-12-051-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | CameraBinSession is never notified if a device has been unplugged and replaced by new one with the same index. Since QGstreamerVideoInputDeviceControl is for internal usage and dependent classes already check against the device name, we don't need to check it here. Task-number: QTBUG-64080 Change-Id: I064289335642d5d673f9db1ea206850968002d2e Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Merge remote-tracking branch 'origin/5.10' into devLiang Qi2017-10-271-1/+2
|\| | | | | | | Change-Id: Ib509a8c90dd6c7229510a400612cc27a4957d015
| * Merge remote-tracking branch 'origin/5.9' into 5.10Liang Qi2017-10-271-1/+2
| |\ | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf examples/multimedia/declarative-radio/view.qml src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h Change-Id: I97b507878b6de04ec38ddd13530e58b8f72390e4
| | * GStreamer: Fix V4L input queryVaL Doroshchuk2017-10-091-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The last ioctl argument expect a pointer to an integer, not the integer value itself. Also, the ioctl call will return 0 on success, or ENOTTY if the input can't be select, both indicating that the device is a camera. Task-number: QTBUG-62245 Change-Id: Ifcf2d30b11ae204036b43daae664f917aaed83ed Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | | Merge remote-tracking branch 'origin/5.10' into devLiang Qi2017-10-191-4/+2
|\| | | | | | | | | | | | | | | | | | | | Conflicts: src/plugins/qnx/mediaplayer/mmreventmediaplayercontrol.h Change-Id: Ic6e27742ef6d1af0532ad05902a1431ebd5f449d
| * | Merge remote-tracking branch 'origin/5.9' into 5.10Christian Strømme2017-09-261-4/+2
| |\| | | | | | | | | | Change-Id: Ib7c41a4cd7fd6976ebab52673898888dfac53db5