| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| |
| | |
Change-Id: I5b99b3d05502e15373ebaedcad06d6ab4d25d387
|
| |
| |
| |
| |
| |
| |
| |
| | |
It would be reset to this state at the end of updateMediaStatus() anyway, so
simply leave it alone.
Change-Id: I7fa24773ebb1dd43ecfa8d7eb28d6f8e7862fa75
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When custom pipeline is requested, all playbin related elements must be cleared.
Also when QMediaPlayer is destroying, it disables showing preroll frames,
property of the video sink, which was already destroyed.
Destroying of m_videoOutputBin decreases refcounter for m_videoSink,
since the video sink is owned by m_videoOutputBin.
Fixes: QTBUG-79753
Change-Id: I2fcbd19372caf46adf2ae1ed2e5a7d0ee70040ad
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Since for Android GStreamer is distributed in archives,
and should be staticlly linked, so by default it is not built
and should be explicitly enabled within configuring by -gstreamer option.
(currently it is auto and enabled if gstreamer exists)
("libs" of the gstreamer library in configure.json is empty
to prevent any libs to be added while building any code that uses
gstreamer library)
Some base gst archives are fully included to Qt5MultimediaGstTools.
Users would need to just use:
QT += multimediagsttools-private
Before building, GSTREAMER_ROOT_ANDROID env var should be set to point to
gst binaries.
Also all necessary plugins must be registered in user's code by
GST_PLUGIN_STATIC_DECLARE/GST_PLUGIN_STATIC_REGISTER macros after
QGstUtils::initializeGst().
and e.g. project file might contain:
INCLUDEPATH += $$(GSTREAMER_ROOT_ANDROID)/armv7/include/ \
$(GSTREAMER_ROOT_ANDROID)/armv7/include/gstreamer-1.0 \
$(GSTREAMER_ROOT_ANDROID)/armv7/include/glib-2.0 \
$(GSTREAMER_ROOT_ANDROID)/armv7/lib/glib-2.0/include
LIBS += -L$$(GSTREAMER_ROOT_ANDROID)/armv7/lib/ \
-L$$(GSTREAMER_ROOT_ANDROID)/armv7/lib/gstreamer-1.0 \
__here_list_of_plugins__
See video/android/gstreamer example
Change-Id: Ie4e586fa8489f1bd23622763f5578abed1729272
Task-number: QTBUG-72125
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
|
|\|
| |
| |
| |
| |
| |
| | |
Conflicts:
src/multimedia/configure.json
Change-Id: Ie887a5f4d718cb3e082b0e2ee996c6687af330cb
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Currently if custom pipeline is set, old playbin elements are destroyed.
And if normal url is passed again after the custom pipeline, it is unable to play.
Because no playbin elements exist anymore.
Adding a fix to recreate playbin elements if "not a pipeline url" is passed.
Fixes: QTBUG-78079
Change-Id: I8b3498c4660639f5d757b322a136846ee82fdc28
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
* Add const & to function parameters
* Add const & to variables assigned from functions returning const &
Change-Id: Idc141bd48f37eae92a4d1775caade3c977a42391
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
|\|
| |
| |
| |
| |
| |
| | |
Conflicts:
src/multimedia/video/qvideoframe.h
Change-Id: I8458c4138be05f661d6528116cbc6b18298f0a91
|
| |
| |
| |
| |
| | |
Change-Id: I2fc8d9c8b951092498f11a4a31c6c890df9d7495
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
| |
| |
| |
| |
| | |
Change-Id: I9aab0c5c20f97bc45fa26cc3a0faf6cf10c916d2
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
|\|
| |
| |
| | |
Change-Id: I2ba97d82a57172656f6549f368ee51f718f9cdf8
|
| |
| |
| |
| |
| | |
Change-Id: I0069b96f00830cd441b60bef5847b1543ba2c1af
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
|\|
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/gsttools/qgstvideorenderersink.cpp
src/gsttools/qgstvideorenderersink_p.h
Change-Id: I7fe29161d568fa3f7688abfd2f993d1b16ac3fb9
|
| |
| |
| |
| |
| |
| | |
Change-Id: I96026828c357677c84e880ea85e6e82b8c0495c7
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
|\|
| |
| |
| | |
Change-Id: I09f511d894db5e9987ac2b9e42266bb87ef0161d
|
| |\
| | |
| | |
| | | |
Change-Id: I428528333e89214d96acef5c2ba8ea832b2b145f
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
We promised to not provide any video frames before pause() or play() is called.
Regardless the media is loaded or not.
It should work like following:
setMedia(new)
// ...
// no video frames returned yet
pause()
// prerolled frame should be shown
To implement this, i.e. showing the prerolled frame after pause, we do seeking to the beginning.
But it is totally not necessarily when play() is requested,
since here is new media and playback will start from the beginning anyway.
This also produces a hang/stuck on some embedded systems with custom pipelines or playing from qrc.
So decided to show prerolled frame and this means to seek to the beginning only when pause() is called.
Task-number: QTBUG-65399
Change-Id: I9b3dc632fa0df4a1115d852c2d480fd5c7fd9ee5
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
qtvideosink element is available in pipelines only if QVideoRendererControl
is used, because it requires a video surface.
So if qtvideosink is used inside pipeline but a surface is not available,
created null/dummy surface to render video frames to and show
a warning about this.
Change-Id: I924d3baca994363550b7920176e29e9cd0c4dd1f
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Currently QAudioRecorder is implemented to find a codec and muxer that match some caps.
E.g. if we would want "audio/x-wav" container with PCM format, there is only one gst element
which supports it:
wavenc element accepts "audio/x-raw", "audio/x-alaw" or "audio/x-mulaw"
and provides buffers in "audio/x-wav" or "audio/x-rf64".
Next, we would need to find a codec which provides buffers in
"audio/x-raw", "audio/x-alaw" or "audio/x-mulaw". It might be mulawenc and alawenc.
And finally we combine them together to pipeline:
audio/x-raw -> mulawenc|alawenc -> wavenc -> audio/x-wav
And as a result there will be wav file and encoded in "audio/x-alaw" or "audio/x-mulaw"
and not in desired PCM format.
So suggesting to add audioconvert element to the audio encoders to allow to link
with various containers:
audio/x-raw -> audioconvert -> wavenc -> audio/x-wav
Change-Id: Icd77124267f5a0999625fa1fe4e3de3740218741
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
|
|\| |
| | |
| | |
| | | |
Change-Id: I329eeefafed87ff7467d21d5d099cf9897660167
|
| |\|
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
src/plugins/directshow/player/directshowplayerservice.cpp
Change-Id: I482098bb3c3b5b291175ca798b0d6ba61ad87d86
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Moved stream types to QGstCodecsInfo and added possibility to fetch audio
or video codecs by a container. Or fetch containers by audio or video codec.
It would allow to debug supported codecs and containers:
QGstCodecsInfo containers(QGstCodecsInfo::Muxer);
QGstCodecsInfo audioCodecs(QGstCodecsInfo::AudioEncoder);
for (auto &container: containers.supportedCodecs())
qDebug() << audioCodecs.supportedCodecs(containers.supportedStreamTypes(container));
Change-Id: I26bf5579db6974a166d408c4865a9ffe314e3e15
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
|
|\| |
| | |
| | |
| | | |
Change-Id: I7ca7fb6143ec296c16a37a7be236470dbd1742a7
|
| |\|
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
.qmake.conf
Change-Id: Ic700bdddc5b4ae663af0daae54feb2420c8a1730
|
| | |
| | |
| | |
| | |
| | |
| | | |
Fixes: QTBUG-76816
Change-Id: I2909c2f2df91ac26b5104e24892310aa62cad172
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Java-style iterators are scheduled to be deprecated, or at the very
least banned from use in Qt's own implementation.
Ditto for QLinkedList.
Change-Id: I5471c293a7a050b92db47f7aeac15dd05bd46650
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Sequential devices such as network sockets may continuously stream data.
Thus, the device being atEnd() or returning 0 for read() doesn't
automatically mean that the stream is done.
This fixes streaming live data over a device (e.g. socket or pipe).
[ChangeLog][][GStreamer backend] Fix streaming data from
sequential devices.
Change-Id: I2fc834479cc6d52a806790ccb722bcfdea4723be
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
|\| |
| | |
| | |
| | | |
Change-Id: Ic3ac3515666576046ac1ec5342c5b06aadbc18ac
|
| |\|
| | |
| | |
| | | |
Change-Id: Ib819180a25ceedfb072362d55d30f94e40a44f9b
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
If the camera has been already opened, ioctl returns EBUSY,
and this camera is not listed in available cameras.
Change-Id: I1ee6e067a3d080fe82a528f576ba13e03d5f816e
Fixes: QTBUG-76236
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
|
|\| |
| | |
| | |
| | | |
Change-Id: Id1638836ea3faf16c4ba39119029522b2afbe803
|
| |\|
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
src/plugins/directshow/player/directshowplayerservice.cpp
Change-Id: I6b7edc312ecfadf84653ce24321ec55da41e131a
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Sometimes it is needed to configure udpsrc element to play a stream,
means to set some caps to GstUDPSrc element.
But currently there are no any ways to pass such caps.
Added parsing of the requested url to find "udpsrc.caps" query item
and to use it as the caps for udpsrc source element.
It allows to show streams by passing caps within url.
E.g. if the stream is created using
$ gst-launch-1.0 v4l2src ! videoconvert ! video/x-raw,format=I420,width=800,height=600 ! \
jpegenc ! rtpjpegpay ! udpsink host=127.0.0.1 port=5001
it could be shown via QMediaPlayer like:
MediaPlayer {
source: "udp://127.0.0.1:5001/?udpsrc.caps=application/x-rtp,media=video,clock-rate=90000,encoding=JPEG,payload=26"
}
Change-Id: I6f9c20c6004a34bce5fd1d0073311b7c62a8010f
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Dump dot file on play only.
Change-Id: Ide7fe0cad56f06a89604cf40b59b858c9c9d09f2
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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>
|
|\| |
| | |
| | |
| | | |
Change-Id: I82d63ba32a0c9f8b883d00ef1bd68df3a10da96c
|
| |\|
| | |
| | |
| | | |
Change-Id: I03225f5e980a69246b046351f7d7d8e84f102ca0
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
[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>
|
|\| |
| | |
| | |
| | | |
Change-Id: If1977853a4e364f06f91bfe1d2cb128a920050f0
|
| |\|
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
.qmake.conf
Change-Id: Ie0a7534d518cd5758119edc77d8275ac3da2037c
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This fixes an compile failure introduced in commit 67c4ec55.
Fixes: QTBUG-74475
Change-Id: I0dabb72f8b5cdd75336b15515381ff9d9442788f
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
|\| |
| | |
| | |
| | | |
Change-Id: I0a12a39a9f3e890e2d5bbece7d8c7d895dac0707
|
| |\|
| | |
| | |
| | | |
Change-Id: I7a99bdc1300e3e19c85967bf67da3481a259e3c1
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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>
|
|\| |
| | |
| | |
| | | |
Change-Id: I537d400df8ba9b1aab44a8dcb9df7e18881a6794
|