summaryrefslogtreecommitdiffstats
path: root/src/multimedia/video/qvideosink.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Fix crashes on Linuxwip/qt6Friedemann Kleint2021-05-261-3/+5
| | | | | | | Check for videosink and QPlatformMediaFormatInfo in QMediaFormat. Change-Id: I9603dae66fc4eb6a4433f43d2464e9f97916235f Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Clean up the videoOutput() APILars Knoll2021-05-211-0/+25
| | | | | | | | | | | | | | | | | | | | The current API was rather messy, with multiple overloads. Change this and make the videoOutput a QObject * based property. To account for QVideoSink, add a videoSink()/setVideoSink() overload. This also helps identifying the correct sink in all cases. Add some code to protect against deletion of the videoOutput or videoSink from somewhere else. Adjust autotests and fix the qquickvideooutput autotests. With this change we are now passing all existing autotests again on Linux/gstreamer. Change-Id: I77b9863e88a7863abf27ab465fadd9c24f486502 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Doc improvementsLars Knoll2021-05-181-0/+3
| | | | | | | | | | | | | | | | | | | Try to add at least a short class overview to every C++ class and document most properties there. Some API cleanups in QMediaRecorder. Some rough cleanups in the overview documentation, removing mentions of features and APIs that do not exist anymore and adjust the ones that have changed. Updated the changes.qdoc file to now reflect the changes from Qt 5 to Qt 6, not from Qt 4 to Qt 5 anymore. Change-Id: I42f4994d3af4d35ab5e51afe351afa653964bea8 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Make getter constVolker Hilsheimer2021-05-071-1/+1
| | | | | Change-Id: I905baa8b52b4155baa91c9c565aaa3b70d03ea28 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Fix sizeHint() of QVideoWidget/QVideoGraphicsItemLars Knoll2021-04-281-0/+9
| | | | | | | | | Doesn't yet fix all test failures, but it's an improvement. Change-Id: I775857f1fb580b78ae137dc71ee445a15eafd0a7 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Re-enable tst_qvideowidget and fix most errors in the testLars Knoll2021-04-281-1/+12
| | | | | | Change-Id: I77bf951d9e334d92b65d0f9f5c37c22033e91060 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
* Remove the graphicsType enum from QVideoSinkLars Knoll2021-04-161-11/+0
| | | | | | | | | This is redundant, as we can determine the type from whether we have a native window id or an RHI handle set on the sink. Change-Id: I7795e2f1d504fb7df107d1a402ae55adff33d05b Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Clean up QVideoSink and it's platform implementationLars Knoll2021-04-161-29/+43
| | | | | | | | | | | | * Normalize ranges of brightness and friends to [-1, 1] and use floating point numbers. * Remove getters for values from the platform API, rather store them in the frontend. This simplifies the work that needs to be done on the backend side. Change-Id: I8d63dacaa6b2873b33e17fcd7831e41173109a7e Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
* Rename QVideoSurfaceFormat to QVideoFrameFormatLars Knoll2021-04-141-5/+5
| | | | | | | | | The class is used exclusively together with video frames to describe their format, so the name should reflect that. Change-Id: I10bec7a0556b22c69ac790a99282e1376ce4af97 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Add some very basic and incomplete docs for QVideoSinkLars Knoll2021-04-121-0/+64
| | | | | | Change-Id: I41a48e3175802ff444639dd2ceacee202b32ff89 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Cleanups in QVideoSinkLars Knoll2021-04-121-32/+1
| | | | | | | | | | | | Remove render() and the transform and opacity properties. render() because it won't work that way, and the other two properties because they aren't needed. Those properties can be set up before drawing and QVideoSink doesn't need to know about that. Change-Id: Ib4e45336a59bd1c5b6d95448dbbf858571e8e0ea Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* More work to enable HW decoding for Qt QuickLars Knoll2021-04-071-0/+3
| | | | | | | | | | | | | | | | | Request GL textures from the pipeline for now. Some initial code to also use the texture upload meta functionality in gstreamer, but that will require some more work so we don't make the GL context current in the wrong thread. The gstreamer VAAPI elements on AMD hardware (or in general...) seem to have some bugs. Converting a VASurface to a GL texture using the texture upload meta doesn't create an ARGB texture as promised, but does write some YUV data into the texture. And trying to map a SW buffer received from the VAAPI decoders fails. Change-Id: I9b629eb84f3f32adc23ae2e2fd1cd3e42e6afbc0 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Start adding infrastructure to retrieve video frames as textureLars Knoll2021-04-061-0/+11
| | | | | | | | | | | | | | | We're using RHI here, as that's what we need for Qt Quick anyway. You can now set a QRhi object on QVideoSink. This can then be used internally to create textures of the required format instead of memory buffers. QVideoSurfaceFormat will now tell you how many planes are required for the format, and you can retrieve the textures for each plane from QVideoFrame. Change-Id: I86430db60a8f1aba07ec3b38e22b977cdaefaa0a Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Smaller API cleanups in QVideoFrameLars Knoll2021-04-061-1/+1
| | | | | | | | | | | | Get rid of the buffer method. It's not used, and QAbstractVideoBuffer is private anyway. Use map() to access the data. Rename image() to toImage() to make it explicit that we're doing a conversion here. Change-Id: Ie2735bc1a5131c09098fa80c9df7bf5b165b557c Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
* Move the PixelFormat enum from QVideoFrame to QVideoSurfaceFormatLars Knoll2021-04-061-1/+1
| | | | | | Change-Id: Ifa888c74c397c640b19387a9ce624dfcf8269c2c Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
* Kill QVideoFrame::PixmapHandleLars Knoll2021-04-061-3/+1
| | | | | | | | | This didn't make sense since Qt 5.0, as a pixmap is the same as an image in Qt 5/6. It was also completely unused. Change-Id: I97d548ca288c9aebb580f0fbaf9fbbba488e197a Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
* Fix Windowed playback on macOSLars Knoll2021-04-061-0/+1
| | | | | | | | | | | | Windowed playback works again, and we're now using the new QVideoSink for that. Next step is to merge in the code for non windowed mode and ensure we can handle both. Change-Id: Ieaaad3adaa6c8964324ea55623380c630faea61b Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
* Fix QML video renderingLars Knoll2021-04-061-0/+1
| | | | | | | | | | | Use the new QVideoSink class to get the video frames. Fix some APIs, so that we correctly connect VideoOutput and MediaPlayer. Change-Id: I65a0d045988c46a917f70dfb922c1bbdb32f6511 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Convert QGraphicsVideoItem to use QVideoSinkLars Knoll2021-04-061-1/+12
| | | | | | Change-Id: Id9af7457f590ed6387c36473e73c244ef44f8f8a Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
* Use native windows again in QVideoWidgetLars Knoll2021-04-061-2/+2
| | | | | | Change-Id: I609af1873e34e64b220310de559a795bb6163bc3 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Add support for SW rendering in QVideoSinkLars Knoll2021-04-061-7/+41
| | | | | | | | | Retrieve SW buffers from gstreamer if that's what the sink wants. Change-Id: I3598594a219e436d6f64c5eefbc001f3f46d3789 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Retrieve the QPlatformVideoSink from the platform integrationLars Knoll2021-04-061-15/+30
| | | | | | | | Proper layering. Change-Id: I66df7bb883dc70e65d52df854f309545b86c61b6 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Add a fullscreen property to QVideoSinkLars Knoll2021-04-061-0/+10
| | | | | | | | This is required to be able to move things into a fullscreen mode. Change-Id: Iac69cd34d48886f010e0b21ad3f47fa70b0bc205 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Get windowed playback working againLars Knoll2021-04-061-5/+57
| | | | | | | | | | | And start moving over to the new QVideoSink API. Fun side effect: HW accelerated video decoding does work with this change on Linux. Change-Id: Ic88d13b4fc7028b300349f9bf7ed1a7b3e08d37c Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Add new QVideoSink classLars Knoll2021-03-231-0/+198
This is the starting point for the new video output API for QtMultimedia. Nothing working yet :) Change-Id: Idaa98394b7c9461cfe5443fdd1566ecc9fc985cb Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>