| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Changing the videooutput and deleting the mediaplayer
directly afterwards could lead to a deadlock, as the
videosink was blocking on a pad and then calling
a slot on the main thread using a blocking queued
connection. If the main thread was changing the state of
the gst pipeline at the same time, this could lead to
a deadlock.
Avoid it by pausing the pipeline before changing the
video output.
Change-Id: I0d0cbad0ab97a4eb83dd3c66c664c01de3b0ea90
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
Waiting for 10 secs was ok for development, but we should really
never have to wait that long.
Change-Id: Ie10b22984948df6ccd7a1004ba10e50f415fe69e
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a queue element into the pipeline to decouple
things between input and output. Add ability to
suspend/resume the QGstAppSrc.
This finally makes the autotest pass consistently.
Change-Id: Ib20d1f9e6932aa9459085ad46fe78fdd03749723
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
QPlatformMediaEncoder should not be a QObject, as with the
other backend classes. Instead, the class now tracks some
state to simplify the implementation of the platform dependent
code and emits the signals for the frontend.
Change-Id: Iec45638de4333cb9e88f89c448194b49a5de0e1e
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
| |
Change-Id: I663c1f1de4fe6ca25f4f6aa353084701d2c9751d
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
| |
In this case m_stream is a nullptr, make sure we never access
it.
Change-Id: I095d18fc99a60bc9b5cd9fe1bc33b7879f109c8a
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
Closing the audio output would delete the pipeline, and would
lead to deleting the GstAppSrc from within QGstAppSrc::pushData().
Speed up the qsoundeffect autotest (this uncovered the issue).
Change-Id: I3c5843854f5a74d563eb271df553c8a1a5854f63
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
| |
Add ifdef guards to compile correctly when gstreamer_gl is not available.
Change-Id: I483081db018e45068b720f41c3a418d943891873
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
| |
Change-Id: Ifa7bcd4507948cd61909a11af203852ee1586787
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
To keep Qt Multimedia compiling against 6.1 will help
people that want to test the module using a released
version of Qt.
This disables usage of the P010 and P016 video formats
on gstreamer, as RHI doesn't yet support the texture
types we need to render them correctly.
Change-Id: I009f0b37951072b1d6e671dbdd4bb7b33767226a
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
|
|
|
|
|
|
|
|
| |
Only implemented on gstreamer right now. Make it possible to
define a specific format that the camera shouls be using.
Change-Id: I588e75600f8915d8693c111381dae8dcd8973cbc
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
* Properly emit all image capturing signals
* Create meta data and write it to the image
* Skip tests if there's no camera available
* Skip tests if a required feature is not supported
Change-Id: I621a8413848d7017aa131ee6dd31071000ef46b1
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
| |
Change-Id: Id058ad0ba34bf3810a09591dd51cddedbda7c2e2
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
|
|
|
|
|
|
|
|
| |
The time calculation to tag GstBuffer objects in the QGstAppSrc
was wrong.
Change-Id: I86eaa14a0b52985fa25310df5e32224812b5b369
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add a notification mechanism to the pipeline so
the video output knows when QMediaPlayer is in
a stopped state (using QProperty), as we want the
pipeline to be in a paused state internally, but
not get preroll frames if we're in paused externally.
* Properly emit metadataChanged() signals, and ensure
we're in GST_STATE_PAUSED before trying a seek.
Change-Id: I1cad557e648f82909a63cba8d6144df8476524f5
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Merge it with the old bus helper class and put it into a file
of it's own.
This will allow us to add additional properties to the pipeline
that can be seen by all places using it.
Change-Id: I79ef1d10c30dd7b109b89e180009306f672aacdc
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fix a couple of more autotests and do better state and
status handling.
Move keeping track of state changes into the platform
independent code.
Change-Id: If401af6cfa2707ce7c7184cf9baff76a60dd41ff
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
|
|
|
|
|
|
|
|
| |
This caused a crash in the mediaplayerbackend autotest.
Change-Id: I4b610cba310872d22531287eaf58c7934feb486a
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
|
|
|
|
|
|
|
|
|
| |
This avoids some critical gstreamer errors, where refcounting
was off.
Change-Id: I1e5495d92d47f2f49c92fa3f2d9e059010a59fe9
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
|
|
|
|
|
|
| |
Change-Id: Id51e1f5d00afdc71e4629e528eb086b724ab4598
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
|
|
|
|
|
|
| |
Change-Id: Ie6230c79fa6517575ae2f1baca94319882abdb3b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Remove the UnknownMediaStatus enum (it's really not helpful)
and avoid storing a copy of the status in the frontend class.
Store the status in the platform media player instance. This
requires some further cleanups to avoid that the reimplementations
store their own copy.
Change-Id: I939e78808f0eaa6a398560661df66c9d986fdd91
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
Some streamlinking of the test code and a couple of
fixes in the gstreamer backend so it behaves in all
corner cases.
Change-Id: Id9f00449dc1dfd9973d68a72d5b276692666713b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Clean up the code in QGstAppSrc. Use the new QGst* classes,
and move creation of the GstAppSrc into the class by default.
We still need a way to use an externally defined app src for
playbin support in the audio decoder, so still allow that.
Adjust usages of the API in all places.
Change-Id: Ibcad7e4c836ca9572dfc3d8ed17b7f1980913619
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
| |
Change-Id: I016a84cdfcc93cee4c8c7b1b3c50588644a94566
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
Some cameras only provide JPEG encoded images to gstreamer and
no raw video data. Detect that case by checking the GstCaps of
the camera element we load and put a jpeg decoder into the
pipeline if required.
Change-Id: Ib1e2b3525f05bbb9acbdb6dccd38fc877f31acb9
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Doris Verria <doris.verria@qt.io>
|
|
|
|
|
|
| |
Change-Id: I1131b555014a57e3224a8871de4cb1d01c406fd1
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
Only set the render rectangle that gstreamer should use once
we have set up the window id. Otherwise, this will lead
to weird sizes being used by gstreamer.
Change-Id: Id643761cb8eda574831c816d49e9b17ffe80d33e
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
| |
There are still some smaller issues left, but this seems
to get at least something working again.
Change-Id: Id1b3a153ec7ed20ea724ee80f8eb7e7651215ac4
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
| |
Fix crashes due to dangling pointers. On gstreamer avoid using
message filters when we do not need them.
Change-Id: I1bce271dda4b5efb3913954deb719542288b9b12
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
| |
The properties are int based, not double based.
Change-Id: Ie81cc6ed7fccb0edc07ef811b694012d9b6cc1c0
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
| |
Rename some methods with better names and adjust the API so
that it also can be used for QML.
Change-Id: Ica19675966680416fbe870808336d8fc82065bc1
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Doris Verria <doris.verria@qt.io>
|
|
|
|
|
|
|
|
| |
Handle a couple of error cases without crashing.
Change-Id: Id4e2e1197bc7daa0351130117ed07e7a9c6fb9fa
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Doris Verria <doris.verria@qt.io>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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>
|
|
|
|
|
|
|
| |
QPlatformVideoSink: :repaint() was unused, remove it.
Change-Id: I75fb43a3c6e9f8166ae22dbd8705d78da1e502c8
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
| |
This was nothing else than a timer, something you can
just as well implement on top of Qt Multimedia if required.
Change-Id: I1ef362f1f4ad5a5f85e92bfbb1d73b7710271e5c
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
| |
Change-Id: I5a6f8392352b212fb4741d4253c16874f7db6581
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
We can't handle them efficiently on old OpenGL 2 based hardware.
As YUV formats are usually preferred, we should not have problems
simply removing those.
Change-Id: Ibee483302cdada9d4d46c18196c6cee5d9945ae2
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Tested all formats that could be tested through gstreamer and
ensured our shaders to the right thing.
Required adding a width uniform, so we can pick the correct
Y value for YUYV non planar formats.
The IMC formats should work, but are untested as gstreamer
does not support them.
Change-Id: Ib0fe0a7c7d97eb81a75f636c752a85f51a327183
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
| |
For 16bit data, we only support the platforms native
endianness.
Change-Id: Ic04097125622715e6847d568551d572cd317b674
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
Remove 24bit packed pixel formats, as those would require
unpacking on the CPU to be able to be processed efficiently
on the GPU side. As such, they are not really formats that
should be used for uncompressed video.
Change-Id: I29c8b87aeaf97aee13ea2b93afd5115741198eee
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
| |
Change-Id: Ifa888c74c397c640b19387a9ce624dfcf8269c2c
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Doris Verria <doris.verria@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This was inconsistent so far. QVideoFrame had half the properties
of QVideoSurfaceFormat, but was missing some parts that are
required to render the frame properly.
Giving it a QVideoSurfaceFormat means that the QVideoFrame is
self describing and can be rendered without additional information.
Change-Id: Idb2757ee6a29020bd72c9c50891309ee8d8a8bfc
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
| |
This is a property of the individual QVideoFrame, and doesn't
belong here.
Change-Id: I85f180ff46023f6a48ef856a356d9c45c3f6be1b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Doris Verria <doris.verria@qt.io>
|
|
|
|
|
|
| |
Change-Id: I3c8a9b6354edd8d9a593ee51aed71912efcf66ba
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Doris Verria <doris.verria@qt.io>
|
|
|
|
|
|
| |
Change-Id: I352c03233f6c1c34747709ebf154564a626594e5
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|