videoio(msmf): cleanup unused methods from ComPtr wrapper

Use Win32 TRUE/FALSE in SetUINT32() calls for bool parameters
pull/11764/head
Alexander Alekhin 7 years ago
parent 8f24db048c
commit 2bb5d1bca3
  1. 111
      modules/videoio/src/cap_msmf.cpp

@ -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);
}
// 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()
{ {
if (p)
p.Release(); 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));
}
// query for U interface
template<typename U>
HRESULT As(_Out_ ComPtr<U>* lp) const
{ {
return p->QueryInterface(__uuidof(U), reinterpret_cast<void**>(lp->ReleaseAndGetAddressOf())); lp.Release();
return p->QueryInterface(__uuidof(U), reinterpret_cast<void**>((T**)&lp));
} }
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…
Cancel
Save