mirror of
https://github.com/opencv/opencv.git
synced 2025-06-17 23:51:16 +08:00
videoio(msmf): cleanup unused methods from ComPtr wrapper
Use Win32 TRUE/FALSE in SetUINT32() calls for bool parameters
This commit is contained in:
parent
8f24db048c
commit
2bb5d1bca3
@ -122,89 +122,36 @@ public:
|
|||||||
|
|
||||||
T** operator&()
|
T** operator&()
|
||||||
{
|
{
|
||||||
assert(p == NULL);
|
CV_Assert(p == NULL);
|
||||||
return p.operator&();
|
return p.operator&();
|
||||||
}
|
}
|
||||||
T* operator->() const
|
T* operator->() const
|
||||||
{
|
{
|
||||||
assert(p != NULL);
|
CV_Assert(p != NULL);
|
||||||
return p.operator->();
|
return p.operator->();
|
||||||
}
|
}
|
||||||
bool operator!() const
|
|
||||||
{
|
|
||||||
return p.operator==(NULL);
|
|
||||||
}
|
|
||||||
bool operator==(_In_opt_ T* pT) const
|
|
||||||
{
|
|
||||||
return p.operator==(pT);
|
|
||||||
}
|
|
||||||
bool operator!=(_In_opt_ T* pT) const
|
|
||||||
{
|
|
||||||
return p.operator!=(pT);
|
|
||||||
}
|
|
||||||
operator bool()
|
operator bool()
|
||||||
{
|
{
|
||||||
return p.operator!=(NULL);
|
return p.operator!=(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
T* const* GetAddressOf() const
|
|
||||||
{
|
|
||||||
return &p;
|
|
||||||
}
|
|
||||||
|
|
||||||
T** GetAddressOf()
|
|
||||||
{
|
|
||||||
return &p;
|
|
||||||
}
|
|
||||||
|
|
||||||
T** ReleaseAndGetAddressOf()
|
|
||||||
{
|
|
||||||
p.Release();
|
|
||||||
return &p;
|
|
||||||
}
|
|
||||||
|
|
||||||
T* Get() const
|
T* Get() const
|
||||||
{
|
{
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attach to an existing interface (does not AddRef)
|
void Release()
|
||||||
void Attach(_In_opt_ T* p2)
|
|
||||||
{
|
{
|
||||||
p.Attach(p2);
|
if (p)
|
||||||
}
|
p.Release();
|
||||||
// Detach the interface (does not Release)
|
|
||||||
T* Detach()
|
|
||||||
{
|
|
||||||
return p.Detach();
|
|
||||||
}
|
|
||||||
_Check_return_ HRESULT CopyTo(_Deref_out_opt_ T** ppT)
|
|
||||||
{
|
|
||||||
assert(ppT != NULL);
|
|
||||||
if (ppT == NULL)
|
|
||||||
return E_POINTER;
|
|
||||||
*ppT = p;
|
|
||||||
if (p != NULL)
|
|
||||||
p->AddRef();
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Reset()
|
|
||||||
{
|
|
||||||
p.Release();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// query for U interface
|
// query for U interface
|
||||||
template<typename U>
|
template<typename U>
|
||||||
HRESULT As(_Inout_ U** lp) const
|
HRESULT As(_Out_ ComPtr<U>& lp) const
|
||||||
{
|
{
|
||||||
return p->QueryInterface(__uuidof(U), reinterpret_cast<void**>(lp));
|
lp.Release();
|
||||||
}
|
return p->QueryInterface(__uuidof(U), reinterpret_cast<void**>((T**)&lp));
|
||||||
// query for U interface
|
|
||||||
template<typename U>
|
|
||||||
HRESULT As(_Out_ ComPtr<U>* lp) const
|
|
||||||
{
|
|
||||||
return p->QueryInterface(__uuidof(U), reinterpret_cast<void**>(lp->ReleaseAndGetAddressOf()));
|
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
_COM_SMARTPTR_TYPEDEF(T, __uuidof(T));
|
_COM_SMARTPTR_TYPEDEF(T, __uuidof(T));
|
||||||
@ -734,12 +681,10 @@ void CvCapture_MSMF::close()
|
|||||||
if (isOpen)
|
if (isOpen)
|
||||||
{
|
{
|
||||||
isOpen = false;
|
isOpen = false;
|
||||||
if (videoSample)
|
videoSample.Release();
|
||||||
videoSample.Reset();
|
videoFileSource.Release();
|
||||||
if (videoFileSource)
|
|
||||||
videoFileSource.Reset();
|
|
||||||
camid = -1;
|
camid = -1;
|
||||||
filename = "";
|
filename.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -759,7 +704,7 @@ bool CvCapture_MSMF::configureHW(bool enable)
|
|||||||
D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0,
|
D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0,
|
||||||
D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL_9_1 };
|
D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL_9_1 };
|
||||||
if (SUCCEEDED(D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, D3D11_CREATE_DEVICE_BGRA_SUPPORT | D3D11_CREATE_DEVICE_VIDEO_SUPPORT,
|
if (SUCCEEDED(D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, D3D11_CREATE_DEVICE_BGRA_SUPPORT | D3D11_CREATE_DEVICE_VIDEO_SUPPORT,
|
||||||
levels, sizeof(levels) / sizeof(*levels), D3D11_SDK_VERSION, D3DDev.GetAddressOf(), NULL, NULL)))
|
levels, sizeof(levels) / sizeof(*levels), D3D11_SDK_VERSION, &D3DDev, NULL, NULL)))
|
||||||
{
|
{
|
||||||
// NOTE: Getting ready for multi-threaded operation
|
// NOTE: Getting ready for multi-threaded operation
|
||||||
_ComPtr<ID3D11Multithread> D3DDevMT;
|
_ComPtr<ID3D11Multithread> D3DDevMT;
|
||||||
@ -767,27 +712,27 @@ bool CvCapture_MSMF::configureHW(bool enable)
|
|||||||
if (SUCCEEDED(D3DDev->QueryInterface(IID_PPV_ARGS(&D3DDevMT))))
|
if (SUCCEEDED(D3DDev->QueryInterface(IID_PPV_ARGS(&D3DDevMT))))
|
||||||
{
|
{
|
||||||
D3DDevMT->SetMultithreadProtected(TRUE);
|
D3DDevMT->SetMultithreadProtected(TRUE);
|
||||||
D3DDevMT.Reset();
|
D3DDevMT.Release();
|
||||||
if (SUCCEEDED(MFCreateDXGIDeviceManager(&mgrRToken, D3DMgr.GetAddressOf())))
|
if (SUCCEEDED(MFCreateDXGIDeviceManager(&mgrRToken, &D3DMgr)))
|
||||||
{
|
{
|
||||||
if (SUCCEEDED(D3DMgr->ResetDevice(D3DDev.Get(), mgrRToken)))
|
if (SUCCEEDED(D3DMgr->ResetDevice(D3DDev.Get(), mgrRToken)))
|
||||||
{
|
{
|
||||||
captureMode = MODE_HW;
|
captureMode = MODE_HW;
|
||||||
return reopen ? (prevcam >= 0 ? open(prevcam) : open(prevfile.c_str())) : true;
|
return reopen ? (prevcam >= 0 ? open(prevcam) : open(prevfile.c_str())) : true;
|
||||||
}
|
}
|
||||||
D3DMgr.Reset();
|
D3DMgr.Release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
D3DDev.Reset();
|
D3DDev.Release();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (D3DMgr)
|
if (D3DMgr)
|
||||||
D3DMgr.Reset();
|
D3DMgr.Release();
|
||||||
if (D3DDev)
|
if (D3DDev)
|
||||||
D3DDev.Reset();
|
D3DDev.Release();
|
||||||
captureMode = MODE_SW;
|
captureMode = MODE_SW;
|
||||||
return reopen ? (prevcam >= 0 ? open(prevcam) : open(prevfile.c_str())) : true;
|
return reopen ? (prevcam >= 0 ? open(prevcam) : open(prevfile.c_str())) : true;
|
||||||
}
|
}
|
||||||
@ -911,7 +856,7 @@ bool CvCapture_MSMF::open(int _index)
|
|||||||
close();
|
close();
|
||||||
|
|
||||||
_ComPtr<IMFAttributes> msAttr = NULL;
|
_ComPtr<IMFAttributes> msAttr = NULL;
|
||||||
if (SUCCEEDED(MFCreateAttributes(msAttr.GetAddressOf(), 1)) &&
|
if (SUCCEEDED(MFCreateAttributes(&msAttr, 1)) &&
|
||||||
SUCCEEDED(msAttr->SetGUID(
|
SUCCEEDED(msAttr->SetGUID(
|
||||||
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE,
|
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE,
|
||||||
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID
|
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID
|
||||||
@ -933,10 +878,10 @@ bool CvCapture_MSMF::open(int _index)
|
|||||||
_ComPtr<IMFAttributes> srAttr;
|
_ComPtr<IMFAttributes> srAttr;
|
||||||
if (SUCCEEDED(ppDevices[ind]->ActivateObject(__uuidof(IMFMediaSource), (void**)&mSrc)) && mSrc &&
|
if (SUCCEEDED(ppDevices[ind]->ActivateObject(__uuidof(IMFMediaSource), (void**)&mSrc)) && mSrc &&
|
||||||
SUCCEEDED(MFCreateAttributes(&srAttr, 10)) &&
|
SUCCEEDED(MFCreateAttributes(&srAttr, 10)) &&
|
||||||
SUCCEEDED(srAttr->SetUINT32(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, true)) &&
|
SUCCEEDED(srAttr->SetUINT32(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, TRUE)) &&
|
||||||
SUCCEEDED(srAttr->SetUINT32(MF_SOURCE_READER_DISABLE_DXVA, false)) &&
|
SUCCEEDED(srAttr->SetUINT32(MF_SOURCE_READER_DISABLE_DXVA, FALSE)) &&
|
||||||
SUCCEEDED(srAttr->SetUINT32(MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING, false)) &&
|
SUCCEEDED(srAttr->SetUINT32(MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING, FALSE)) &&
|
||||||
SUCCEEDED(srAttr->SetUINT32(MF_SOURCE_READER_ENABLE_ADVANCED_VIDEO_PROCESSING, true)))
|
SUCCEEDED(srAttr->SetUINT32(MF_SOURCE_READER_ENABLE_ADVANCED_VIDEO_PROCESSING, TRUE)))
|
||||||
{
|
{
|
||||||
#ifdef HAVE_DXVA
|
#ifdef HAVE_DXVA
|
||||||
if (D3DMgr)
|
if (D3DMgr)
|
||||||
@ -1019,8 +964,7 @@ bool CvCapture_MSMF::grabFrame()
|
|||||||
if (isOpen)
|
if (isOpen)
|
||||||
{
|
{
|
||||||
DWORD streamIndex, flags;
|
DWORD streamIndex, flags;
|
||||||
if (videoSample)
|
videoSample.Release();
|
||||||
videoSample.Reset();
|
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
@ -1123,7 +1067,7 @@ bool CvCapture_MSMF::retrieveFrame(int, cv::OutputArray frame)
|
|||||||
_ComPtr<IMF2DBuffer> buffer2d;
|
_ComPtr<IMF2DBuffer> buffer2d;
|
||||||
if (convertFormat)
|
if (convertFormat)
|
||||||
{
|
{
|
||||||
if (SUCCEEDED(buf.As<IMF2DBuffer>(&buffer2d)))
|
if (SUCCEEDED(buf.As<IMF2DBuffer>(buffer2d)))
|
||||||
{
|
{
|
||||||
CV_TRACE_REGION_NEXT("lock2d");
|
CV_TRACE_REGION_NEXT("lock2d");
|
||||||
if (SUCCEEDED(buffer2d->Lock2D(&ptr, &pitch)))
|
if (SUCCEEDED(buffer2d->Lock2D(&ptr, &pitch)))
|
||||||
@ -1204,8 +1148,7 @@ bool CvCapture_MSMF::setTime(double time, bool rough)
|
|||||||
if (SUCCEEDED(videoFileSource->GetPresentationAttribute((DWORD)MF_SOURCE_READER_MEDIASOURCE, MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS, &var)) &&
|
if (SUCCEEDED(videoFileSource->GetPresentationAttribute((DWORD)MF_SOURCE_READER_MEDIASOURCE, MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS, &var)) &&
|
||||||
var.vt == VT_UI4 && var.ulVal & MFMEDIASOURCE_CAN_SEEK)
|
var.vt == VT_UI4 && var.ulVal & MFMEDIASOURCE_CAN_SEEK)
|
||||||
{
|
{
|
||||||
if (videoSample)
|
videoSample.Release();
|
||||||
videoSample.Reset();
|
|
||||||
bool useGrabbing = time > 0 && !rough && !(var.ulVal & MFMEDIASOURCE_HAS_SLOW_SEEK);
|
bool useGrabbing = time > 0 && !rough && !(var.ulVal & MFMEDIASOURCE_HAS_SLOW_SEEK);
|
||||||
PropVariantClear(&var);
|
PropVariantClear(&var);
|
||||||
sampleTime = (useGrabbing && time >= frameStep) ? (LONGLONG)floor(time + 0.5) - frameStep : (LONGLONG)floor(time + 0.5);
|
sampleTime = (useGrabbing && time >= frameStep) ? (LONGLONG)floor(time + 0.5) - frameStep : (LONGLONG)floor(time + 0.5);
|
||||||
@ -1216,7 +1159,7 @@ bool CvCapture_MSMF::setTime(double time, bool rough)
|
|||||||
if (resOK && useGrabbing)
|
if (resOK && useGrabbing)
|
||||||
{
|
{
|
||||||
LONGLONG timeborder = (LONGLONG)floor(time + 0.5) - frameStep / 2;
|
LONGLONG timeborder = (LONGLONG)floor(time + 0.5) - frameStep / 2;
|
||||||
do { resOK = grabFrame(); videoSample.Reset(); } while (resOK && sampleTime < timeborder);
|
do { resOK = grabFrame(); videoSample.Release(); } while (resOK && sampleTime < timeborder);
|
||||||
}
|
}
|
||||||
return resOK;
|
return resOK;
|
||||||
}
|
}
|
||||||
@ -1958,7 +1901,7 @@ void CvVideoWriter_MSMF::close()
|
|||||||
{
|
{
|
||||||
initiated = false;
|
initiated = false;
|
||||||
sinkWriter->Finalize();
|
sinkWriter->Finalize();
|
||||||
sinkWriter.Reset();
|
sinkWriter.Release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user