From 7d2040234d04568aa4658f4a39828c9305bc6571 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Mon, 15 Jul 2019 15:22:39 +0200 Subject: Camera: Update the doc about supported viewfinder settings Change-Id: I9d74355fb800234d4fbd12235b89965921027223 Reviewed-by: Andy Shaw --- src/multimedia/camera/qcamera.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp index bd3f30739..a78f56575 100644 --- a/src/multimedia/camera/qcamera.cpp +++ b/src/multimedia/camera/qcamera.cpp @@ -644,7 +644,7 @@ void QCamera::setViewfinderSettings(const QCameraViewfinderSettings &settings) If \a settings is non null, the returned list is reduced to settings matching the given partial \a settings. - The camera must be loaded before calling this function, otherwise the returned list + The status of the camera must be LoadedStatus before calling this function, otherwise the returned list is empty. \sa setViewfinderSettings(), supportedViewfinderResolutions(), supportedViewfinderFrameRateRanges(), -- cgit v1.2.3 From 28bd5f54f5230f5a5002db28f2d3fec7cadc1540 Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Tue, 16 Jul 2019 08:38:30 +0200 Subject: DirectShow plugin: use nullptr instead of NULL Change-Id: Ied89175c4b7f5df090deac174b1da1e8496ee533 Reviewed-by: VaL Doroshchuk --- .../directshow/camera/directshowcameraglobal.h | 2 +- src/plugins/directshow/camera/dscamerasession.cpp | 44 +++++++++++----------- .../directshow/camera/dsvideodevicecontrol.cpp | 12 +++--- .../directshow/common/directshowbasefilter.cpp | 10 ++--- src/plugins/directshow/common/directshowglobal.h | 4 +- .../directshow/common/directshowmediatypeenum.cpp | 2 +- src/plugins/directshow/common/directshowpin.cpp | 42 ++++++++++----------- src/plugins/directshow/common/directshowpin.h | 2 +- .../directshow/common/directshowpinenum.cpp | 2 +- .../directshow/common/directshowsamplegrabber.cpp | 4 +- src/plugins/directshow/common/directshowutils.cpp | 2 +- src/plugins/directshow/dsserviceplugin.cpp | 2 +- .../player/directshowevrvideowindowcontrol.cpp | 4 +- .../directshow/player/videosurfacefilter.cpp | 10 ++--- 14 files changed, 71 insertions(+), 71 deletions(-) diff --git a/src/plugins/directshow/camera/directshowcameraglobal.h b/src/plugins/directshow/camera/directshowcameraglobal.h index 8df387b4a..917ae2dc7 100644 --- a/src/plugins/directshow/camera/directshowcameraglobal.h +++ b/src/plugins/directshow/camera/directshowcameraglobal.h @@ -65,7 +65,7 @@ extern const CLSID CLSID_VideoInputDeviceCategory; extern const CLSID CLSID_SampleGrabber; extern const CLSID CLSID_CaptureGraphBuilder2; -#define SAFE_RELEASE(x) { if(x) x->Release(); x = NULL; } +#define SAFE_RELEASE(x) { if (x) x->Release(); x = nullptr; } typedef struct IFileSinkFilter *LPFILESINKFILTER; typedef struct IAMCopyCaptureFileProgress *LPAMCOPYCAPTUREFILEPROGRESS; diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index a237811ae..f1865411a 100644 --- a/src/plugins/directshow/camera/dscamerasession.cpp +++ b/src/plugins/directshow/camera/dscamerasession.cpp @@ -331,10 +331,10 @@ void DSCameraSession::setImageProcessingParameter( return; } - IAMVideoProcAmp *pVideoProcAmp = NULL; + IAMVideoProcAmp *pVideoProcAmp = nullptr; HRESULT hr = m_graphBuilder->FindInterface( - NULL, - NULL, + nullptr, + nullptr, m_sourceFilter, IID_IAMVideoProcAmp, reinterpret_cast(&pVideoProcAmp) @@ -702,12 +702,12 @@ bool DSCameraSession::createFilterGraph() QString errorString; HRESULT hr; - IMoniker* pMoniker = NULL; - ICreateDevEnum* pDevEnum = NULL; - IEnumMoniker* pEnum = NULL; + IMoniker* pMoniker = nullptr; + ICreateDevEnum* pDevEnum = nullptr; + IEnumMoniker* pEnum = nullptr; // Create the filter graph - hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC, + hr = CoCreateInstance(CLSID_FilterGraph, nullptr, CLSCTX_INPROC, IID_IGraphBuilder, reinterpret_cast(&m_filterGraph)); if (FAILED(hr)) { errorString = tr("Failed to create filter graph"); @@ -715,7 +715,7 @@ bool DSCameraSession::createFilterGraph() } // Create the capture graph builder - hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, + hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, nullptr, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, reinterpret_cast(&m_graphBuilder)); if (FAILED(hr)) { @@ -731,7 +731,7 @@ bool DSCameraSession::createFilterGraph() } // Find the Capture device - hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, + hr = CoCreateInstance(CLSID_SystemDeviceEnum, nullptr, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, reinterpret_cast(&pDevEnum)); if (SUCCEEDED(hr)) { @@ -743,10 +743,10 @@ bool DSCameraSession::createFilterGraph() IMalloc *mallocInterface = 0; CoGetMalloc(1, (LPMALLOC*)&mallocInterface); //go through and find all video capture devices - while (pEnum->Next(1, &pMoniker, NULL) == S_OK) { + while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) { BSTR strName = 0; - hr = pMoniker->GetDisplayName(NULL, NULL, &strName); + hr = pMoniker->GetDisplayName(nullptr, nullptr, &strName); if (SUCCEEDED(hr)) { QString output = QString::fromWCharArray(strName); mallocInterface->Free(strName); @@ -762,13 +762,13 @@ bool DSCameraSession::createFilterGraph() pMoniker->Release(); } mallocInterface->Release(); - if (NULL == m_sourceFilter) + if (nullptr == m_sourceFilter) { if (m_sourceDeviceName.contains(QLatin1String("default"))) { pEnum->Reset(); // still have to loop to discard bind to storage failure case - while (pEnum->Next(1, &pMoniker, NULL) == S_OK) { + while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) { IPropertyBag *pPropBag = 0; hr = pMoniker->BindToStorage(nullptr, nullptr, IID_IPropertyBag, @@ -813,7 +813,7 @@ bool DSCameraSession::createFilterGraph() // Null renderer. Input connected to the sample grabber's output. Simply // discard the samples it receives. - hr = CoCreateInstance(cLSID_NullRenderer, NULL, CLSCTX_INPROC, + hr = CoCreateInstance(cLSID_NullRenderer, nullptr, CLSCTX_INPROC, IID_IBaseFilter, (void**)&m_nullRendererFilter); if (FAILED(hr)) { errorString = tr("Failed to create null renderer"); @@ -931,10 +931,10 @@ void DSCameraSession::updateImageProcessingParametersInfos() return; } - IAMVideoProcAmp *pVideoProcAmp = NULL; + IAMVideoProcAmp *pVideoProcAmp = nullptr; const HRESULT hr = m_graphBuilder->FindInterface( - NULL, - NULL, + nullptr, + nullptr, m_sourceFilter, IID_IAMVideoProcAmp, reinterpret_cast(&pVideoProcAmp) @@ -1041,10 +1041,10 @@ void DSCameraSession::disconnectGraph() { // To avoid increasing the memory usage every time the graph is re-connected it's // important that all filters are released; also the ones added by the "Intelligent Connect". - IEnumFilters *enumFilters = NULL; + IEnumFilters *enumFilters = nullptr; if (SUCCEEDED(m_filterGraph->EnumFilters(&enumFilters))) { - IBaseFilter *filter = NULL; - while (enumFilters->Next(1, &filter, NULL) == S_OK) { + IBaseFilter *filter = nullptr; + while (enumFilters->Next(1, &filter, nullptr) == S_OK) { m_filterGraph->RemoveFilter(filter); enumFilters->Reset(); filter->Release(); @@ -1061,8 +1061,8 @@ static bool qt_frameRateRangeGreaterThan(const QCamera::FrameRateRange &r1, cons void DSCameraSession::updateSourceCapabilities() { HRESULT hr; - AM_MEDIA_TYPE *pmt = NULL; - VIDEOINFOHEADER *pvi = NULL; + AM_MEDIA_TYPE *pmt = nullptr; + VIDEOINFOHEADER *pvi = nullptr; VIDEO_STREAM_CONFIG_CAPS scc; IAMStreamConfig* pConfig = 0; diff --git a/src/plugins/directshow/camera/dsvideodevicecontrol.cpp b/src/plugins/directshow/camera/dsvideodevicecontrol.cpp index 2c1fab764..7285d0fb3 100644 --- a/src/plugins/directshow/camera/dsvideodevicecontrol.cpp +++ b/src/plugins/directshow/camera/dsvideodevicecontrol.cpp @@ -129,10 +129,10 @@ void DSVideoDeviceControl::updateDevices() deviceList->clear(); - ICreateDevEnum* pDevEnum = NULL; - IEnumMoniker* pEnum = NULL; + ICreateDevEnum* pDevEnum = nullptr; + IEnumMoniker* pEnum = nullptr; // Create the System device enumerator - HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, + HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, nullptr, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, reinterpret_cast(&pDevEnum)); if (SUCCEEDED(hr)) { @@ -142,12 +142,12 @@ void DSVideoDeviceControl::updateDevices() if (S_OK == hr) { pEnum->Reset(); // go through and find all video capture devices - IMoniker* pMoniker = NULL; + IMoniker* pMoniker = nullptr; IMalloc *mallocInterface = 0; CoGetMalloc(1, (LPMALLOC*)&mallocInterface); - while (pEnum->Next(1, &pMoniker, NULL) == S_OK) { + while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) { BSTR strName = 0; - hr = pMoniker->GetDisplayName(NULL, NULL, &strName); + hr = pMoniker->GetDisplayName(nullptr, nullptr, &strName); if (SUCCEEDED(hr)) { QString output(QString::fromWCharArray(strName)); mallocInterface->Free(strName); diff --git a/src/plugins/directshow/common/directshowbasefilter.cpp b/src/plugins/directshow/common/directshowbasefilter.cpp index 2792dc3c6..d64021ed6 100644 --- a/src/plugins/directshow/common/directshowbasefilter.cpp +++ b/src/plugins/directshow/common/directshowbasefilter.cpp @@ -46,9 +46,9 @@ QT_BEGIN_NAMESPACE DirectShowBaseFilter::DirectShowBaseFilter() : m_mutex(QMutex::Recursive) , m_state(State_Stopped) - , m_graph(NULL) - , m_clock(NULL) - , m_sink(NULL) + , m_graph(nullptr) + , m_clock(nullptr) + , m_sink(nullptr) { } @@ -57,7 +57,7 @@ DirectShowBaseFilter::~DirectShowBaseFilter() { if (m_clock) { m_clock->Release(); - m_clock = NULL; + m_clock = nullptr; } } @@ -217,7 +217,7 @@ HRESULT DirectShowBaseFilter::JoinFilterGraph(IFilterGraph *pGraph, LPCWSTR pNam m_filterName = QString::fromWCharArray(pName); m_graph = pGraph; - m_sink = NULL; + m_sink = nullptr; if (m_graph) { if (SUCCEEDED(m_graph->QueryInterface(IID_PPV_ARGS(&m_sink)))) diff --git a/src/plugins/directshow/common/directshowglobal.h b/src/plugins/directshow/common/directshowglobal.h index 5f391710e..d98dd36ee 100644 --- a/src/plugins/directshow/common/directshowglobal.h +++ b/src/plugins/directshow/common/directshowglobal.h @@ -64,7 +64,7 @@ template T *com_new(const IID &clsid) T *object = 0; return CoCreateInstance( clsid, - NULL, + nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&object)) == S_OK ? object @@ -76,7 +76,7 @@ template T *com_new(const IID &clsid, const IID &iid) T *object = 0; return CoCreateInstance( clsid, - NULL, + nullptr, CLSCTX_INPROC_SERVER, iid, reinterpret_cast(&object)) == S_OK diff --git a/src/plugins/directshow/common/directshowmediatypeenum.cpp b/src/plugins/directshow/common/directshowmediatypeenum.cpp index 10623a246..56716ed75 100644 --- a/src/plugins/directshow/common/directshowmediatypeenum.cpp +++ b/src/plugins/directshow/common/directshowmediatypeenum.cpp @@ -50,7 +50,7 @@ DirectShowMediaTypeEnum::DirectShowMediaTypeEnum(DirectShowPin *pin) } DirectShowMediaTypeEnum::DirectShowMediaTypeEnum(const QList &types) - : m_pin(NULL) + : m_pin(nullptr) , m_mediaTypes(types) , m_index(0) { diff --git a/src/plugins/directshow/common/directshowpin.cpp b/src/plugins/directshow/common/directshowpin.cpp index 508a9b21d..617cc2cf2 100644 --- a/src/plugins/directshow/common/directshowpin.cpp +++ b/src/plugins/directshow/common/directshowpin.cpp @@ -52,7 +52,7 @@ DirectShowPin::DirectShowPin(DirectShowBaseFilter *filter, const QString &name, , m_filter(filter) , m_name(name) , m_direction(direction) - , m_peerPin(NULL) + , m_peerPin(nullptr) { } @@ -76,11 +76,11 @@ HRESULT DirectShowPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) if (pd == m_direction) return VFW_E_INVALID_DIRECTION; - if (pmt != NULL && DirectShowMediaType::isPartiallySpecified(pmt)) { + if (pmt != nullptr && DirectShowMediaType::isPartiallySpecified(pmt)) { // If the type is fully specified, use it hr = tryConnect(pReceivePin, pmt); } else { - IEnumMediaTypes *enumMediaTypes = NULL; + IEnumMediaTypes *enumMediaTypes = nullptr; // First, try the receiving pin's preferred types if (SUCCEEDED(pReceivePin->EnumMediaTypes(&enumMediaTypes))) { @@ -108,13 +108,13 @@ HRESULT DirectShowPin::tryMediaTypes(IPin *pin, const AM_MEDIA_TYPE *partialType if (FAILED(hr)) return hr; - AM_MEDIA_TYPE *mediaType = NULL; + AM_MEDIA_TYPE *mediaType = nullptr; ULONG mediaCount = 0; HRESULT hrFailure = VFW_E_NO_ACCEPTABLE_TYPES; for (; enumMediaTypes->Next(1, &mediaType, &mediaCount) == S_OK;) { - if (mediaType && (partialType == NULL || DirectShowMediaType::isCompatible(mediaType, partialType))) { + if (mediaType && (partialType == nullptr || DirectShowMediaType::isCompatible(mediaType, partialType))) { hr = tryConnect(pin, mediaType); if (FAILED(hr) && (hr != E_FAIL) @@ -157,8 +157,8 @@ HRESULT DirectShowPin::tryConnect(IPin *pin, const AM_MEDIA_TYPE *type) if (FAILED(hr)) { connectionEnded(); m_peerPin->Release(); - m_peerPin = NULL; - setMediaType(NULL); + m_peerPin = nullptr; + setMediaType(nullptr); return hr; } @@ -197,8 +197,8 @@ HRESULT DirectShowPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE * if (FAILED(hr)) { connectionEnded(); m_peerPin->Release(); - m_peerPin = NULL; - setMediaType(NULL); + m_peerPin = nullptr; + setMediaType(nullptr); return hr; } @@ -218,9 +218,9 @@ HRESULT DirectShowPin::Disconnect() return hr; m_peerPin->Release(); - m_peerPin = NULL; + m_peerPin = nullptr; - setMediaType(NULL); + setMediaType(nullptr); return S_OK; } @@ -380,8 +380,8 @@ HRESULT DirectShowPin::setActive(bool active) DirectShowOutputPin::DirectShowOutputPin(DirectShowBaseFilter *filter, const QString &name) : DirectShowPin(filter, name, PINDIR_OUTPUT) - , m_allocator(NULL) - , m_inputPin(NULL) + , m_allocator(nullptr) + , m_inputPin(nullptr) { } @@ -393,8 +393,8 @@ HRESULT DirectShowOutputPin::completeConnection(IPin *pin) if (!pin) return E_POINTER; - Q_ASSERT(m_inputPin == NULL); - Q_ASSERT(m_allocator == NULL); + Q_ASSERT(m_inputPin == nullptr); + Q_ASSERT(m_allocator == nullptr); HRESULT hr = pin->QueryInterface(IID_PPV_ARGS(&m_inputPin)); if (FAILED(hr)) @@ -423,7 +423,7 @@ HRESULT DirectShowOutputPin::completeConnection(IPin *pin) } m_allocator->Release(); - m_allocator = NULL; + m_allocator = nullptr; } // Otherwise, allocate its own allocator @@ -441,7 +441,7 @@ HRESULT DirectShowOutputPin::completeConnection(IPin *pin) } m_allocator->Release(); - m_allocator = NULL; + m_allocator = nullptr; } return hr; @@ -455,12 +455,12 @@ HRESULT DirectShowOutputPin::connectionEnded() return hr; m_allocator->Release(); - m_allocator = NULL; + m_allocator = nullptr; } if (m_inputPin) { m_inputPin->Release(); - m_inputPin = NULL; + m_inputPin = nullptr; } return S_OK; @@ -485,7 +485,7 @@ HRESULT DirectShowOutputPin::EndOfStream() DirectShowInputPin::DirectShowInputPin(DirectShowBaseFilter *filter, const QString &name) : DirectShowPin(filter, name, PINDIR_INPUT) - , m_allocator(NULL) + , m_allocator(nullptr) , m_flushing(false) , m_inErrorState(false) { @@ -502,7 +502,7 @@ HRESULT DirectShowInputPin::connectionEnded() return hr; m_allocator->Release(); - m_allocator = NULL; + m_allocator = nullptr; } return S_OK; diff --git a/src/plugins/directshow/common/directshowpin.h b/src/plugins/directshow/common/directshowpin.h index 5e513d002..6370fd367 100644 --- a/src/plugins/directshow/common/directshowpin.h +++ b/src/plugins/directshow/common/directshowpin.h @@ -56,7 +56,7 @@ public: virtual ~DirectShowPin(); QString name() const { return m_name; } - bool isConnected() const { return m_peerPin != NULL; } + bool isConnected() const { return m_peerPin != nullptr; } virtual bool isMediaTypeSupported(const AM_MEDIA_TYPE *type) = 0; virtual QList supportedMediaTypes(); diff --git a/src/plugins/directshow/common/directshowpinenum.cpp b/src/plugins/directshow/common/directshowpinenum.cpp index 20fa93d6e..a340c0903 100644 --- a/src/plugins/directshow/common/directshowpinenum.cpp +++ b/src/plugins/directshow/common/directshowpinenum.cpp @@ -55,7 +55,7 @@ DirectShowPinEnum::DirectShowPinEnum(DirectShowBaseFilter *filter) } DirectShowPinEnum::DirectShowPinEnum(const QList &pins) - : m_filter(NULL) + : m_filter(nullptr) , m_pins(pins) , m_index(0) { diff --git a/src/plugins/directshow/common/directshowsamplegrabber.cpp b/src/plugins/directshow/common/directshowsamplegrabber.cpp index fec59b538..254066d4e 100644 --- a/src/plugins/directshow/common/directshowsamplegrabber.cpp +++ b/src/plugins/directshow/common/directshowsamplegrabber.cpp @@ -75,7 +75,7 @@ public: STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) override { - if (NULL == ppvObject) + if (nullptr == ppvObject) return E_POINTER; if (riid == IID_IUnknown /*__uuidof(IUnknown) */ ) { @@ -120,7 +120,7 @@ DirectShowSampleGrabber::DirectShowSampleGrabber(QObject *p) , m_callbackType(CallbackMethod::BufferCB) { // Create sample grabber filter - HRESULT hr = CoCreateInstance(cLSID_SampleGrabber, NULL, CLSCTX_INPROC, iID_ISampleGrabber, reinterpret_cast(&m_sampleGrabber)); + HRESULT hr = CoCreateInstance(cLSID_SampleGrabber, nullptr, CLSCTX_INPROC, iID_ISampleGrabber, reinterpret_cast(&m_sampleGrabber)); if (FAILED(hr)) { qCWarning(qtDirectShowPlugin, "Failed to create sample grabber"); diff --git a/src/plugins/directshow/common/directshowutils.cpp b/src/plugins/directshow/common/directshowutils.cpp index 8f3f321e7..1626bacd7 100644 --- a/src/plugins/directshow/common/directshowutils.cpp +++ b/src/plugins/directshow/common/directshowutils.cpp @@ -115,7 +115,7 @@ bool DirectShowUtils::getPin(IBaseFilter *filter, PIN_DIRECTION pinDirection, IP enumPins->Reset(); IPin *nextPin = nullptr; - while (enumPins->Next(1, &nextPin, NULL) == S_OK) { + while (enumPins->Next(1, &nextPin, nullptr) == S_OK) { const ScopedSafeRelease releasePin { &nextPin }; PIN_DIRECTION currentPinDir; *hrOut = nextPin->QueryDirection(¤tPinDir); diff --git a/src/plugins/directshow/dsserviceplugin.cpp b/src/plugins/directshow/dsserviceplugin.cpp index 64b30f561..b3f6f7a3f 100644 --- a/src/plugins/directshow/dsserviceplugin.cpp +++ b/src/plugins/directshow/dsserviceplugin.cpp @@ -80,7 +80,7 @@ static int g_refCount = 0; void addRefCount() { if (++g_refCount == 1) - CoInitialize(NULL); + CoInitialize(nullptr); } void releaseRefCount() diff --git a/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp b/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp index fc1058d57..57d88326c 100644 --- a/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp +++ b/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp @@ -43,7 +43,7 @@ DirectShowEvrVideoWindowControl::DirectShowEvrVideoWindowControl(QObject *parent) : EvrVideoWindowControl(parent) - , m_evrFilter(NULL) + , m_evrFilter(nullptr) { } @@ -59,7 +59,7 @@ IBaseFilter *DirectShowEvrVideoWindowControl::filter() m_evrFilter = com_new(clsid_EnhancedVideoRenderer); if (!setEvr(m_evrFilter)) { m_evrFilter->Release(); - m_evrFilter = NULL; + m_evrFilter = nullptr; } } diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp index 826d26bdb..62994636c 100644 --- a/src/plugins/directshow/player/videosurfacefilter.cpp +++ b/src/plugins/directshow/player/videosurfacefilter.cpp @@ -222,16 +222,16 @@ HRESULT VideoSurfaceInputPin::Receive(IMediaSample *pMediaSample) VideoSurfaceFilter::VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectShowEventLoop *loop, QObject *parent) : QObject(parent) , m_loop(loop) - , m_pin(NULL) + , m_pin(nullptr) , m_surface(surface) , m_bytesPerLine(0) , m_surfaceStarted(false) , m_renderMutex(QMutex::Recursive) , m_running(false) - , m_pendingSample(NULL) + , m_pendingSample(nullptr) , m_pendingSampleEndTime(0) - , m_renderEvent(CreateEvent(NULL, FALSE, FALSE, NULL)) - , m_flushEvent(CreateEvent(NULL, TRUE, FALSE, NULL)) + , m_renderEvent(CreateEvent(nullptr, FALSE, FALSE, nullptr)) + , m_flushEvent(CreateEvent(nullptr, TRUE, FALSE, nullptr)) , m_adviseCookie(0) , m_EOS(false) , m_EOSDelivered(false) @@ -615,7 +615,7 @@ void VideoSurfaceFilter::clearPendingSample() if (m_pendingSample) { qCDebug(qLcRenderFilter, "clearPendingSample"); m_pendingSample->Release(); - m_pendingSample = NULL; + m_pendingSample = nullptr; } } -- cgit v1.2.3 From 539b782385786d4f076c442c9da53a228a1be462 Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Tue, 16 Jul 2019 09:18:34 +0200 Subject: DirectShow plugin: use new style connect syntax Change-Id: I5c2dadfe1154961adcecf779126166aea4d32393 Reviewed-by: VaL Doroshchuk --- src/plugins/directshow/camera/dscamerasession.cpp | 4 ++-- .../directshow/camera/dsimagecapturecontrol.cpp | 20 ++++++++++---------- src/plugins/directshow/player/directshowioreader.cpp | 2 +- .../directshow/player/directshowplayerservice.cpp | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index f1865411a..267e7a9a4 100644 --- a/src/plugins/directshow/camera/dscamerasession.cpp +++ b/src/plugins/directshow/camera/dscamerasession.cpp @@ -76,8 +76,8 @@ DSCameraSession::DSCameraSession(QObject *parent) , m_videoProbeControl(nullptr) , m_status(QCamera::UnloadedStatus) { - connect(this, SIGNAL(statusChanged(QCamera::Status)), - this, SLOT(updateReadyForCapture())); + connect(this, &DSCameraSession::statusChanged, + this, &DSCameraSession::updateReadyForCapture); m_deviceLostEventTimer.setSingleShot(true); connect(&m_deviceLostEventTimer, &QTimer::timeout, [&]() { diff --git a/src/plugins/directshow/camera/dsimagecapturecontrol.cpp b/src/plugins/directshow/camera/dsimagecapturecontrol.cpp index 2a6a794d5..e4d2eee30 100644 --- a/src/plugins/directshow/camera/dsimagecapturecontrol.cpp +++ b/src/plugins/directshow/camera/dsimagecapturecontrol.cpp @@ -47,16 +47,16 @@ DSImageCaptureControl::DSImageCaptureControl(DSCameraSession *session) : QCameraImageCaptureControl(session) , m_session(session) { - connect(m_session, SIGNAL(imageExposed(int)), - this, SIGNAL(imageExposed(int))); - connect(m_session, SIGNAL(imageCaptured(int,QImage)), - this, SIGNAL(imageCaptured(int,QImage))); - connect(m_session, SIGNAL(imageSaved(int,QString)), - this, SIGNAL(imageSaved(int,QString))); - connect(m_session, SIGNAL(readyForCaptureChanged(bool)), - this, SIGNAL(readyForCaptureChanged(bool))); - connect(m_session, SIGNAL(captureError(int,int,QString)), - this, SIGNAL(error(int,int,QString))); + connect(m_session, &DSCameraSession::imageExposed, + this, &DSImageCaptureControl::imageExposed); + connect(m_session, &DSCameraSession::imageCaptured, + this, &DSImageCaptureControl::imageCaptured); + connect(m_session, &DSCameraSession::imageSaved, + this, &DSImageCaptureControl::imageSaved); + connect(m_session, &DSCameraSession::readyForCaptureChanged, + this, &DSImageCaptureControl::readyForCaptureChanged); + connect(m_session, &DSCameraSession::captureError, + this, &DSImageCaptureControl::error); connect(m_session, &DSCameraSession::imageAvailable, this, &DSImageCaptureControl::imageAvailable); } diff --git a/src/plugins/directshow/player/directshowioreader.cpp b/src/plugins/directshow/player/directshowioreader.cpp index 3482cee02..c10d9a239 100644 --- a/src/plugins/directshow/player/directshowioreader.cpp +++ b/src/plugins/directshow/player/directshowioreader.cpp @@ -96,7 +96,7 @@ DirectShowIOReader::DirectShowIOReader( { moveToThread(device->thread()); - connect(device, SIGNAL(readyRead()), this, SLOT(readyRead())); + connect(device, &QIODevice::readyRead, this, &DirectShowIOReader::readyRead); } DirectShowIOReader::~DirectShowIOReader() diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp index 78b4be35b..154aae22a 100644 --- a/src/plugins/directshow/player/directshowplayerservice.cpp +++ b/src/plugins/directshow/player/directshowplayerservice.cpp @@ -209,8 +209,8 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name) if (!m_videoRendererControl && !m_videoWindowControl) { m_videoRendererControl = new DirectShowVideoRendererControl(m_loop); - connect(m_videoRendererControl, SIGNAL(filterChanged()), - this, SLOT(videoOutputChanged())); + connect(m_videoRendererControl, &DirectShowVideoRendererControl::filterChanged, + this, &DirectShowPlayerService::videoOutputChanged); return m_videoRendererControl; } -- cgit v1.2.3 From ff7dcf3a38f33bb262c876ce1e959e7a1bc29f5a Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Tue, 16 Jul 2019 08:56:47 +0200 Subject: use correct types when creating an empty Windows event Change-Id: I9f811b4d0aadb04d3552dcd1f26a1565dfc230e2 Reviewed-by: VaL Doroshchuk --- src/plugins/directshow/common/directshoweventloop.cpp | 4 ++-- src/plugins/directshow/player/directshowplayerservice.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/directshow/common/directshoweventloop.cpp b/src/plugins/directshow/common/directshoweventloop.cpp index fbc7b8cee..843a78422 100644 --- a/src/plugins/directshow/common/directshoweventloop.cpp +++ b/src/plugins/directshow/common/directshoweventloop.cpp @@ -69,8 +69,8 @@ DirectShowEventLoop::DirectShowEventLoop(QObject *parent) : QObject(parent) , m_postsHead(0) , m_postsTail(0) - , m_eventHandle(::CreateEvent(0, 0, 0, 0)) - , m_waitHandle(::CreateEvent(0, 0, 0, 0)) + , m_eventHandle(::CreateEvent(nullptr, FALSE, FALSE, nullptr)) + , m_waitHandle(::CreateEvent(nullptr, FALSE, FALSE, nullptr)) { } diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp index 154aae22a..3c81881fa 100644 --- a/src/plugins/directshow/player/directshowplayerservice.cpp +++ b/src/plugins/directshow/player/directshowplayerservice.cpp @@ -137,7 +137,7 @@ DirectShowPlayerService::DirectShowPlayerService(QObject *parent) , m_pendingTasks(0) , m_executingTask(0) , m_executedTasks(0) - , m_taskHandle(::CreateEvent(0, 0, 0, 0)) + , m_taskHandle(::CreateEvent(nullptr, FALSE, FALSE, nullptr)) , m_eventHandle(0) , m_graphStatus(NoMedia) , m_stream(0) -- cgit v1.2.3 From 411bd814849dace75ec755c46f668604eb6f4821 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Thu, 11 Jul 2019 17:54:10 +0200 Subject: GStreamer: Implement fetching audio/video codecs by container 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 --- src/gsttools/qgstcodecsinfo.cpp | 44 ++++++++++++++++++++++ src/multimedia/gsttools_headers/qgstcodecsinfo_p.h | 4 ++ .../mediacapture/qgstreameraudioencode.cpp | 12 +----- .../gstreamer/mediacapture/qgstreameraudioencode.h | 2 - .../qgstreamermediacontainercontrol.cpp | 38 +------------------ .../mediacapture/qgstreamermediacontainercontrol.h | 3 -- .../mediacapture/qgstreamervideoencode.cpp | 11 +----- .../gstreamer/mediacapture/qgstreamervideoencode.h | 1 - 8 files changed, 51 insertions(+), 64 deletions(-) diff --git a/src/gsttools/qgstcodecsinfo.cpp b/src/gsttools/qgstcodecsinfo.cpp index ca43d489b..512bb828d 100644 --- a/src/gsttools/qgstcodecsinfo.cpp +++ b/src/gsttools/qgstcodecsinfo.cpp @@ -43,9 +43,36 @@ #include +static QSet streamTypes(GstElementFactory *factory, GstPadDirection direction) +{ + QSet types; + const GList *pads = gst_element_factory_get_static_pad_templates(factory); + for (const GList *pad = pads; pad; pad = g_list_next(pad)) { + GstStaticPadTemplate *templ = reinterpret_cast(pad->data); + if (templ->direction == direction) { + GstCaps *caps = gst_static_caps_get(&templ->static_caps); + for (uint i = 0; i < gst_caps_get_size(caps); ++i) { + GstStructure *structure = gst_caps_get_structure(caps, i); + types.insert(QString::fromUtf8(gst_structure_get_name(structure))); + } + gst_caps_unref(caps); + } + } + + return types; +} + QGstCodecsInfo::QGstCodecsInfo(QGstCodecsInfo::ElementType elementType) { updateCodecs(elementType); + for (auto &codec : supportedCodecs()) { + GstElementFactory *factory = gst_element_factory_find(codecElement(codec).constData()); + if (factory) { + GstPadDirection direction = elementType == Muxer ? GST_PAD_SINK : GST_PAD_SRC; + m_streamTypes.insert(codec, streamTypes(factory, direction)); + gst_object_unref(GST_OBJECT(factory)); + } + } } QStringList QGstCodecsInfo::supportedCodecs() const @@ -245,3 +272,20 @@ GList *QGstCodecsInfo::elementFactories(ElementType elementType) const return result; #endif } + +QSet QGstCodecsInfo::supportedStreamTypes(const QString &codec) const +{ + return m_streamTypes.value(codec); +} + +QStringList QGstCodecsInfo::supportedCodecs(const QSet &types) const +{ + QStringList result; + for (auto &candidate : supportedCodecs()) { + auto candidateTypes = supportedStreamTypes(candidate); + if (candidateTypes.intersects(types)) + result << candidate; + } + + return result; +} diff --git a/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h b/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h index 33ab3de4b..d7aadef21 100644 --- a/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h +++ b/src/multimedia/gsttools_headers/qgstcodecsinfo_p.h @@ -54,6 +54,7 @@ #include #include #include +#include #include @@ -76,6 +77,8 @@ public: QString codecDescription(const QString &codec) const; QByteArray codecElement(const QString &codec) const; QStringList codecOptions(const QString &codec) const; + QSet supportedStreamTypes(const QString &codec) const; + QStringList supportedCodecs(const QSet &types) const; private: void updateCodecs(ElementType elementType); @@ -83,6 +86,7 @@ private: QStringList m_codecs; QMap m_codecInfo; + QMap> m_streamTypes; }; Q_DECLARE_TYPEINFO(QGstCodecsInfo::CodecInfo, Q_MOVABLE_TYPE); diff --git a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp index 40294214a..6a0816343 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp @@ -50,16 +50,6 @@ QGstreamerAudioEncode::QGstreamerAudioEncode(QObject *parent) :QAudioEncoderSettingsControl(parent) , m_codecs(QGstCodecsInfo::AudioEncoder) { - for (const QString& codecName : m_codecs.supportedCodecs()) { - GstElementFactory *factory = gst_element_factory_find(m_codecs.codecElement(codecName).constData()); - - if (factory) { - m_streamTypes.insert(codecName, - QGstreamerMediaContainerControl::supportedStreamTypes(factory, GST_PAD_SRC)); - - gst_object_unref(GST_OBJECT(factory)); - } - } } QGstreamerAudioEncode::~QGstreamerAudioEncode() @@ -247,5 +237,5 @@ GstElement *QGstreamerAudioEncode::createEncoder() QSet QGstreamerAudioEncode::supportedStreamTypes(const QString &codecName) const { - return m_streamTypes.value(codecName); + return m_codecs.supportedStreamTypes(codecName); } diff --git a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h index 04de602ad..0cfbb4e91 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h +++ b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h @@ -86,8 +86,6 @@ private: QMap > m_options; - QMap > m_streamTypes; - QAudioEncoderSettings m_audioSettings; }; diff --git a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp index 05f1c8af5..33351476d 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp @@ -47,47 +47,11 @@ QGstreamerMediaContainerControl::QGstreamerMediaContainerControl(QObject *parent :QMediaContainerControl(parent) , m_containers(QGstCodecsInfo::Muxer) { - QSet allTypes; - - for (const QString& formatName : supportedContainers()) { - GstElementFactory *factory = gst_element_factory_find(m_containers.codecElement(formatName).constData()); - if (factory) { - if (formatName == QByteArray("raw")) { - m_streamTypes.insert(formatName, allTypes); - } else { - QSet types = supportedStreamTypes(factory, GST_PAD_SINK); - m_streamTypes.insert(formatName, types); - allTypes.unite(types); - } - - gst_object_unref(GST_OBJECT(factory)); - } - } } -QSet QGstreamerMediaContainerControl::supportedStreamTypes(GstElementFactory *factory, GstPadDirection direction) -{ - QSet types; - const GList *pads = gst_element_factory_get_static_pad_templates(factory); - for (const GList *pad = pads; pad; pad = g_list_next(pad)) { - GstStaticPadTemplate *templ = (GstStaticPadTemplate*)pad->data; - if (templ->direction == direction) { - GstCaps *caps = gst_static_caps_get(&templ->static_caps); - for (uint i=0; i QGstreamerMediaContainerControl::supportedStreamTypes(const QString &container) const { - return m_streamTypes.value(container); + return m_containers.supportedStreamTypes(container); } QString QGstreamerMediaContainerControl::containerExtension() const diff --git a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h index 5c730b21d..02c7346b1 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h @@ -68,14 +68,11 @@ public: QSet supportedStreamTypes(const QString &container) const; - static QSet supportedStreamTypes(GstElementFactory *factory, GstPadDirection direction); - QString containerExtension() const; private: QString m_format; QGstCodecsInfo m_containers; - QMap > m_streamTypes; }; QT_END_NAMESPACE diff --git a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp index 6b4dbe4b7..62d9bbd8c 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp @@ -49,15 +49,6 @@ QGstreamerVideoEncode::QGstreamerVideoEncode(QGstreamerCaptureSession *session) :QVideoEncoderSettingsControl(session), m_session(session) , m_codecs(QGstCodecsInfo::VideoEncoder) { - for (const QString& codecName : supportedVideoCodecs()) { - GstElementFactory *factory = gst_element_factory_find(m_codecs.codecElement(codecName).constData()); - if (factory) { - m_streamTypes.insert(codecName, - QGstreamerMediaContainerControl::supportedStreamTypes(factory, GST_PAD_SRC)); - - gst_object_unref(GST_OBJECT(factory)); - } - } } QGstreamerVideoEncode::~QGstreamerVideoEncode() @@ -303,5 +294,5 @@ QPair QGstreamerVideoEncode::rateAsRational() const QSet QGstreamerVideoEncode::supportedStreamTypes(const QString &codecName) const { - return m_streamTypes.value(codecName); + return m_codecs.supportedStreamTypes(codecName); } diff --git a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h index bc6636012..a35e2b456 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h @@ -90,7 +90,6 @@ private: QVideoEncoderSettings m_videoSettings; QMap > m_options; - QMap > m_streamTypes; }; QT_END_NAMESPACE -- cgit v1.2.3 From 073d3ea91c4c3f3fe7227e7335d35fc53dc630b3 Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Fri, 12 Apr 2019 08:58:11 +0200 Subject: DirectShow: Set QMediaPlayer::NoMedia if empty url is provided 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 --- src/plugins/directshow/player/directshowplayerservice.cpp | 10 +++------- src/plugins/directshow/player/directshowplayerservice.h | 1 - 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp index 3c81881fa..0d44da722 100644 --- a/src/plugins/directshow/player/directshowplayerservice.cpp +++ b/src/plugins/directshow/player/directshowplayerservice.cpp @@ -297,7 +297,8 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream if (m_graph) releaseGraph(); - m_resources = media.resources(); + m_url = media.canonicalUrl(); + m_stream = stream; m_error = QMediaPlayer::NoError; m_errorString = QString(); @@ -312,11 +313,9 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream m_dontCacheNextSeekResult = false; m_metaDataControl->reset(); - if (m_resources.isEmpty() && !stream) { + if (m_url.isEmpty() && !stream) { m_pendingTasks = 0; m_graphStatus = NoMedia; - - m_url.clear(); } else if (stream && (!stream->isReadable() || stream->isSequential())) { m_pendingTasks = 0; m_graphStatus = InvalidMedia; @@ -348,9 +347,6 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker) { IBaseFilter *source = 0; - QMediaResource resource = m_resources.takeFirst(); - m_url = resource.url(); - HRESULT hr = E_FAIL; if (m_url.scheme() == QLatin1String("http") || m_url.scheme() == QLatin1String("https")) { static const GUID clsid_WMAsfReader = { diff --git a/src/plugins/directshow/player/directshowplayerservice.h b/src/plugins/directshow/player/directshowplayerservice.h index 4a9e25678..d48b0575a 100644 --- a/src/plugins/directshow/player/directshowplayerservice.h +++ b/src/plugins/directshow/player/directshowplayerservice.h @@ -224,7 +224,6 @@ private: qint64 m_duration; QMediaTimeRange m_playbackRange; QUrl m_url; - QMediaResourceList m_resources; QString m_errorString; QMutex m_mutex; bool m_buffering; -- cgit v1.2.3 From d9dd7f4896cbc0fe1dc37e517c28315419e6ffcd Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Thu, 11 Jul 2019 14:35:47 +0200 Subject: VideoOutput: Update geometry only when the surface is active MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/qtmultimediaquicktools/qdeclarativevideooutput.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp index 3c6a6f9c5..5430063fe 100644 --- a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp +++ b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp @@ -411,8 +411,13 @@ void QDeclarativeVideoOutput::_q_updateGeometry() m_contentRect.moveCenter(rect.center()); } - if (m_backend) - m_backend->updateGeometry(); + if (m_backend) { + if (!m_backend->videoSurface() || m_backend->videoSurface()->isActive()) + m_backend->updateGeometry(); + else + m_geometryDirty = true; + } + if (m_contentRect != oldContentRect) emit contentRectChanged(); -- cgit v1.2.3