summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Merge 5.12 into 5.12.5v5.12.55.12.5Paul Wicking2019-08-231-3/+4
|\ | | | | | | Change-Id: If27d8e3bb898607c5bf07dbfc97476859ae24646
| * CameraBinV4LImageProcessing: Show additional info in case of errorsVaL Doroshchuk2019-08-201-3/+4
| | | | | | | | | | Change-Id: I1ed22d646c2ff230217e1ecefaf37a0a45fa4b54 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* | Add changes file for Qt 5.12.5Antti Kokko2019-08-221-0/+35
|/ | | | | Change-Id: I282469f6c634283cec565b692b29b16cf0fdbea4 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* GStreamer: Add docs for custom pipelinesVaL Doroshchuk2019-08-146-1/+116
| | | | | | | | | 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>
* AVFCameraUtility: fix UB (std::sort with unfit predicate)Marc Mutz2019-08-101-4/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* CameraBinV4LImageProcessing: Show warning only if the camera is loadedVaL Doroshchuk2019-08-091-2/+4
| | | | | | Change-Id: Ie1c77fa373d37979e69c08ab4a959c18efc9599e Fixes: QTBUG-76135 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* GStreamer: Don't seek to the beginning when playing is requestedVaL Doroshchuk2019-08-081-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | 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>
* Fix undefined reference to QVideoSurfacePainter::~QVideoSurfacePainterVaL Doroshchuk2019-08-081-1/+1
| | | | | | | Change-Id: I8b6b0f9b278ebb4b3eff0caaedab62cebfe9a695 Fixes: QTBUG-77097 Reviewed-by: Rolf Eike Beer <eb@emlix.com> Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* GStreamer: Don't share video surfaces between several pipelinesVaL Doroshchuk2019-08-081-1/+23
| | | | | | | | | | | | 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>
* AVFoundation: Re-create CARenderer if current OpenGL context changedAndrew Smolko2019-08-071-0/+7
| | | | | | | | 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>
* GStreamer: Allow audio/x-raw codec in QAudioRecorderVaL Doroshchuk2019-08-071-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* AVFoundation: Fix memory leak when gl context is changedVaL Doroshchuk2019-08-021-0/+2
| | | | | | | 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>
* VideoOutput: Update geometry only when the surface is activeVal Doroshchuk2019-07-181-2/+7
| | | | | | | | | | | | | | 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>
* DirectShow: Set QMediaPlayer::NoMedia if empty url is providedVal Doroshchuk2019-07-172-8/+3
| | | | | | | | | | | | | | | | 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>
* GStreamer: Implement fetching audio/video codecs by containerVaL Doroshchuk2019-07-178-64/+51
| | | | | | | | | | | | | | | 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>
* use correct types when creating an empty Windows eventRolf Eike Beer2019-07-162-3/+3
| | | | | Change-Id: I9f811b4d0aadb04d3552dcd1f26a1565dfc230e2 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* DirectShow plugin: use new style connect syntaxRolf Eike Beer2019-07-164-15/+15
| | | | | Change-Id: I5c2dadfe1154961adcecf779126166aea4d32393 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* DirectShow plugin: use nullptr instead of NULLRolf Eike Beer2019-07-1614-71/+71
| | | | | Change-Id: Ied89175c4b7f5df090deac174b1da1e8496ee533 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* Camera: Update the doc about supported viewfinder settingsVaL Doroshchuk2019-07-161-1/+1
| | | | | Change-Id: I9d74355fb800234d4fbd12235b89965921027223 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* Fix GCC 9 -Wdeprecated-copy warningsMarc Mutz2019-07-111-0/+1
| | | | | Change-Id: Ia50ce0d2c94b3b064e9cd571e598ecd37ee2b5e3 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* Fix GetFrameRateList checks and memory leakNate Weibley2019-07-051-2/+4
| | | | | | | | | | 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>
* GStreamer: Fix 0.10 compile errorVal Doroshchuk2019-07-051-1/+3
| | | | | | Fixes: QTBUG-76816 Change-Id: I2909c2f2df91ac26b5104e24892310aa62cad172 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* Fix crash when app is destroyed before QSample::load is finishedVaL Doroshchuk2019-07-051-4/+8
| | | | | | | | | | | | | | | | | | | | | | | 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>
* Fix MinGW buildJoerg Bornemann2019-07-021-0/+4
| | | | | | | | | | 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>
* DirectShow: Map MEDIASUBTYPE_RGB24 to QVideoFrame::Format_BGR24Val Doroshchuk2019-07-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* Bump versionFrederik Gladhorn2019-07-011-1/+1
| | | | Change-Id: I9d28d4da9a7ab153f5d52385b06143f40b41abe3
* Fix compile issue when no opengl in QVideoSurfacePainterVal Doroshchuk2019-06-171-4/+4
| | | | | | | | error: invalid use of incomplete type 'class QGLContext' Change-Id: I4bc9bd4231e663b187d3cef917b7a551ba614ba9 Fixes: QTBUG-76405 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* Merge "Merge remote-tracking branch 'origin/5.12.4' into 5.12"Qt Forward Merge Bot2019-06-172-1/+58
|\
| * Merge remote-tracking branch 'origin/5.12.4' into 5.12Qt Forward Merge Bot2019-06-172-1/+58
| |\ |/ / | | | | Change-Id: I3be34b34047d8fc0eba2fcde2b59b4abedc00dbd
| * Merge "Add changes file for Qt 5.12.4"v5.12.45.12.4Antti Kokko2019-05-311-0/+57
| |\
| | * Add changes file for Qt 5.12.4Antti Kokko2019-05-311-0/+57
| | | | | | | | | | | | | | | Change-Id: I40a668e65f380a6535081ebce6964b6037498149 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
| * | Merge 5.12 into 5.12.4Frederik Gladhorn2019-05-271-0/+9
| |\ \ | | |/ | |/| | | | Change-Id: Icdc83c310cb09b610b4335166fe120f112d6b2e0
| * | Bump versionFrederik Gladhorn2019-05-231-1/+1
| | | | | | | | | | | | Change-Id: Ic6c46fbb4fcc5b8d1335696e5d2944b7f49ae1af
* | | GStreamer: Return busy cameras in QCameraInfo::availableCamerasVaL Doroshchuk2019-06-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | | Doc: Use correct property name for videoRecorderPaul Wicking2019-06-041-1/+1
| | | | | | | | | | | | | | | | | | Fixes: QTBUG-75623 Change-Id: I9a072d1d3056f58657b8b44e9350ae3506139117 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* | | AVFoundation: Fix sending proper state in QMediaRecorderVaL Doroshchuk2019-05-101-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Need to send the state if it has been applied. Currently it happens when Recording is requested. If Stopped is requested, the state will be changed in handleRecordingFinished callback. Change-Id: I6911f2cebb2d1cc8a08eee17e7b91654b5d6e4c7 Fixes: QTBUG-75287 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* | | DirectShow: Don't hide returned error when video output was not providedVal Doroshchuk2019-04-111-2/+19
| |/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since the video output could be set after doRender(), we do not report an error in this case. But need to report the error when the video output has not been submitted at all. Otherwise it hides the error and not possible to determine playback issues. Added a fix to remember an error while rendering without the video output and handle it if playing is requested. That means, if it is required, the video output must be set before play() is called. Not all medias require valid video output, but if there is an error, we need to report about it. Fixes tst_QMediaPlayerBackend::playlist() Task-number: QTBUG-65574 Change-Id: I9faae19c08ad0273545bb7617ea3a11539084f1f Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* | Gstreamer: Pass GstUDPSrc's caps via "udpsrc.caps=" url's query itemVaL Doroshchuk2019-05-221-0/+9
|/ | | | | | | | | | | | | | | | | | | | | | | | 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>
* GStreamer: Dump dot file if GST_DEBUG_DUMP_DOT_DIR is setVaL Doroshchuk2019-05-201-12/+3
| | | | | | | | | Dump dot file on play only. Change-Id: Ide7fe0cad56f06a89604cf40b59b858c9c9d09f2 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* GStreamer: Fix crash when the bus helper is destroyedVaL Doroshchuk2019-05-211-1/+1
| | | | | | | | | | | | 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>
* Only call CoUnitialize() if calling CoInitialize() was necessaryAndy Shaw2019-05-211-2/+3
| | | | | | | | | | | As CoInitialize() may have been called by something else beforehand then it should only call CoUnitialize() if it returns S_OK which indicates it was not already called. That ensures it is only uninitalized if it did the initialization. Change-Id: I1b723e0b69fe5f9ff7c2c6ef083e9196f21812b2 Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
* DirectShow: Report about an error for wrong urlsVal Doroshchuk2019-05-201-2/+0
| | | | | | | | | | | | | | | | If wrong url is passed, no need to try it again. But report an error instead. Also there cannot be empty url, because if an url is empty, NoMedia should be emitted. Fixes tst_QMediaPlayerBackend::playlistObject() Task-number: QTBUG-65574 Change-Id: I658b16cfe7b96c202715651d6b20d01a9af6c746 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* Gstreamer: Allow streams in custom pipelinesVaL Doroshchuk2019-05-152-41/+72
| | | | | | | | | 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>
* Use QOpenGLContext::makeCurrent if QGLContext::makeCurrent failedVaL Doroshchuk2019-05-141-8/+17
| | | | | | | | | | | | | | | | | | If QPainterVideoSurface::setGLContext(QGLContext::currentContext()) is used and no valid paint device has been provided to QGLContext, it fails to make the context current. Thus there might be no available current context which might also produce crashes. QGLContext::currentContext() creates QGLContext based on current QOpenGLContext instance, and no paint device is available in QGLContext::device() in this case. Currently QVideoWidget and QGraphicsVideoItem are effected. It is relevant when a renderer calls currentContext->doneCurrent() before using the QPainterVideoSurface. After this there is no any current context which could cause a crash, e.g. within compiling the shaders. Task-number: QTBUG-74277 Change-Id: Ia28f4f6843a82a897399fd1ce2463e3b087b6437 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* Gstreamer: Fix deadlock when state is requested in ASYNC modeVaL Doroshchuk2019-05-141-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | 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>
* EVR: Remove setting of start/end times in QVideoFrameVal Doroshchuk2019-05-141-10/+0
| | | | | | | | | | | | | | | | | | | | | Due to unknown bug in IMFTransform->ProcessOutput() when after seeking sample times are not set correctly to provided IMFSample. This causes current playback position to be not respected in video samples. Even if you seeked to higher/lower position, sample time is always counted from beginning. Which makes no sense to use this feature because video frame's sample times are not related to current position. To test it, need just seek to arbitrary position and check how startTime is not correlated to new position. Fixes tst_QMediaPlayerBackend::seekPauseSeek Task-number: QTBUG-65574 Change-Id: I897d75c055347cdcca38a84dc18f91800d070c09 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* DirectShow: Don't update status on pending tasks when graph is loadedVal Doroshchuk2019-05-141-1/+1
| | | | | | | | | | | | | | | The tests expect to see updated playback position together with QMediaPlayer::BufferedMedia. But currently QMediaPlayer::BufferedMedia is emitted before updating the position. Removed updating the status if the graph is already loaded but a task is still pending. Fixes tst_QMediaPlayerBackend::seekInStoppedState Task-number: QTBUG-65574 Change-Id: I66d214312dbf31973a13b5154a52599aa517f38c Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* DirectShow: Don't set the same mediaVal Doroshchuk2019-05-141-0/+3
| | | | | | | | | | | | Fixes tst_QMediaPlayerBackend::playlistObject() Actual (currentMediaSpy.count()): 2 Expected (1) : 1 .\tst_qmediaplayerbackend.cpp(1224) : failure location Task-number: QTBUG-65574 Change-Id: Ia7cbcb4a22ee43df9e1efff065910b084bdbf00e Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* Android: Allow starting camera without viewfinder availableVal Doroshchuk2019-05-131-11/+32
| | | | | | | | | | | | | | Currently it is not able to start camera without viewfinder. For this purpose there is QAndroidCameraDataVideoOutput with SurfaceView in order to be able to start the camera preview. Implemented dummy QAbstractVideoSurface to render to it when no video output is provided before starting the preview. Task-number: QTBUG-73582 Fixes: QTBUG-73237 Change-Id: Ic76d247b5d5352e8539ba61271484e56d3a40fbd Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* Android: Don't open camera if it was already openedVal Doroshchuk2019-05-131-1/+11
| | | | | | | | | | | | | The application should only have one Camera object active at a time for a particular hardware camera. Since there is no way to determine that the camera has been already opened by the same application, added a fix to prevent opening the camera if it was already opened and not released. Task-number: QTBUG-73582 Change-Id: Ide9ddea0c32489d86a613846ecf2e91ef94a776c Reviewed-by: Christian Strømme <christian.stromme@qt.io>