| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| |
| | |
Change-Id: Ic16cafaf6df356e430db4d60ad95610c855e1042
|
| |\
| | |
| | |
| | | |
Change-Id: Ic46475146abe7b8493ae343e8332736fa6dcc3af
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The feature was added in 5.12.2.
And it is relevant only for GStreamer backend.
Change-Id: I87e22e506158dc61bb7f111e74806e7eb8c28d7a
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|\| |
| | |
| | |
| | | |
Change-Id: I09f511d894db5e9987ac2b9e42266bb87ef0161d
|
| |\|
| | |
| | |
| | | |
Change-Id: I428528333e89214d96acef5c2ba8ea832b2b145f
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
ResolutionPredicate defines an order on the resolutions (expressed as
QSize) of AVCaptureDeviceFormats, from smallest (width as primary,
height as secondary sort key) to largest, as the lexicographical
less-than of width and height. A a lexicographical order over Strict
Weak Orders is a Strict Weak Order of the product type. So far, so
good.
The logical negation of a Stict Weak Order is, however, not a Strict
Weak Order (not-less-than is greater-or-equal, not greater-than), so
it cannot be used as the predicate in std::sort.
Rewrite the ResolutionPredicate as an adapter that can be used with
std::less _or_ std::greater (or even std::equal_to), piggy-backing on
std::tuple to implement the lexicographical sort for us, then replace
not2(ResolutionPredicate) with ResolutionPredicate<std::greater>.
Rename the predicate to something more apt.
This also solves the use of deprecated (and in C++20, removed)
std::not2.
Change-Id: I6f81b149e53a5b4299b188bf3ce996f638bf3334
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | | |
Change-Id: Ie1c77fa373d37979e69c08ab4a959c18efc9599e
Fixes: QTBUG-76135
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Change-Id: I8b6b0f9b278ebb4b3eff0caaedab62cebfe9a695
Fixes: QTBUG-77097
Reviewed-by: Rolf Eike Beer <eb@emlix.com>
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>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
CARenderer was not re-created so black frames were rendered in video if current OpenGL context changed.
Task-number: QTBUG-77270
Change-Id: I8df423aaa9239c938363141cca1ae4136cde839b
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@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>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Task-number: QTBUG-75943
Change-Id: I5fe32da3809c35e47b1244481dc1786e3a4a0a07
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
- Replace the usages of deprecated APIs by corresponding
alternatives.
- Made the tests for deprecated APIs to compile conditionally,
based on the deprecation version.
Task-number: QTBUG-76491
Task-number: QTBUG-76540
Task-number: QTBUG-76541
Change-Id: Ifd397dae9b3ebc2ba2504db7baa2d8ff21bfb3a7
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
|\| |
| | |
| | |
| | | |
Change-Id: Ibe09461a3c1541836cc3a766276114d4ac2a74d9
|
| |\|
| | |
| | |
| | | |
Change-Id: Ic69cafce59e842ec05a90544e10c0bcebf5daeec
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
I might happen when shareContext remains the same but current context has been changed few times.
Change-Id: I55a7a9eab03776e3d1ca6d32117de6714692bbf0
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Also port from QMutexLocker to std::lock_guard or std::unique_lock, as
the former will not support QRecursiveMutex going forward.
Change-Id: I1ed1a129e2b9b77aa0a729e8cab03c673566a345
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
|\| |
| | |
| | |
| | | |
Change-Id: I329eeefafed87ff7467d21d5d099cf9897660167
|
| |\|
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
src/plugins/directshow/player/directshowplayerservice.cpp
Change-Id: I482098bb3c3b5b291175ca798b0d6ba61ad87d86
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Since starting the surface could be done after updating the geometry of
VideoOutput element (paint event is received),
and this leads setting invalid geometry to renderer and never updates by correct one.
Because the geometry is not "dirty" anymore, means already set.
Need just to update geometry when (or keep trying before) the surface is already started with
proper video surface format.
Change-Id: I338d7fe355c20f2027c6231241714376e9b569b2
Fixes: QTBUG-76205
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
In case of clearing current playlist by passing nullptr to QMediaPlayer::setPlaylist, empty url is passed to a backend:
QMediaContent m(playlist, QUrl(), false);
setMedia(m);
The status should be updated by QMediaPlayer::NoMedia if empty url is
passed.
Fixes tst_QMediaPlayerBackend::playlistObject()
Task-number: QTBUG-65574
Change-Id: Iea03e3fcb8d74c9b1b482aa06b42686cf8c9e9a7
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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: I9f811b4d0aadb04d3552dcd1f26a1565dfc230e2
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
| | |
| | |
| | |
| | |
| | | |
Change-Id: I5c2dadfe1154961adcecf779126166aea4d32393
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
| | |
| | |
| | |
| | |
| | | |
Change-Id: Ied89175c4b7f5df090deac174b1da1e8496ee533
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
| | |
| | |
| | |
| | |
| | | |
Change-Id: I9d74355fb800234d4fbd12235b89965921027223
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The class shouldn't have a user-provided copy ctor, because the compiler
could write it for us and the type would be trivial, but we can't remove
it in Qt 5, because that changes the way the class is passed by value
into functions (register instead of stack).
At least give it back its move special member functions, inhibited by the
user-provided copy ctor, and schedule the whole lot for removal in Qt 6.
Change-Id: Ic19ef43f3d313fea938aa769c067a736ec691337
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
|
|\| |
| | |
| | |
| | | |
Change-Id: Id2ff1bf85080dfdc7d318f459d78686b6c2f12b3
|
| |\|
| | |
| | |
| | | |
Change-Id: Ie621069a6a069905ea40541c651de6e9e038994f
|
| | |
| | |
| | |
| | |
| | | |
Change-Id: Ia50ce0d2c94b3b064e9cd571e598ecd37ee2b5e3
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Patch content originally proposed by Alex Reche and Olivier Le Roux.
Fixes: QTBUG-67985
Change-Id: I3ec80c566bf7c67c50e3e7485248412c40bdf169
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Since there could be multiple audio plugins, sometimes it is useful
to filter devices per a plugin or avoid duplicates if any.
QAudioDeviceInfo::realm() returns a key of the audio plugin
that was used to retrieve the device info.
Change-Id: Ie786c2c0f5bf181f08ee9be544f20eb41a264e26
Fixes: QTBUG-75781
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
|
|\| |
| | |
| | |
| | | |
Change-Id: I7ca7fb6143ec296c16a37a7be236470dbd1742a7
|
| |\ \ |
|
| | |\|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Conflicts:
.qmake.conf
Change-Id: Ic700bdddc5b4ae663af0daae54feb2420c8a1730
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
GetFrameRateList passes an unmanaged pointer to the caller which must be
manually freed with CoTaskMemFree. Additionally the Chromium project
notes that some drivers cause quirky return values which we would not
catch without stricter checks. See: https://chromium.googlesource.com/chromium/src/media/+/8cc93abd7339eeb9b7c2a12cca07b3dc245b2139/video/capture/win/video_capture_device_win.cc#484
Change-Id: I6aa4a6ea1ac0241e585e98cf9ff63240bacd3956
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Fixes: QTBUG-76816
Change-Id: I2909c2f2df91ac26b5104e24892310aa62cad172
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
QSample objects live and handled in loading thread (which uses QNetworkAccessManager).
When the app is finished and going to be destroyed, all static objects are destroying as well.
In case if static QNetworkConfigurationManagerPrivate (which is used by QNetworkAccessManager)
is destroyed before static QSampleCache, and loading of the resource is not finished yet
(still executing QNetworkAccessManager::get()), this produces a crash.
Since the loading thread is started only when loading of new QSample is requested,
(and all events are also handled by this thread)
proposing a fix to wait before loading thread is finished when a sample is requested to be released.
This postpones deleting of the QSample either when new sample is requested to load
or when QSampleCache is destroyed.
This makes sure that no loading thread exists when all QSoundEffects objects
and afterwards QNetworkConfigurationManagerPrivate are already deleted.
Change-Id: I55669ea4c2796a48cae4f0465f7f74d89e393675
Fixes: QTBUG-76090
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
With newer MinGW versions we have to link against libamstrmid for the
symbols IID_IMFTopologyServiceLookupClient, IID_IMFVideoDeviceID and
IID_IMFVideoPresenter.
Fixes: QTBUG-70655
Change-Id: Ib203d991d2bd8cd63193a7319c156f30f0e8826b
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
MEDIASUBTYPE_RGB24 inverts Red and Blue channels, i.e. on Little-Endian: BGR
and thus Format_BGR24 should be used instead of Format_RGB24.
To reproduce the bug:
QCameraViewfinderSettings settings;
settings.setPixelFormat(QVideoFrame::Format_RGB24);
camera->setViewfinderSettings(settings);
If the camera supports MEDIASUBTYPE_RGB24 it will show Red and Blue
channels inverted.
*NOTE*
This fix causes ignoring MEDIASUBTYPE_RGB24 format and using
MEDUASUBTYPE_RGB32 instead.
Because the video surfaces currently do not support QVideoFrame::Format_BGR32.
So it fixes the issue with inverted colors by ignoring RGB24 media type.
If there is a need to use RGB24, it would require to implement custom
surface which supports QVideoFrame::Format_BGR24 and swap colors
manually.
Change-Id: I0d77694ef688a05dc52d13f991a5088e00f72867
Fixes: QTBUG-75959
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
| |/ /
| | |
| | |
| | |
| | |
| | | |
Task-number: QTBUG-74391
Change-Id: I7047254fb8695feabd08eaaf02bee21a1b805917
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This one is not trivial in that it isn't clear, a priori, that the
loop body doesn't re-enter the class and ends up modifying
m_videoProbes.
But MFVideoProbeControl::bufferProbed() just schedules a deferred call
to QMediaVideoProbeControl::videoFrameProbed() (via QueuedConnection),
so this cannot happen, because we end the loop before we re-enter the
event loop (if any) on this thread. Reentrancy from a different thread,
OTOH, is not possible because we're holding m_videoProbeMutex while
looping.
Change-Id: I6c1e22cd01112f0b2650e056f0b7f4a392370b84
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
|
|\ \ \ |
|
| |\| |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Conflicts:
.qmake.conf
Change-Id: I2f2a9371dd1085c10450f23e56c9f18078cc8698
|
| | |\|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Conflicts:
.qmake.conf
Change-Id: Ieed5727ca602712ac008a876333e36ebb3dcba30
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
error: invalid use of incomplete type 'class QGLContext'
Change-Id: I4bc9bd4231e663b187d3cef917b7a551ba614ba9
Fixes: QTBUG-76405
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Q_FOREACH is going to be deprecated, or at the very least banned from
use in Qt code.
All these are trivial in the sense that the loop body clearly doesn't
modify the container over which we iterate, and that the container is
const, or trivially marked as such.
In one case, replaced Q_FOREACH + delete + clear() with
qDeleteAll(qExchange()), in three others, replaced Qt containers with
statically-known content with plain C arrays.
Change-Id: I718821811370f0cfefac3893283572d39a7d957d
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@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>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Python
The classes inherit QObject, but make the destructor private, which
makes it impossible to add Qt for Python bindings.
Make destructors protected to fix this. This is arguably a BC break
for compilers which have the accessibility mangled in the symbol, but,
since the destructor was private, there cannot be any code using it.
Task-number: QTBUG-74422
Task-number: PYSIDE-1041
Change-Id: Id23d73aea8aedf15caafa20c048a80efd3e880bd
Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|