summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* WindowsAudioOutput: Introduce QT_WAVE_BUFFERS env varv5.12.0-beta3Val Doroshchuk2018-10-182-12/+22
| | | | | | | | | | | | | | | | | | Currently by default 5 wave buffers are created where each buffer contains buffer_size/5 bytes. If total buffer size is small enough, playing of these wave buffers might be finished before refilling them. Which leads crackling and another noise. Introduced QT_WAVE_BUFFERS env var which contains number of wave buffers. Must not be less than 5. If number of wave buffers is big enough, it ensures that there is always data to play. Task-number: QTBUG-45174 Change-Id: I66bf997411f858fbff822394bb748dea2086060e Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Merge remote-tracking branch 'origin/5.11' into 5.12Qt Forward Merge Bot2018-10-131-1/+1
|\ | | | | | | Change-Id: Ic398983a0a680738487476150e28593665db3fb2
| * Use the setDataSource(String) overload for non assets/file pathsAndy Shaw2018-10-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | The setDataSource(Context, Uri) is used for passing a Uri that refers to data in a content provider. Whereas the path passed here is going to be http/rtsp instead. This fixes the warning that comes up about it not being able to open the path provided. Task-number: QTBUG-50539 Change-Id: I79882fb6d6a5683b6b95f8f9d4e2af86ea916831 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into 5.12v5.12.0-beta2Qt Forward Merge Bot2018-10-054-50/+78
|\| | | | | | | Change-Id: I70b363e614391ecce15ed55ef1267973c8b21355
| * DirectShow: Fix crash when camera destroyedVal Doroshchuk2018-10-051-1/+1
| | | | | | | | | | | | | | | | The lambda function is called even if the object is destroyed. Task-number: QTBUG-70932 Change-Id: I070059bd61769a6864a2848f2b537609577769de Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
| * EVR: Fix crash when no resources createdVal Doroshchuk2018-10-042-31/+16
| | | | | | | | | | | | | | | | | | Saved a copy of texture id in IMFSampleVIdeoBuffer and init it on first call. Task-number: QTBUG-70672 Change-Id: Iaf8ff4f3faa952846eca5a764c88e57807d4d211 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
| * Retrieve some information from the track metadata if availableJames McDonnell2018-10-011-18/+61
| | | | | | | | | | | | | | | | Later versions of the QNX 7.0.0 Multimedia component replace the top level audio/video metadata with track specific audio/video metadata. Change-Id: Ic88f23f8db9c06594da649d9e8fc4faf30acf1a0 Reviewed-by: Rafael Roquetto <rafael@roquetto.com>
| * EVR: Fix crash when video source is changed and ANGLE is usedVal Doroshchuk2018-09-251-1/+1
| | | | | | | | | | | | Task-number: QTBUG-70672 Change-Id: I38c1e868dd05835489a49e6c29d9ad1a36a5f7a9 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Exclude Qt Multimedia when Qt Network is missingEskil Abrahamsen Blomfeldt2018-10-051-0/+1
| | | | | | | | | | | | | | Qt Multimedia depends on Qt Network. Change-Id: I5ff679bef22e1143369e3c75aa508da82fe6af9a Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | GraphicsVideoItem: Interpret ARGB32 as premultipliedVal Doroshchuk2018-10-051-4/+5
| | | | | | | | | | | | | | | | | | | | Do not convert ARG32 to premultiplied. Rather interpret it as premultiplied. Should be better even if SSE2 is disabled. Task-number: QTBUG-52114 Change-Id: Ic63f59dc8a940d6d73c618ef3a75b47a0950fff3 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | DirectShow: Fix typo which breaks cameraVal Doroshchuk2018-10-041-1/+1
| | | | | | | | | | Change-Id: Ib2f799024b91131d33b9247dec167cae3e6adde9 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Gstreamer: Emit stateChanged(StoppedState) when recording is finishedv5.12.0-beta1VaL Doroshchuk2018-09-282-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When stop is requested, the state becomes QMediaRecorder::StoppedState and stateChanged() is sent immediately, also the status is changed from QMediaRecorder::RecordingStatus to QMediaRecorder::FinalizingStatus. But since stopping is asynchronous QMediaRecorder::StoppedState is sent before recording has been fully finished. When EOS is received from gstreamer and recording has been fully stopped, the status will be changed from QMediaRecorder::FinalizingStatus to QMediaRecorder::LoadedStatus and only in this case. So fixed to send stateChanged(QMediaRecorder::StoppedState) right after LoadedStatus. Task-number: QTBUG-69402 Change-Id: Ic7429a4bfea6b1f443a105a0540737072ad42de2 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Android: implement QMediaPlayer::setPlaybackRate()Yoann Lopes2018-09-265-3/+110
| | | | | | | | | | | | | | | | Only possible on Android API level 23 or higher. Task-number: QTBUG-61115 Change-Id: I147575ed0a48f84d4208978a67e0856918e65b3d Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* | imx: Fallback to copying data if mapping has not succeededVaL Doroshchuk2018-09-252-34/+41
| | | | | | | | | | | | | | | | | | | | | | | | Some formats or data might be unsupported and not possible to use them in glTexDirectVIVMap. If glTexDirectVIVMap returns an error then need to upload data to memory created by the driver using glTexDirectVIV. If at least one such error has occurred, all next video frames will be copied via glTexDirectVIV without trying to map again. Task-number: QTBUG-50927 Change-Id: I0715d4b244139b8d3f49d8bd2fc905f3fd55556c Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Gstreamer: Fix undeclared identifier QGstVideoRendererSink in 0.10 verVaL Doroshchuk2018-09-252-1/+2
| | | | | | | | | | | | Task-number: QTBUG-70465 Change-Id: I6af46cb8de0b40dc41aaa0b999faf68d102c7b48 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | DirectShow: Implement image capture settingsVal Doroshchuk2018-09-257-5/+213
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | Merge remote-tracking branch 'origin/5.11' into 5.12Qt Forward Merge Bot2018-09-252-14/+8
|\| | | | | | | Change-Id: I0f5e9ae8180fa3492ce9002b75932c448f2c2b55
| * Android: Fix crash when play() is called but state is not setVal Doroshchuk2018-09-241-1/+3
| | | | | | | | | | | | | | | | | | Change state to PlayingState only when media content has been provided. Task-number: QTBUG-70653 Task-number: QTBUG-68998 Change-Id: Iad8fc2c964ff22e90de6eb9b84c82a0950d0b1ac Reviewed-by: Christian Stromme <christian.stromme@qt.io>
| * Fix video window parenting and positioningJames McDonnell2018-09-201-13/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The positioning code seemed to be expecting that the video window is created as an application window but mm-renderer creates the window as a child when a group is specified. When the application window isn't located in the top-left corner of the display, this assumption produces incorrect positioning of the video window. Contrary to what a comment in the code indicated, the video window does not need to be parented to the application window. Doing so just makes it difficult to determine the correct position for the video window. Also ensure that the video window is resized when the metadata information doesn't contain width/height. On QNX 7.0.0, the code may fail to resize the window because the metadata doesn't contain the width/height information under the expected key. A floating point divide by zero occurs with undefined results. I'll adjust for the width/height move in a separate commit. Change-Id: I540c1798a03b7c03a4438d0852c80e4d086009be Reviewed-by: Janne Koskinen <janne.p.koskinen@qt.io> Reviewed-by: Rafael Roquetto <rafael@roquetto.com>
* | Update plugins.qmltypesKai Koehne2018-09-241-14/+37
| | | | | | | | | | | | Task-number: QTBUG-70264 Change-Id: I41144db999c4d68c12ba8ded21092bea8b59f20e Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into 5.12Qt Forward Merge Bot2018-09-152-1/+62
|\| | | | | | | Change-Id: I70d51b09681a77e72ecad764e37697d0a1bb85a5
| * Pulse: Fix crash when stop() is called while reading buffersVaL Doroshchuk2018-09-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Since reading from QIODevice can be reimplemented on user side, it can call QAudioOutput::stop() which will free resources. This will produce a crash in QPulseAudioOutput::userFeed() when it will attempt to write buffers. Task-number: QTBUG-69734 Change-Id: Ifa43ba52bb01bb40939730461615a9d182ffcc9b Reviewed-by: Christian Stromme <christian.stromme@qt.io>
| * Merge remote-tracking branch 'origin/5.11.2' into 5.11Qt Forward Merge Bot2018-09-091-0/+61
| |\ | | | | | | | | | Change-Id: I972cc399aab0898d9af75e8f733ec2272c94f1b9
| | * Add changes file for Qt 5.11.2v5.11.2Antti Kokko2018-08-291-0/+61
| | | | | | | | | | | | | | | Change-Id: I4d2af3eae00be23afefcfce7b1cc71d011cee126 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-0817-14/+216
|\| | | | | | | | | | | Change-Id: I886c4bda70a2b5a013a445d03487c7e3ef98e858
| * | Fix Gstreamer plugin to pass tst_QMediaPlayerBackendVaL Doroshchuk2018-09-064-8/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Fixed to provide QMediaPlayer::LoadedMedia media status in case when play -> pause -> stop made. - Fixed default duration -1 -> 0. - Fixed a test because after pause() positionChanged is always emitted. - Enabled the test. - Increased gap between prev and curr position after pause. Task-number: QTBUG-63517 Change-Id: I377f024d0a976f1ce802fe6740a771b7e0f2e8db Reviewed-by: Christian Stromme <christian.stromme@qt.io>
| * | Add OpenGL core profile support to QtMultimediaQuickToolsMassimo Callegari2018-09-0313-6/+204
| |/ | | | | | | | | | | | | | | | | | | | | | | When requesting a OGL Core profile via QSurfaceFormat::setDefaultFormat (e.g. to use Qt3D advanced features), it is no longer possible to render QML Video items. This is because the requested shaders should be _core versions. This patch adds the core shaders so QtMultimedia stops whining, and bind textures with the proper format, since GL_LUMINANCE and GL_LUMINANCE_ALPHA are no longer valid in OGL 4. Task-number: QTBUG-51064 Change-Id: I909e01e7dc7be07549e9ecf0a6425b309af38ea1 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io> Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Automatically register the latest import versionKai Koehne2018-09-061-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | This follows what was done in d28c9f6a for Qt Quick Controls 2. The latest import version (e.g. 2.11 in Qt 5.11) will automatically be registered whenever the Qt version is bumped. This avoids needing to wait until a new type is added (or a new revision is added to an existing type) before being able to use the newest Qt Quick version. Change-Id: Ib14052fdf2a4cfa7b71f739fe00ce9a95dadb0a0 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* | winrt: Fix clang warningsOliver Wolff2018-09-0620-92/+90
| | | | | | | | | | | | | | | | | | | | | | Fixed warning: - 0 as nullptr constant - missing override - change of signedness - non portable path to header file Change-Id: I75a7d8de45099e39eb46feed2350117b2e1995c3 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* | DirectShow: Fix clang-tidy warnings about else after returnFriedemann Kleint2018-09-0515-493/+388
| | | | | | | | | | | | | | | | | | - 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 loopsFriedemann Kleint2018-09-053-36/+23
| | | | | | | | | | | | | | - Replace by range-based for Change-Id: Ie73bf5b6e1ebd90e4db653af0791ec88b68ed883 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* | DirectShow: Fix clang-tidy warnings about C-style castsFriedemann Kleint2018-09-055-33/+51
| | | | | | | | | | | | | | Replace by reinterpret_cast<>. Change-Id: Iebcac7858d875e2d6f53db21489d86beb19ba947 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* | DirectShow: Fix clang-tidy warnings about class definitionsFriedemann Kleint2018-09-0538-315/+289
| | | | | | | | | | | | | | | | | | | | | | | | - Use ' = default' for trivial constructors/destructors - replace virtual by override or add override where applicable - Replace trivial constructors by member initialization for simple structs - Add Q_DISABLE_COPY where applicable - Mark move assignment/move constructors as noexcept - Remove unused member variables Change-Id: I579fb69ebcd945b94de32b827d93e5a4dab4df97 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* | Gstreamer: Introduce custom pipelineVaL Doroshchuk2018-08-3011-64/+160
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-302-11/+23
|\| | | | | | | Change-Id: I3a41fab753e5a06fc9f30464edf7d6626e7ae92a
| * Gstreamer: Set video-profile to CameraBin before GST_STATE_READYVaL Doroshchuk2018-08-222-10/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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: Fix gst_mini_object_unref: assertion refcount > 0 failedVaL Doroshchuk2018-08-221-1/+0
| | | | | | | | | | | | | | | | gst_value_get_sample does not return a reference to the sample. Should not call gst_sample_unref. Change-Id: Ibf71e6844b5756d85aac541a68e4e4ae4eefe498 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
| * Gstreamer: Fix crash when resolution or frame rates are requestedVaL Doroshchuk2018-08-221-0/+11
| | | | | | | | | | | | | | | | When either resolution or frame rates have been requested when the camera is in unloaded state, caps might not have some values. Change-Id: Ie935c62d02e10f762957ecd9f89255ad0e8fbd0b Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Gstreamer: Allow to use gst specific featuresVaL Doroshchuk2018-08-299-33/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | Merge remote-tracking branch 'origin/5.11' into devQt Forward Merge Bot2018-08-181-2/+1
|\| | | | | | | Change-Id: I34d2aa9cb4a9105d5de1a3634d8282dc68ceefe1
| * Android: Fix the player state when play() is called with no mediaVal Doroshchuk2018-08-161-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | If play() is called before any media is set, don't change the current state to PlayingState. This was inconsistent with the other backends, and required an unneeded call to stop() when a media later got set. Task-number: QTBUG-68998 Change-Id: I8281c7bf83e36e9a80f2136ca9fc2430c55e8bd6 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
* | Move shared example folder to examples/multimedia/sharedFrederik Gladhorn2018-08-077-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | The root examples directory should not contains shared folders. In the past multimedia was the only module installing things there, now the qtdoc module started doing the same. Let's clean up both. Task-number: QTBUG-69784 Change-Id: I8ff9d1b899fd589c1f3ec83e11b603431c2e4950 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io> Reviewed-by: Nico Vertriest <nico.vertriest@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devQt Forward Merge Bot2018-08-074-13/+55
|\| | | | | | | Change-Id: I4f6a59c4b9af45bfc0a5aeec8092c0d4e8fd3b2e
| * AVFoundation: Use opengl context from surface as sharedVaL Doroshchuk2018-08-021-7/+7
| | | | | | | | | | | | | | | | | | | | | | Since few opengl contexts could be used at the same time, CARenderer could use wrong context to render the video frame. If the video surface contains an opengl context then need to use it as shared regardless of existing of current context. Change-Id: Ie7e87682c73c0fd341b40c05e3f3c4a70d563242 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
| * DirectShow: Notify if camera has been unpluggedVal Doroshchuk2018-08-023-3/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-022-3/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | Merge remote-tracking branch 'origin/5.11' into devQt Forward Merge Bot2018-07-312-2/+8
|\| | | | | | | | | | | | | Conflicts: .qmake.conf Change-Id: I8d0aa330c9e5b2031b40ca645356226e8ebb50c8
| * Bump versionOswald Buddenhagen2018-07-301-1/+1
| | | | | | | | Change-Id: I74a4a3cbe1b37e3cdf21ae31fcca53be073823b1
| * 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 warning on deleteLater on nullptr in QSampleCachePierre Hallot2018-07-241-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | It is possible to have a loading thread running, but with no network manager. In that case, calling deleteLater() on m_networkAccessManager results in a warning: postEvent: Unexpected null receiver. Fix this issue by checking whether the network manager exists before calling deleteLater() on it. Task-number: QTBUG-66910 Change-Id: I818a87a605b4e906dee47c6c815a6b8112b16829 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>