Revision: 312
http://artoolkit.svn.sourceforge.net/artoolkit/?rev=312&view=rev
Author: julianlooser
Date: 2010-11-16 22:33:10 +0000 (Tue, 16 Nov 2010)
Log Message:
-----------
Modified Paths:
--------------
branches/hartmut-pre-2_8/artoolkit/lib/SRC/VideoWin32DirectShow/_ext/dsvl-0.0.8h/src/DSVL_GraphManager.cpp
branches/hartmut-pre-2_8/artoolkit/lib/SRC/VideoWin32DirectShow/_ext/dsvl-0.0.8h/src/DSVL_Helpers.cpp
Modified: branches/hartmut-pre-2_8/artoolkit/lib/SRC/VideoWin32DirectShow/_ext/dsvl-0.0.8h/src/DSVL_GraphManager.cpp
===================================================================
--- branches/hartmut-pre-2_8/artoolkit/lib/SRC/VideoWin32DirectShow/_ext/dsvl-0.0.8h/src/DSVL_GraphManager.cpp 2009-06-16 04:54:44 UTC (rev 311)
+++ branches/hartmut-pre-2_8/artoolkit/lib/SRC/VideoWin32DirectShow/_ext/dsvl-0.0.8h/src/DSVL_GraphManager.cpp 2010-11-16 22:33:10 UTC (rev 312)
@@ -1,218 +1,218 @@
-/* ========================================================================
-* PROJECT: DirectShow Video Processing Library (DSVL)
-* Version: 0.0.8c (10/26/2005)
-* ========================================================================
-* Author: Thomas Pintaric, Vienna University of Technology
-* Contact: pin...@im... http://ims.tuwien.ac.at/~thomas
-* =======================================================================
-*
-* Copyright (C) 2005 Vienna University of Technology
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*
-* For further information please contact Thomas Pintaric under
-* <pin...@im...> or write to Thomas Pintaric,
-* Vienna University of Technology, Favoritenstr. 9-11/E188/2, A-1040
-* Vienna, Austria.
-* ========================================================================*/
-
-
-#include "DSVL_GraphManager.h"
-
-#include "dshow.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <objbase.h>
-#include <comutil.h>
-#include <atlbase.h>
-#include <process.h>
-
-#include "tinyxml.h"
-#include "DSVL_Helpers.h"
-
-//HANDLE g_ESync = CreateEvent(NULL,0,0,_T("global sync event"));
-//CCritSec g_CSec;
-
-#define MAX_GUID_STRING_LENGTH 72
-
-#ifdef _DEBUG
-#define DsVideoLibFileName "DSVLd.dll"
-#else
-#define DsVideoLibFileName "DSVL.dll"
-#endif
-
-
-BOOL APIENTRY DllMain( HANDLE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
-{
- switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- case DLL_PROCESS_DETACH:
- break;
- }
- return TRUE;
-}
-
-// -----------------------------------------------------------------------------------------------------------------
-DS_MEDIA_FORMAT default_DS_MEDIA_FORMAT()
-{
- DS_MEDIA_FORMAT mf;
- ZeroMemory(&mf, sizeof(DS_MEDIA_FORMAT));
- mf.inputDevice = default_VIDEO_INPUT_DEVICE;
- mf.pixel_format = default_PIXELFORMAT;
- mf.inputFlags = 0; // clear flags
- mf.defaultInputFlags = true;
- return(mf);
-}
-
-// -----------------------------------------------------------------------------------------------------------------
-HRESULT MatchMediaTypes(IPin *pin, DS_MEDIA_FORMAT *mf, AM_MEDIA_TYPE *req_mt)
-// will overwrite req_mt with best match
-{
- HRESULT hr;
- CComPtr<IEnumMediaTypes> enum_mt;
- pin->EnumMediaTypes(&enum_mt);
- enum_mt->Reset();
- AM_MEDIA_TYPE *p_mt = NULL;
- while(S_OK == (hr = enum_mt->Next(1,&p_mt,NULL)))
- {
- VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER *) p_mt->pbFormat;
- if( ((p_mt->subtype == mf->subtype) || (mf->subtype == GUID_NULL)) &&
- ((pvi->bmiHeader.biHeight == mf->biHeight) || (mf->biHeight == 0)) &&
- ((pvi->bmiHeader.biWidth == mf->biWidth) || (mf->biWidth == 0)) /*&&
- // jcl64: Don't try to match frame rate. Set it explicitly (see below)
- ((avg2fps(pvi->AvgTimePerFrame,3) == RoundDouble(mf->frameRate,3)) || (mf->frameRate == 0.0))*/
- )
- {
- // found a match!
- CopyMediaType(req_mt,p_mt);
-
- // ------------------
- // jcl64: Set the frame rate we want
- if (VIDEOINFOHEADER *pvi_req = (VIDEOINFOHEADER *) req_mt->pbFormat) {
- pvi_req->AvgTimePerFrame = fps2avg(RoundDouble(mf->frameRate,3));
- }
- // jcl64
- // ------------------
-
- DeleteMediaType(p_mt);
- return(S_OK);
- }
- else DeleteMediaType(p_mt);
- }
-
- return(E_FAIL);
-}
-
-// -----------------------------------------------------------------------------------------------------------------
-const char* VideoInputDeviceToString(VIDEO_INPUT_DEVICE device)
-{
- if(device > INVALID_INPUT_FILTER) return(NULL);
- else return(VIDEO_INPUT_DEVICE_names[device]);
-}
-
-// -----------------------------------------------------------------------------------------------------------------
-VIDEO_INPUT_DEVICE StringVideoInputDevice(char *device_str)
-{
- for(unsigned int i=0; i<INVALID_INPUT_FILTER; i++)
- if(strcmp(device_str,VIDEO_INPUT_DEVICE_names[i]) == 0) return((VIDEO_INPUT_DEVICE)i);
- return(INVALID_INPUT_FILTER);
-}
-
-
-// -----------------------------------------------------------------------------------------------------------------
-
-
-
-
-//###############################################################################################
-
-DSVL_GraphManager::DSVL_GraphManager() :
- captureGraphBuilder(NULL),
- graphBuilder(NULL),
- mediaControl(NULL),
- mediaEvent(NULL),
- mediaSeeking(NULL),
- cameraControl(NULL),
- droppedFrames(NULL),
- videoControl(NULL),
- videoProcAmp(NULL),
- sourceFilter(NULL),
- decoderFilter(NULL),
- rendererFilter(NULL),
- grabberFilter(NULL),
- capturePin(NULL),
- m_ESync(NULL),
- m_ESyncName("SyncEvent")
-{
-
- m_ESync = CreateEvent(NULL,TRUE,0,_T("SyncEvent"));
-
- media_format = default_DS_MEDIA_FORMAT();
- media_format.subtype = GUID_NULL;
-
- current_timestamp = 0;
+/* ========================================================================
+* PROJECT: DirectShow Video Processing Library (DSVL)
+* Version: 0.0.8c (10/26/2005)
+* ========================================================================
+* Author: Thomas Pintaric, Vienna University of Technology
+* Contact: pin...@im... http://ims.tuwien.ac.at/~thomas
+* =======================================================================
+*
+* Copyright (C) 2005 Vienna University of Technology
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*
+* For further information please contact Thomas Pintaric under
+* <pin...@im...> or write to Thomas Pintaric,
+* Vienna University of Technology, Favoritenstr. 9-11/E188/2, A-1040
+* Vienna, Austria.
+* ========================================================================*/
+
+
+#include "DSVL_GraphManager.h"
+
+#include "dshow.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <objbase.h>
+#include <comutil.h>
+#include <atlbase.h>
+#include <process.h>
+
+#include "tinyxml.h"
+#include "DSVL_Helpers.h"
+
+//HANDLE g_ESync = CreateEvent(NULL,0,0,_T("global sync event"));
+//CCritSec g_CSec;
+
+#define MAX_GUID_STRING_LENGTH 72
+
+#ifdef _DEBUG
+#define DsVideoLibFileName "DSVLd.dll"
+#else
+#define DsVideoLibFileName "DSVL.dll"
+#endif
+
+
+BOOL APIENTRY DllMain( HANDLE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_ATTACH:
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ case DLL_PROCESS_DETACH:
+ break;
+ }
+ return TRUE;
+}
+
+// -----------------------------------------------------------------------------------------------------------------
+DS_MEDIA_FORMAT default_DS_MEDIA_FORMAT()
+{
+ DS_MEDIA_FORMAT mf;
+ ZeroMemory(&mf, sizeof(DS_MEDIA_FORMAT));
+ mf.inputDevice = default_VIDEO_INPUT_DEVICE;
+ mf.pixel_format = default_PIXELFORMAT;
+ mf.inputFlags = 0; // clear flags
+ mf.defaultInputFlags = true;
+ return(mf);
+}
+
+// -----------------------------------------------------------------------------------------------------------------
+HRESULT MatchMediaTypes(IPin *pin, DS_MEDIA_FORMAT *mf, AM_MEDIA_TYPE *req_mt)
+// will overwrite req_mt with best match
+{
+ HRESULT hr;
+ CComPtr<IEnumMediaTypes> enum_mt;
+ pin->EnumMediaTypes(&enum_mt);
+ enum_mt->Reset();
+ AM_MEDIA_TYPE *p_mt = NULL;
+ while(S_OK == (hr = enum_mt->Next(1,&p_mt,NULL)))
+ {
+ VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER *) p_mt->pbFormat;
+ if( ((p_mt->subtype == mf->subtype) || (mf->subtype == GUID_NULL)) &&
+ ((pvi->bmiHeader.biHeight == mf->biHeight) || (mf->biHeight == 0)) &&
+ ((pvi->bmiHeader.biWidth == mf->biWidth) || (mf->biWidth == 0)) /*&&
+ // jcl64: Don't try to match frame rate. Set it explicitly (see below)
+ ((avg2fps(pvi->AvgTimePerFrame,3) == RoundDouble(mf->frameRate,3)) || (mf->frameRate == 0.0))*/
+ )
+ {
+ // found a match!
+ CopyMediaType(req_mt,p_mt);
+
+ // ------------------
+ // jcl64: Set the frame rate we want
+ if (VIDEOINFOHEADER *pvi_req = (VIDEOINFOHEADER *) req_mt->pbFormat) {
+ pvi_req->AvgTimePerFrame = fps2avg(RoundDouble(mf->frameRate,3));
+ }
+ // jcl64
+ // ------------------
+
+ DeleteMediaType(p_mt);
+ return(S_OK);
+ }
+ else DeleteMediaType(p_mt);
+ }
+
+ return(E_FAIL);
+}
+
+// -----------------------------------------------------------------------------------------------------------------
+const char* VideoInputDeviceToString(VIDEO_INPUT_DEVICE device)
+{
+ if(device > INVALID_INPUT_FILTER) return(NULL);
+ else return(VIDEO_INPUT_DEVICE_names[device]);
+}
+
+// -----------------------------------------------------------------------------------------------------------------
+VIDEO_INPUT_DEVICE StringVideoInputDevice(char *device_str)
+{
+ for(unsigned int i=0; i<INVALID_INPUT_FILTER; i++)
+ if(strcmp(device_str,VIDEO_INPUT_DEVICE_names[i]) == 0) return((VIDEO_INPUT_DEVICE)i);
+ return(INVALID_INPUT_FILTER);
+}
+
+
+// -----------------------------------------------------------------------------------------------------------------
+
+
+
+
+//###############################################################################################
+
+DSVL_GraphManager::DSVL_GraphManager() :
+ captureGraphBuilder(NULL),
+ graphBuilder(NULL),
+ mediaControl(NULL),
+ mediaEvent(NULL),
+ mediaSeeking(NULL),
+ cameraControl(NULL),
+ droppedFrames(NULL),
+ videoControl(NULL),
+ videoProcAmp(NULL),
+ sourceFilter(NULL),
+ decoderFilter(NULL),
+ rendererFilter(NULL),
+ grabberFilter(NULL),
+ capturePin(NULL),
+ m_ESync(NULL),
+ m_ESyncName("SyncEvent")
+{
+
+ m_ESync = CreateEvent(NULL,TRUE,0,_T("SyncEvent"));
+
+ media_format = default_DS_MEDIA_FORMAT();
+ media_format.subtype = GUID_NULL;
+
+ current_timestamp = 0;
sample_counter = 0;
-
-#ifdef _DEBUG
- /*
- DbgInitialise((struct HINSTANCE__ *) GetModuleHandle(DsVideoLibFileName));
- DbgSetModuleLevel(LOG_TRACE,5);
- DbgSetModuleLevel(LOG_MEMORY,5);
- DbgSetModuleLevel(LOG_ERROR,5);
- DbgSetModuleLevel(LOG_TIMING,5);
- DbgSetModuleLevel(LOG_LOCKING,5);
- */
-#endif
-
- m_bGraphIsInitialized = false;
-}
-
-// -----------------------------------------------------------------------------------------------------------------
-DSVL_GraphManager::~DSVL_GraphManager()
-{
- HRESULT hr;
- hr = ReleaseGraph();
-
- #ifdef _DEBUG
- //DbgOutString("*** DbgDumpObjectRegister:\n");
- //DbgDumpObjectRegister();
- #endif
-}
-
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::GetCurrentMediaFormatEx(DS_MEDIA_FORMAT *mf)
-{
- CopyMemory(mf,&media_format,sizeof(DS_MEDIA_FORMAT));
- return(S_OK);
-}
-
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::GetCurrentMediaFormat(LONG* frame_width,
- LONG *frame_height,
- double* frames_per_second,
- PIXELFORMAT* pixel_format)
+
+#ifdef _DEBUG
+ /*
+ DbgInitialise((struct HINSTANCE__ *) GetModuleHandle(DsVideoLibFileName));
+ DbgSetModuleLevel(LOG_TRACE,5);
+ DbgSetModuleLevel(LOG_MEMORY,5);
+ DbgSetModuleLevel(LOG_ERROR,5);
+ DbgSetModuleLevel(LOG_TIMING,5);
+ DbgSetModuleLevel(LOG_LOCKING,5);
+ */
+#endif
+
+ m_bGraphIsInitialized = false;
+}
+
+// -----------------------------------------------------------------------------------------------------------------
+DSVL_GraphManager::~DSVL_GraphManager()
{
+ HRESULT hr;
+ hr = ReleaseGraph();
+
+ #ifdef _DEBUG
+ //DbgOutString("*** DbgDumpObjectRegister:\n");
+ //DbgDumpObjectRegister();
+ #endif
+}
+
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::GetCurrentMediaFormatEx(DS_MEDIA_FORMAT *mf)
+{
+ CopyMemory(mf,&media_format,sizeof(DS_MEDIA_FORMAT));
+ return(S_OK);
+}
+
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::GetCurrentMediaFormat(LONG* frame_width,
+ LONG *frame_height,
+ double* frames_per_second,
+ PIXELFORMAT* pixel_format)
+{
DS_MEDIA_FORMAT mf;
HRESULT hr = GetCurrentMediaFormatEx(&mf);
if(FAILED(hr)) return(hr);
@@ -221,12 +221,12 @@
if(frames_per_second != NULL) *frames_per_second = mf.frameRate;
if(pixel_format != NULL) *pixel_format = mf.pixel_format;
return(S_OK);
-}
-
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::EnableMemoryBuffer(unsigned int _maxConcurrentClients,
- unsigned int _allocatorBuffersPerClient)
-{
+}
+
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::EnableMemoryBuffer(unsigned int _maxConcurrentClients,
+ unsigned int _allocatorBuffersPerClient)
+{
CAutoLock cObjectLock(&m_CSec);
HRESULT hr;
@@ -237,311 +237,311 @@
m_currentAllocatorBuffers = _maxConcurrentClients * _allocatorBuffersPerClient;
// ------
- CComPtr<IPin> sgPin = NULL;
- if(FAILED(hr=getPin(grabberFilter,PINDIR_INPUT,1,sgPin))) return(hr);
- CComPtr<IMemAllocator> pAllocator = NULL;
-
- CComPtr<IMemInputPin> sgmiPin = NULL;
- hr = sgPin->QueryInterface(IID_IMemInputPin, (void**)&sgmiPin);
- if (FAILED(hr)) return(hr);
-
- if(FAILED(hr = sgmiPin->GetAllocator(&pAllocator))) return(hr);
- if(FAILED(hr = pAllocator->Decommit())) return(hr);
- ALLOCATOR_PROPERTIES requestedProperties;
- ALLOCATOR_PROPERTIES actualProperties;
- pAllocator->GetProperties(&requestedProperties);
- if(requestedProperties.cBuffers != m_currentAllocatorBuffers)
- requestedProperties.cBuffers = m_currentAllocatorBuffers;
- hr = pAllocator->SetProperties(&requestedProperties,&actualProperties);
+ CComPtr<IPin> sgPin = NULL;
+ if(FAILED(hr=getPin(grabberFilter,PINDIR_INPUT,1,sgPin))) return(hr);
+ CComPtr<IMemAllocator> pAllocator = NULL;
+
+ CComPtr<IMemInputPin> sgmiPin = NULL;
+ hr = sgPin->QueryInterface(IID_IMemInputPin, (void**)&sgmiPin);
+ if (FAILED(hr)) return(hr);
+
+ if(FAILED(hr = sgmiPin->GetAllocator(&pAllocator))) return(hr);
+ if(FAILED(hr = pAllocator->Decommit())) return(hr);
+ ALLOCATOR_PROPERTIES requestedProperties;
+ ALLOCATOR_PROPERTIES actualProperties;
+ pAllocator->GetProperties(&requestedProperties);
+ if(requestedProperties.cBuffers != m_currentAllocatorBuffers)
+ requestedProperties.cBuffers = m_currentAllocatorBuffers;
+ hr = pAllocator->SetProperties(&requestedProperties,&actualProperties);
// ------
- sampleGrabber->SetBufferSamples(FALSE);
- sampleGrabber->SetOneShot(FALSE);
-
- CComPtr<ISampleGrabberCB> custom_sgCB;
- hr = QueryInterface(IID_ISampleGrabberCB, (void**)&custom_sgCB);
- if(FAILED(hr)) return(hr);
- hr = sampleGrabber->SetCallback(custom_sgCB,0);
- return(hr);
-}
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::DisableMemoryBuffer()
-{
+ sampleGrabber->SetBufferSamples(FALSE);
+ sampleGrabber->SetOneShot(FALSE);
+
+ CComPtr<ISampleGrabberCB> custom_sgCB;
+ hr = QueryInterface(IID_ISampleGrabberCB, (void**)&custom_sgCB);
+ if(FAILED(hr)) return(hr);
+ hr = sampleGrabber->SetCallback(custom_sgCB,0);
+ return(hr);
+}
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::DisableMemoryBuffer()
+{
CAutoLock cObjectLock(&m_CSec);
- if(mb.size() > 0)
- {
- std::map<unsigned long, MemoryBufferEntry>::iterator iter = mb.begin();
- while(iter != mb.end())
- {
- // ignore use_count
- (*iter).second.media_sample->Release();
- std::map<unsigned long, MemoryBufferEntry>::iterator iter2 =
- mb.erase(iter);
- iter = iter2;
- }
- }
+ if(mb.size() > 0)
+ {
+ std::map<unsigned long, MemoryBufferEntry>::iterator iter = mb.begin();
+ while(iter != mb.end())
+ {
+ // ignore use_count
+ (*iter).second.media_sample->Release();
+ std::map<unsigned long, MemoryBufferEntry>::iterator iter2 =
+ mb.erase(iter);
+ iter = iter2;
+ }
+ }
m_currentAllocatorBuffers = 0;
- return(sampleGrabber->SetCallback(NULL,0));
-}
-// ----------------------------------------------------------------------------------------------------------
-
-DWORD WINAPI TShowFilterProperties(LPVOID lpParameter)
-{
- return(DisplayFilterProperties((IBaseFilter*)lpParameter));
-}
-// ----------------------------------------------------------------------------------------------------------
-DWORD WINAPI TShowPinProperties(LPVOID lpParameter)
-{
- return(DisplayPinProperties((IPin*)lpParameter));
-}
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::ShowFilterProperties(HWND hWnd)
-{
- DWORD dwThreadID;
- HANDLE hFPropThread = CreateThread(NULL,0,TShowFilterProperties,(LPVOID)sourceFilter,0,&dwThreadID);
- if(hFPropThread == NULL) return(E_FAIL);
- else return(S_OK);
-}
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::ShowPinProperties(HWND hWnd)
-{
- DWORD dwThreadID;
- HANDLE hPPropThread = CreateThread(NULL,0,TShowPinProperties,(LPVOID)capturePin,0,&dwThreadID);
- if(hPPropThread == NULL) return(E_FAIL);
- else return(S_OK);
-}
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::GetCameraParameterRange(CP_INTERFACE interface_type,
- long property,
- long *pMin,
- long *pMax,
- long *pSteppingDelta,
- long *pDefault,
- long *pCapsFlags)
-{
- switch(interface_type)
- {
- case(CP_CameraControl): if(!cameraControl) return(E_INVALIDARG);
- return(cameraControl->GetRange(property,pMin,pMax,pSteppingDelta,pDefault,pCapsFlags));
- break;
- case(CP_VideoProcAmp): if(!videoProcAmp) return(E_INVALIDARG);
- return(videoProcAmp->GetRange(property,pMin,pMax,pSteppingDelta,pDefault,pCapsFlags));
- break;
- }
-
- // unknown interface_type
- return(E_INVALIDARG);
-}
-
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::GetCameraParameter(CP_INTERFACE interface_type, long Property, long *lValue, bool *bAuto)
-{
- HRESULT hr;
- long Flags = 0;
- hr = GetCameraParameter(interface_type,Property,lValue,&Flags);
- (*bAuto) = (Flags == GetCameraPropertyAUTOFlag(interface_type, true));
- return(hr);
-}
-
-HRESULT DSVL_GraphManager::GetCameraParameter(CP_INTERFACE interface_type, long Property, long *lValue, long *Flags)
-{
- switch(interface_type)
- {
- case(CP_CameraControl): if(!cameraControl) return(E_INVALIDARG);
- return(cameraControl->Get(Property,lValue,Flags));
- break;
- case(CP_VideoProcAmp): if(!videoProcAmp) return(E_INVALIDARG);
- return(videoProcAmp->Get(Property,lValue,Flags));
- break;
- }
-
- // unknown interface_type
- return(E_INVALIDARG);
-}
-
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::SetCameraParameter(CP_INTERFACE interface_type, long Property, long lValue, bool bAuto)
-{
- return(SetCameraParameter(interface_type,Property,lValue,GetCameraPropertyAUTOFlag(interface_type, bAuto)));
-}
-
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::SetCameraParameter(CP_INTERFACE interface_type, long Property, long lValue, long Flags)
-{
- switch(interface_type)
- {
- case(CP_CameraControl): if(!cameraControl) return(E_INVALIDARG);
- return(cameraControl->Set(Property,lValue,Flags));
- break;
- case(CP_VideoProcAmp): if(!videoProcAmp) return(E_INVALIDARG);
- return(videoProcAmp->Set(Property,lValue,Flags));
- break;
- }
-
- // unknown interface_type
- return(E_INVALIDARG);
-}
-// ----------------------------------------------------------------------------------------------------------
-
-long DSVL_GraphManager::GetCameraPropertyAUTOFlag(CP_INTERFACE interface_type, bool bAUTO)
-{
- switch(interface_type)
- {
- case(CP_CameraControl): return(bAUTO ? CameraControl_Flags_Auto : CameraControl_Flags_Manual);
- break;
- case(CP_VideoProcAmp): return(bAUTO ? VideoProcAmp_Flags_Auto : VideoProcAmp_Flags_Manual);
- break;
- }
-#ifdef _DEBUG
- ASSERT(false);
-#endif
- return(0x01);
-}
-
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::SetCameraParameterToDefault(CP_INTERFACE interface_type, long Property, bool bAuto)
-{
- long min;
- long max;
- long steppingDelta;
- long defaultValue;
- long capsFlags;
-
- HRESULT hr;
- if(FAILED(hr = GetCameraParameterRange(interface_type,Property,&min,&max,&steppingDelta,&defaultValue,&capsFlags)))
- return(hr);
- if(FAILED(hr = SetCameraParameter(interface_type,Property,defaultValue,GetCameraPropertyAUTOFlag(interface_type,bAuto))))
- return(hr);
-
- return(S_OK);
-}
-
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::ResetCameraParameters(bool bAuto)
-// bAuto: indicates if the property should be controlled automatically
-{
- int s = 0;
- if(cameraControl)
- {
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Pan, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Roll, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Tilt, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Zoom, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Exposure, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Iris, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Focus, bAuto));
- // impressive, but show me a camera that supports all of these options! :(
- }
- if(videoProcAmp)
- {
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Brightness, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Contrast, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Hue, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Saturation, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Sharpness, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Gamma, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_ColorEnable, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_WhiteBalance, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_BacklightCompensation, bAuto));
- s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Gain, bAuto));
- }
-
- if(s==0) return(E_FAIL);
- else return(S_OK);
-}
-// ----------------------------------------------------------------------------------------------------------
-
-HRESULT DSVL_GraphManager::GetCameraParameterN(CP_INTERFACE interface_type, long Property, double *dValue)
-{
- HRESULT hr;
- long oldValue;
- long oldFlags;
- long min;
- long max;
- long steppingDelta;
- long defaultValue;
- long capsFlags;
-
- if(FAILED(hr = GetCameraParameter(interface_type,Property,&oldValue, &oldFlags))) return(hr);
- if(FAILED(hr = GetCameraParameterRange(interface_type,Property,&min,&max,&steppingDelta,&defaultValue,&capsFlags)))
- return(hr);
-
- (*dValue) = ((double)(oldValue-min))/((double)(max-min));
- return(S_OK);
-}
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::SetCameraParameterN(CP_INTERFACE interface_type, long Property, double dValue)
-{
- HRESULT hr;
- long oldValue;
- long oldFlags;
- long min;
- long max;
- long steppingDelta;
- long defaultValue;
- long capsFlags;
-
- if(FAILED(hr = GetCameraParameter(interface_type,Property,&oldValue, &oldFlags))) return(hr);
- if(FAILED(hr = GetCameraParameterRange(interface_type,Property,&min,&max,&steppingDelta,&defaultValue,&capsFlags)))
- return(hr);
-
- long newValue = min + (long)((dValue*((double)(max-min))) / (double)steppingDelta) * steppingDelta;
- if(newValue == oldValue) return(S_FALSE);
- return(SetCameraParameter(interface_type,Property,newValue,GetCameraPropertyAUTOFlag(interface_type,false)));
-}
-
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::Run()
-{
- HRESULT hr;
- if(FAILED(hr = mediaControl->Run())) return(hr);
- else return(S_OK);
-}
-
-// ----------------------------------------------------------------------------------------------------------
-
-HRESULT DSVL_GraphManager::Stop(bool forcedStop)
-{
- HRESULT hr;
-
- if(FAILED(hr = (forcedStop ? mediaControl->Stop() : mediaControl->StopWhenReady()))) return(hr);
- else return(S_OK);
-}
-
-// ----------------------------------------------------------------------------------------------------------
-
-HRESULT DSVL_GraphManager::Pause()
-{
- HRESULT hr;
- if(FAILED(hr = mediaControl->Pause())) return(hr);
- else return(S_OK);
-}
-
-// ----------------------------------------------------------------------------------------------------------
-
-HRESULT DSVL_GraphManager::GetCurrentTimestamp(REFERENCE_TIME *Timestamp)
-{
+ return(sampleGrabber->SetCallback(NULL,0));
+}
+// ----------------------------------------------------------------------------------------------------------
+
+DWORD WINAPI TShowFilterProperties(LPVOID lpParameter)
+{
+ return(DisplayFilterProperties((IBaseFilter*)lpParameter));
+}
+// ----------------------------------------------------------------------------------------------------------
+DWORD WINAPI TShowPinProperties(LPVOID lpParameter)
+{
+ return(DisplayPinProperties((IPin*)lpParameter));
+}
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::ShowFilterProperties(HWND hWnd)
+{
+ DWORD dwThreadID;
+ HANDLE hFPropThread = CreateThread(NULL,0,TShowFilterProperties,(LPVOID)sourceFilter,0,&dwThreadID);
+ if(hFPropThread == NULL) return(E_FAIL);
+ else return(S_OK);
+}
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::ShowPinProperties(HWND hWnd)
+{
+ DWORD dwThreadID;
+ HANDLE hPPropThread = CreateThread(NULL,0,TShowPinProperties,(LPVOID)capturePin,0,&dwThreadID);
+ if(hPPropThread == NULL) return(E_FAIL);
+ else return(S_OK);
+}
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::GetCameraParameterRange(CP_INTERFACE interface_type,
+ long property,
+ long *pMin,
+ long *pMax,
+ long *pSteppingDelta,
+ long *pDefault,
+ long *pCapsFlags)
+{
+ switch(interface_type)
+ {
+ case(CP_CameraControl): if(!cameraControl) return(E_INVALIDARG);
+ return(cameraControl->GetRange(property,pMin,pMax,pSteppingDelta,pDefault,pCapsFlags));
+ break;
+ case(CP_VideoProcAmp): if(!videoProcAmp) return(E_INVALIDARG);
+ return(videoProcAmp->GetRange(property,pMin,pMax,pSteppingDelta,pDefault,pCapsFlags));
+ break;
+ }
+
+ // unknown interface_type
+ return(E_INVALIDARG);
+}
+
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::GetCameraParameter(CP_INTERFACE interface_type, long Property, long *lValue, bool *bAuto)
+{
+ HRESULT hr;
+ long Flags = 0;
+ hr = GetCameraParameter(interface_type,Property,lValue,&Flags);
+ (*bAuto) = (Flags == GetCameraPropertyAUTOFlag(interface_type, true));
+ return(hr);
+}
+
+HRESULT DSVL_GraphManager::GetCameraParameter(CP_INTERFACE interface_type, long Property, long *lValue, long *Flags)
+{
+ switch(interface_type)
+ {
+ case(CP_CameraControl): if(!cameraControl) return(E_INVALIDARG);
+ return(cameraControl->Get(Property,lValue,Flags));
+ break;
+ case(CP_VideoProcAmp): if(!videoProcAmp) return(E_INVALIDARG);
+ return(videoProcAmp->Get(Property,lValue,Flags));
+ break;
+ }
+
+ // unknown interface_type
+ return(E_INVALIDARG);
+}
+
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::SetCameraParameter(CP_INTERFACE interface_type, long Property, long lValue, bool bAuto)
+{
+ return(SetCameraParameter(interface_type,Property,lValue,GetCameraPropertyAUTOFlag(interface_type, bAuto)));
+}
+
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::SetCameraParameter(CP_INTERFACE interface_type, long Property, long lValue, long Flags)
+{
+ switch(interface_type)
+ {
+ case(CP_CameraControl): if(!cameraControl) return(E_INVALIDARG);
+ return(cameraControl->Set(Property,lValue,Flags));
+ break;
+ case(CP_VideoProcAmp): if(!videoProcAmp) return(E_INVALIDARG);
+ return(videoProcAmp->Set(Property,lValue,Flags));
+ break;
+ }
+
+ // unknown interface_type
+ return(E_INVALIDARG);
+}
+// ----------------------------------------------------------------------------------------------------------
+
+long DSVL_GraphManager::GetCameraPropertyAUTOFlag(CP_INTERFACE interface_type, bool bAUTO)
+{
+ switch(interface_type)
+ {
+ case(CP_CameraControl): return(bAUTO ? CameraControl_Flags_Auto : CameraControl_Flags_Manual);
+ break;
+ case(CP_VideoProcAmp): return(bAUTO ? VideoProcAmp_Flags_Auto : VideoProcAmp_Flags_Manual);
+ break;
+ }
+#ifdef _DEBUG
+ ASSERT(false);
+#endif
+ return(0x01);
+}
+
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::SetCameraParameterToDefault(CP_INTERFACE interface_type, long Property, bool bAuto)
+{
+ long min;
+ long max;
+ long steppingDelta;
+ long defaultValue;
+ long capsFlags;
+
+ HRESULT hr;
+ if(FAILED(hr = GetCameraParameterRange(interface_type,Property,&min,&max,&steppingDelta,&defaultValue,&capsFlags)))
+ return(hr);
+ if(FAILED(hr = SetCameraParameter(interface_type,Property,defaultValue,GetCameraPropertyAUTOFlag(interface_type,bAuto))))
+ return(hr);
+
+ return(S_OK);
+}
+
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::ResetCameraParameters(bool bAuto)
+// bAuto: indicates if the property should be controlled automatically
+{
+ int s = 0;
+ if(cameraControl)
+ {
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Pan, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Roll, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Tilt, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Zoom, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Exposure, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Iris, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_CameraControl, CameraControl_Focus, bAuto));
+ // impressive, but show me a camera that supports all of these options! :(
+ }
+ if(videoProcAmp)
+ {
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Brightness, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Contrast, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Hue, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Saturation, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Sharpness, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Gamma, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_ColorEnable, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_WhiteBalance, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_BacklightCompensation, bAuto));
+ s += (int)SUCCEEDED(SetCameraParameterToDefault(CP_VideoProcAmp, VideoProcAmp_Gain, bAuto));
+ }
+
+ if(s==0) return(E_FAIL);
+ else return(S_OK);
+}
+// ----------------------------------------------------------------------------------------------------------
+
+HRESULT DSVL_GraphManager::GetCameraParameterN(CP_INTERFACE interface_type, long Property, double *dValue)
+{
+ HRESULT hr;
+ long oldValue;
+ long oldFlags;
+ long min;
+ long max;
+ long steppingDelta;
+ long defaultValue;
+ long capsFlags;
+
+ if(FAILED(hr = GetCameraParameter(interface_type,Property,&oldValue, &oldFlags))) return(hr);
+ if(FAILED(hr = GetCameraParameterRange(interface_type,Property,&min,&max,&steppingDelta,&defaultValue,&capsFlags)))
+ return(hr);
+
+ (*dValue) = ((double)(oldValue-min))/((double)(max-min));
+ return(S_OK);
+}
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::SetCameraParameterN(CP_INTERFACE interface_type, long Property, double dValue)
+{
+ HRESULT hr;
+ long oldValue;
+ long oldFlags;
+ long min;
+ long max;
+ long steppingDelta;
+ long defaultValue;
+ long capsFlags;
+
+ if(FAILED(hr = GetCameraParameter(interface_type,Property,&oldValue, &oldFlags))) return(hr);
+ if(FAILED(hr = GetCameraParameterRange(interface_type,Property,&min,&max,&steppingDelta,&defaultValue,&capsFlags)))
+ return(hr);
+
+ long newValue = min + (long)((dValue*((double)(max-min))) / (double)steppingDelta) * steppingDelta;
+ if(newValue == oldValue) return(S_FALSE);
+ return(SetCameraParameter(interface_type,Property,newValue,GetCameraPropertyAUTOFlag(interface_type,false)));
+}
+
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::Run()
+{
+ HRESULT hr;
+ if(FAILED(hr = mediaControl->Run())) return(hr);
+ else return(S_OK);
+}
+
+// ----------------------------------------------------------------------------------------------------------
+
+HRESULT DSVL_GraphManager::Stop(bool forcedStop)
+{
+ HRESULT hr;
+
+ if(FAILED(hr = (forcedStop ? mediaControl->Stop() : mediaControl->StopWhenReady()))) return(hr);
+ else return(S_OK);
+}
+
+// ----------------------------------------------------------------------------------------------------------
+
+HRESULT DSVL_GraphManager::Pause()
+{
+ HRESULT hr;
+ if(FAILED(hr = mediaControl->Pause())) return(hr);
+ else return(S_OK);
+}
+
+// ----------------------------------------------------------------------------------------------------------
+
+HRESULT DSVL_GraphManager::GetCurrentTimestamp(REFERENCE_TIME *Timestamp)
+{
CAutoLock cObjectLock(&m_CSec);
- *Timestamp = current_timestamp;
- return(S_OK);
-}
-
-REFERENCE_TIME DSVL_GraphManager::GetCurrentTimestamp()
-{
+ *Timestamp = current_timestamp;
+ return(S_OK);
+}
+
+REFERENCE_TIME DSVL_GraphManager::GetCurrentTimestamp()
+{
CAutoLock cObjectLock(&m_CSec);
- return(current_timestamp);
-}
-
-// ----------------------------------------------------------------------------------------------------------
-
-DWORD DSVL_GraphManager::WaitForNextSample(long dwMilliseconds)
-{
+ return(current_timestamp);
+}
+
+// ----------------------------------------------------------------------------------------------------------
+
+DWORD DSVL_GraphManager::WaitForNextSample(long dwMilliseconds)
+{
MSG uMsg;
memset(&uMsg,0,sizeof(uMsg));
bool b_ExitMainLoop = false;
-
+
do
{
DWORD dw = MsgWaitForMultipleObjectsEx(1,&m_ESync,dwMilliseconds,QS_ALLEVENTS,0);
@@ -562,38 +562,38 @@
DispatchMessage(&uMsg);
}
}
- } while(!b_ExitMainLoop);
-
+ } while(!b_ExitMainLoop);
+
return(WAIT_TIMEOUT); // ...whatever
-}
-
-
-HRESULT WINAPI DSVL_GraphManager::SampleCB(double SampleTime, IMediaSample *pSample)
-{
+}
+
+
+HRESULT WINAPI DSVL_GraphManager::SampleCB(double SampleTime, IMediaSample *pSample)
+{
CAutoLock cObjectLock(&m_CSec);
- if(mb.size() > 0) // constantly clean up (mb)
- {
- std::map<unsigned long, MemoryBufferEntry>::iterator iter = mb.begin();
- while(iter != mb.end())
- {
- if((*iter).second.use_count == 0)
- {
- (*iter).second.media_sample->Release();
- std::map<unsigned long, MemoryBufferEntry>::iterator iter2 =
- mb.erase(iter);
- iter = iter2;
- }
- else
+ if(mb.size() > 0) // constantly clean up (mb)
+ {
+ std::map<unsigned long, MemoryBufferEntry>::iterator iter = mb.begin();
+ while(iter != mb.end())
+ {
+ if((*iter).second.use_count == 0)
{
+ (*iter).second.media_sample->Release();
+ std::map<unsigned long, MemoryBufferEntry>::iterator iter2 =
+ mb.erase(iter);
+ iter = iter2;
+ }
+ else
+ {
iter++;
- }
- }
- }
-
- HRESULT hr;
- REFERENCE_TIME t_start, t_end;
- hr = pSample->GetMediaTime(&t_start,&t_end); // we just care about the start
- current_timestamp = t_start;
+ }
+ }
+ }
+
+ HRESULT hr;
+ REFERENCE_TIME t_start, t_end;
+ hr = pSample->GetMediaTime(&t_start,&t_end); // we just care about the start
+ current_timestamp = t_start;
sample_counter++;
MemoryBufferEntry mb_entry;
mb_entry.use_count = 0;
@@ -604,26 +604,26 @@
mb.insert(pair<unsigned long, MemoryBufferEntry>
(unsigned long(sample_counter),mb_entry));
-
- // flipping
- if(media_format.flipH || media_format.flipV)
- {
- BYTE *pBuffer;
- if(SUCCEEDED(pSample->GetPointer(&pBuffer)))
+
+ // flipping
+ if(media_format.flipH || media_format.flipV)
+ {
+ BYTE *pBuffer;
+ if(SUCCEEDED(pSample->GetPointer(&pBuffer)))
FlipImageRGB32(pBuffer,media_format.biWidth,media_format.biHeight,media_format.flipH,media_format.flipV);
}
- // --------
- SetEvent(m_ESync);
-
- return(S_OK);
-}
-
-HRESULT WINAPI DSVL_GraphManager::BufferCB(double sampleTimeSec, BYTE* bufferPtr, long bufferLength)
-{
- return(E_NOTIMPL);
-}
+ // --------
+ SetEvent(m_ESync);
+ return(S_OK);
+}
+HRESULT WINAPI DSVL_GraphManager::BufferCB(double sampleTimeSec, BYTE* bufferPtr, long bufferLength)
+{
+ return(E_NOTIMPL);
+}
+
+
HRESULT WINAPI DSVL_GraphManager::QueryInterface(REFIID iid, void** ppvObject )
{
// Return requested interface
@@ -660,61 +660,61 @@
}
-HRESULT DSVL_GraphManager::CheckoutMemoryBuffer(MemoryBufferHandle* pHandle,
- BYTE** Buffer,
- unsigned int *Width,
- unsigned int *Height,
- PIXELFORMAT* PixelFormat,
- REFERENCE_TIME* Timestamp)
-{
+HRESULT DSVL_GraphManager::CheckoutMemoryBuffer(MemoryBufferHandle* pHandle,
+ BYTE** Buffer,
+ unsigned int *Width,
+ unsigned int *Height,
+ PIXELFORMAT* PixelFormat,
+ REFERENCE_TIME* Timestamp)
+{
CAutoLock cObjectLock(&m_CSec);
HRESULT hr;
- std::map<unsigned long, MemoryBufferEntry>::iterator iter;
- iter = mb.find(sample_counter);
-
- if(iter == mb.end()) // i.e. (sample_counter == 0)
- return(E_INVALIDARG); // no buffer in memory
-
-
- (*iter).second.use_count++;
- if(Buffer != NULL)
- (*iter).second.media_sample->GetPointer(Buffer);
- if(Width != NULL)
- *Width = media_format.biWidth;
- if(Height != NULL)
- *Height = media_format.biHeight;
- if(PixelFormat != NULL)
- *PixelFormat = media_format.pixel_format;
- if(Timestamp != NULL)
- *Timestamp = (*iter).second.timestamp;
-
- pHandle->n = (*iter).first;
- pHandle->t = (*iter).second.timestamp;
- return(S_OK);
-}
-
-// ----------------------------------------------------------------------------------------------------------
-HRESULT DSVL_GraphManager::CheckinMemoryBuffer(MemoryBufferHandle Handle, bool ForceRelease)
-{
+ std::map<unsigned long, MemoryBufferEntry>::iterator iter;
+ iter = mb.find(sample_counter);
+
+ if(iter == mb.end()) // i.e. (sample_counter == 0)
+ return(E_INVALIDARG); // no buffer in memory
+
+
+ (*iter).second.use_count++;
+ if(Buffer != NULL)
+ (*iter).second.media_sample->GetPointer(Buffer);
+ if(Width != NULL)
+ *Width = media_format.biWidth;
+ if(Height != NULL)
+ *Height = media_format.biHeight;
+ if(PixelFormat != NULL)
+ *PixelFormat = media_format.pixel_format;
+ if(Timestamp != NULL)
+ *Timestamp = (*iter).second.timestamp;
+
+ pHandle->n = (*iter).first;
+ pHandle->t = (*iter).second.timestamp;
+ return(S_OK);
+}
+
+// ----------------------------------------------------------------------------------------------------------
+HRESULT DSVL_GraphManager::CheckinMemoryBuffer(MemoryBufferHandle Handle, bool ForceRelease)
+{
CAutoLock cObjectLock(&m_CSec);
- std::map<unsigned long, MemoryBufferEntry>::iterator iter;
- iter = mb.find(Handle.n);
- ASSERT(iter != mb.end());
+ std::map<unsigned long, MemoryBufferEntry>::iterator iter;
+ iter = mb.find(Handle.n);
+ ASSERT(iter != mb.end());
- if(ForceRelease) (*iter).second.use_count = 0;
+ if(ForceRelease) (*iter).second.use_count = 0;
else
{
if((*iter).second.use_count > 0)
(*iter).second.use_count--;
}
- return(S_OK);
-}
-
-
-HRESULT DSVL_GraphManager::ReleaseGraph()
+ return(S_OK);
+}
+
+
+HRESULT DSVL_GraphManager::ReleaseGraph()
{
CAutoLock cObjectLock(&m_CSec);
- if(!m_bGraphIsInitialized) return(E_FAIL); // call BuildGraph() first!
+ if(!m_bGraphIsInitialized) return(E_FAIL); // call BuildGraph() first!
HRESULT hr = mediaControl->Stop();
// Enumerate the filters in the graph.
@@ -754,22 +754,22 @@
mediaControl.Release();
graphBuilder.Release();
-
- if(captureGraphBuilder!=NULL) captureGraphBuilder.Release();
- if(mediaEvent!=NULL) mediaEvent.Release();
- if(mediaSeeking!=NULL) mediaSeeking.Release();
- if(cameraControl!=NULL) cameraControl.Release();
- if(droppedFrames!=NULL) droppedFrames.Release();
- if(videoControl!=NULL) videoControl.Release();
- if(videoProcAmp!=NULL) videoProcAmp.Release();
- if(sourceFilter!=NULL) sourceFilter.Release();
- if(capturePin!=NULL) capturePin.Release();
- if(decoderFilter!=NULL) decoderFilter.Release();
- if(rendererFilter!=NULL) rendererFilter.Release();
- if(grabberFilter!=NULL) grabberFilter.Release();
- if(sampleGrabber!=NULL) sampleGrabber.Release();
-
+ if(captureGraphBuilder!=NULL) captureGraphBuilder.Release();
+ if(mediaEvent!=NULL) mediaEvent.Release();
+ if(mediaSeeking!=NULL) mediaSeeking.Release();
+ if(cameraControl!=NULL) cameraControl.Release();
+ if(droppedFrames!=NULL) droppedFrames.Release();
+ if(videoControl!=NULL) videoControl.Release();
+ if(videoProcAmp!=NULL) videoProcAmp.Release();
+ if(sourceFilter!=NULL) sourceFilter.Release();
+ if(capturePin!=NULL) capturePin.Release();
+ if(decoderFilter!=NULL) decoderFilter.Release();
+ if(rendererFilter!=NULL) rendererFilter.Release();
+ if(grabberFilter!=NULL) grabberFilter.Release();
+ if(sampleGrabber!=NULL) sampleGrabber.Release();
+
+
#ifdef _DEBUG
RemoveFromRot(dwRegisterROT);
dwRegisterROT = 0;
@@ -781,101 +781,101 @@
}
-HRESULT DSVL_GraphManager::BuildGraphFromXMLString(char* xml_string)
+HRESULT DSVL_GraphManager::BuildGraphFromXMLString(char* xml_string)
{
TiXmlDocument xmlDoc;
xmlDoc.Parse(xml_string);
- if(xmlDoc.Error()) return(E_INVALIDARG);
+ if(xmlDoc.Error()) return(E_INVALIDARG);
TiXmlHandle xmlHandle(&xmlDoc);
return(BuildGraphFromXMLHandle(xmlHandle));
-}
-
-HRESULT DSVL_GraphManager::BuildGraphFromXMLFile(char* xml_filename)
+}
+
+HRESULT DSVL_GraphManager::BuildGraphFromXMLFile(char* xml_filename)
{
- TiXmlDocument xmlDoc(xml_filename);
+ TiXmlDocument xmlDoc(xml_filename);
if(!xmlDoc.LoadFile())
{
- char path[MAX_PATH];
- char* path_offset = NULL;
- if(SearchPath(NULL,_bstr_t(xml_filename),NULL,MAX_PATH,path,&path_offset) > 0)
- {
+ char path[MAX_PATH];
+ char* path_offset = NULL;
+ if(SearchPath(NULL,_bstr_t(xml_filename),NULL,MAX_PATH,path,&path_offset) > 0)
+ {
if(!xmlDoc.LoadFile(_bstr_t(path))) return(E_INVALIDARG);
}
- }
+ }
TiXmlHandle xmlHandle(&xmlDoc);
return(BuildGraphFromXMLHandle(xmlHandle));
-}
-
-
-
-
-
-HRESULT DSVL_GraphManager::BuildGraphFromXMLHandle(TiXmlHandle xml_h)
+}
+
+
+
+
+
+HRESULT DSVL_GraphManager::BuildGraphFromXMLHandle(TiXmlHandle xml_h)
{
- if(m_bGraphIsInitialized) return(E_FAIL); // call ReleaseGraph() first!
-
- DS_MEDIA_FORMAT mf = default_DS_MEDIA_FORMAT();
- mf.defaultInputFlags = false;
- mf.sourceFilterName = (LPWSTR) CoTaskMemAlloc(sizeof(wchar_t) * MAX_PATH);
- swprintf(mf.sourceFilterName, sizeof(wchar_t) * MAX_PATH,L"");
- //mf.ieee1394_id = (char*) CoTaskMemAlloc(sizeof(char) * MAX_PATH);
- //swprintf(mf.ieee1394_id, sizeof(wchar_t) * MAX_PATH,L"");
-
+ if(m_bGraphIsInitialized) return(E_FAIL); // call ReleaseGraph() first!
+
+ DS_MEDIA_FORMAT mf = default_DS_MEDIA_FORMAT();
+ mf.defaultInputFlags = false;
+ mf.sourceFilterName = (LPWSTR) CoTaskMemAlloc(sizeof(wchar_t) * MAX_PATH);
+ swprintf(mf.sourceFilterName, sizeof(wchar_t) * MAX_PATH,L"");
+ //mf.ieee1394_id = (char*) CoTaskMemAlloc(sizeof(char) * MAX_PATH);
+ //swprintf(mf.ieee1394_id, sizeof(wchar_t) * MAX_PATH,L"");
+
TiXmlHandle doc_handle(xml_h);
TiXmlElement* e_avi = doc_handle.FirstChild("dsvl_input").FirstChild("avi_file").Element();
TiXmlElement* e_camera = doc_handle.FirstChild("dsvl_input").FirstChild("camera").Element();
TiXmlElement* e_pixel_format = NULL;
- if(e_camera)
+ if(e_camera)
{
- mf.inputDevice = WDM_VIDEO_CAPTURE_FILTER;
+ mf.inputDevice = WDM_VIDEO_CAPTURE_FILTER;
- if(e_camera->Attribute("device_name") != NULL)
- {
- swprintf(mf.sourceFilterName, sizeof(wchar_t) * MAX_PATH,_bstr_t(e_camera->Attribute("device_name")));
- mf.isDeviceName = true;
+ if(e_camera->Attribute("device_name") != NULL)
+ {
+ swprintf(mf.sourceFilterName, sizeof(wchar_t) * MAX_PATH,_bstr_t(e_camera->Attribute("device_name")));
+ mf.isDeviceName = true;
mf.inputFlags |= WDM_MATCH_FILTER_NAME;
- }
- else if(e_camera->Attribute("friendly_name") != NULL)
+ }
+ else if(e_camera->Attribute("friendly_name") != NULL)
{
- swprintf(mf.sourceFilterName, sizeof(wchar_t) * MAX_PATH,_bstr_t(e_camera->Attribute("friendly_name")));
- mf.isDeviceName = false;
+ swprintf(mf.sourceFilterName, sizeof(wchar_t) * MAX_PATH,_bstr_t(e_camera->Attribute("friendly_name")));
+ mf.isDeviceName = false;
mf.inputFlags |= WDM_MATCH_FILTER_NAME;
- }
-
- if((e_camera->Attribute("show_format_dialog") != NULL) &&
- (_strnicmp("true",_bstr_t(e_camera->Attribute("show_format_dialog")),strlen("true")) == 0))
- mf.inputFlags |= WDM_SHOW_FORMAT_DIALOG;
+ }
+
+ if((e_camera->Attribute("show_format_dialog") != NULL) &&
+ (_strnicmp("true",_bstr_t(e_camera->Attribute("show_format_dialog")),strlen("true")) == 0))
+ mf.inputFlags |= WDM_SHOW_FORMAT_DIALOG;
- if(e_camera->Attribute("ieee1394id") != NULL)
- {
- mf.ieee1394_id = (char*) CoTaskMemAlloc(MAX_PATH);
- sprintf(mf.ieee1394_id, _bstr_t(e_camera->Attribute("ieee1394id")));
- mf.inputFlags |= WDM_MATCH_IEEE1394_ID;
- }
+ if(e_camera->Attribute("ieee1394id") != NULL)
+ {
+ mf.ieee1394_id = (char*) CoTaskMemAlloc(MAX_PATH);
+ sprintf(mf.ieee1394_id, _bstr_t(e_camera->Attribute("ieee1394id")));
+ mf.inputFlags |= WDM_MATCH_IEEE1394_ID;
+ }
- if(e_camera->Attribute("frame_width") != NULL)
- {
- mf.biWidth = strtol(_bstr_t(e_camera->Attribute("frame_width")),NULL,10);
- if(mf.biWidth < 0) return(E_INVALIDARG);
- mf.inputFlags |= WDM_MATCH_FORMAT;
- }
+ if(e_camera->Attribute("frame_width") != NULL)
+ {
+ mf.biWidth = strtol(_bstr_t(e_camera->Attribute("frame_width")),NULL,10);
+ if(mf.biWidth < 0) return(E_INVALIDARG);
+ mf.inputFlags |= WDM_MATCH_FORMAT;
+ }
- if(e_camera->Attribute("frame_height") != NULL)
- {
- mf.biHeight = strtol(_bstr_t(e_camera->Attribute("frame_height")),NULL,10);
- if(mf.biHeight < 0) return(E_INVALIDARG);
- mf.inputFlags |= WDM_MATCH_FORMAT;
- }
+ if(e_camera->Attribute("frame_height") != NULL)
+ {
+ mf.biHeight = strtol(_bstr_t(e_camera->Attribute("frame_height")),NULL,10);
+ if(mf.biHeight < 0) return(E_INVALIDARG);
+ mf.inputFlags |= WDM_MATCH_FORMAT;
+ }
- if(e_camera->Attribute("frame_rate") != NULL)
- {
- char* end_ptr = NULL;
- mf.frameRate = strtod(_bstr_t(e_camera->Attribute("frame_rate")),&end_ptr);
- if(mf.frameRate <= 0) return(E_INVALIDARG);
- mf.inputFlags |= WDM_MATCH_FORMAT;
- }
+ if(e_camera->Attribute("frame_rate") != NULL)
+ {
+ char* end_ptr = NULL;
+ mf.frameRate = strtod(_bstr_t(e_camera->Attribute("frame_rate")),&end_ptr);
+ if(mf.frameRate <= 0) return(E_INVALIDARG);
+ mf.inputFlags |= WDM_MATCH_FORMAT;
+ }
e_pixel_format = doc_handle.FirstChild("dsvl_input").FirstChild("camera").FirstChild("pixel_format").FirstChild().Element();
if(!e_pixel_format) return(E_INVALIDARG);
@@ -885,31 +885,31 @@
if(mf.pixel_format == PIXELFORMAT_RGB32)
{
- if((e_pixel_format->Attribute("flip_h") != NULL) &&
- (_strnicmp("true",_bstr_t(e_pixel_format->Attribute("flip_h")),strlen("true")) == 0))
+ if((e_pixel_format->Attribute("flip_h") != NULL) &&
+ (_strnicmp("true",_bstr_t(e_pixel_format->Attribute("flip_h")),strlen("true")) == 0))
media_format.flipH = true;
- if((e_pixel_format->Attribute("flip_v") != NULL) &&
- (_strnicmp("true",_bstr_t(e_pixel_format->Attribute("flip_v")),strlen("true")) == 0))
+ if((e_pixel_format->Attribute("flip_v") != NULL) &&
+ (_strnicmp("true",_bstr_t(e_pixel_format->Attribute("flip_v")),strlen("true")) == 0))
media_format.flipV = true;
}
- }
- else if(e_avi)
- {
- mf.inputDevice = ASYNC_FILE_INPUT_FILTER;
- swprintf(mf.sourceFilterName, sizeof(wchar_t) * MAX_PATH,_bstr_t(e_avi->Attribute("file_name")));
-
- if((e_avi->Attribute("use_reference_clock") != NULL) &&
- (_strnicmp("false",_bstr_t(e_avi->Attribute("use_reference_clock")),strlen("false")) == 0))
- mf.inputFlags |= ASYNC_INPUT_DO_NOT_USE_CLOCK;
-
- if((e_avi->Attribute("loop_avi") != NULL) &&
- (_strnicmp("true",_bstr_t(e_avi->Attribute("loop_avi")),strlen("true")) == 0))
- mf.inputFlags |= ASYNC_LOOP_VIDEO;
-
- if((e_avi->Attribute("render_secondary") != NULL) &&
- (_strnicmp("true",_bstr_t(e_avi->Attribute("render_secondary")),strlen("true")) == 0))
- mf.inputFlags |= ASYNC_RENDER_SECONDARY_STREAMS;
+ }
+ else if(e_avi)
+ {
+ mf.inputDevice = ASYNC_FILE_INPUT_FILTER;
+ swprintf(mf.sourceFilterName, sizeof(wchar_t) * MAX_PATH,_bstr_t(e_avi->Attribute("file_name")));
+ if((e_avi->Attribute("use_reference_clock") != NULL) &&
+ (_strnicmp("false",_bstr_t(e_avi->Attribute("use_reference_clock")),strlen("false")) == 0))
+ mf.inputFlags |= ASYNC_INPUT_DO_NOT_USE_CLOCK;
+
+ if((e_avi->Attribute("loop_avi") != NULL) &&
+ (_strnicmp("true",_bstr_t(e_avi->Attribute("loop_avi")),strlen("true")) == 0))
+ mf.inputFlags |= ASYNC_LOOP_VIDEO;
+
+ if((e_avi->Attribute("render_secondary") != NULL) &&
+ (_strnicmp("true",_bstr_t(e_avi->Attribute("render_secondary")),strlen("true")) == 0))
+ mf.inputFlags |= ASYNC_RENDER_SECONDARY_STREAMS;
+
e_pixel_format = doc_handle.FirstChild("dsvl_input").FirstChild("avi_file").FirstChild("pixel_format").FirstChild().Element();
if(!e_pixel_format) return(E_INVALIDARG);
char px_temp[MAX_PATH];
@@ -918,401 +918,401 @@
if(mf.pixel_format == PIXELFORMAT_RGB32)
{
- if((e_pixel_format->Attribute("flip_h") != NULL) &&
- (_strnicmp("true",_bstr_t(e_pixel_format->Attribute("flip_h")),strlen("true")) == 0))
+ if((e_pixel_format->Attribute("flip_h") != NULL) &&
+ (_strnicmp("true",_bstr_t(e_pixel_format->Attribute("flip_h")),strlen("true")) == 0))
media_format.flipH = true;
- if((e_pixel_format->Attribute("flip_v") != NULL) &&
- (_strnicmp("true",_bstr_t(e_pixel_format->Attribute("flip_v")),strlen("true")) == 0))
+ if((e_pixel_format->Attribute("flip_v") != NULL) &&
+ (_strnicmp("true",_bstr_t(e_pixel_format->Attribute("flip_v")),strlen("true")) == 0))
media_format.flipV = true;
}
- }
- else return(E_INVALIDARG);
-
-
- // check for mf.defaultInputFlags and set default flags if necessary
- if(mf.defaultInputFlags)
- {
- switch(mf.inputDevice)
- {
- case(WDM_VIDEO_CAPTURE_FILTER): mf.inputFlags = default_VIDEO_INPUT_FLAGS;
- break;
- case(ASYNC_FILE_INPUT_FILTER): mf.inputFlags = default_ASYNC_INPUT_FLAGS;
- break;
- default: return(E_INVALIDARG);
- break;
- };
- }
-
-
- HRESULT hr;
-
- CComPtr <IBaseFilter> pVideoSource = NULL;
- CComPtr <IBaseFilter> pStreamSplitter = NULL; // used in conjunction with the Async File Source filter
- CComPtr <IBaseFilter> pVideoDecoder = NULL; // used for changing DV resolution
- CComPtr <IBaseFilter> pVideoRenderer = NULL;
- CComPtr <IAMStreamConfig> pStreamConfig = NULL;
-
- // OT-FIX 11/22/04 [thp]
- CComPtr <IBaseFilter> pSampleGrabber = NULL;
-
- FILTER_INFO filter_info;
-
- hr = CoCreateInstance (CLSID_FilterGraph, NULL, CLSCTX_INPROC,
- IID_IGraphBuilder, (void **) &graphBuilder);
- if (FAILED(hr)) return hr;
-
-#ifdef _DEBUG
- hr = AddToRot(graphBuilder, &dwRegisterROT);
-#endif
-
- // Create the capture graph builder
- hr = CoCreateInstance (CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC,
- IID_ICaptureGraphBuilder2, (void **) &captureGraphBuilder);
- if (FAILED(hr))
- return hr;
-
-
- // OT-FIX 11/22/04 [thp]
- hr = CoCreateInstance(CLSID_NullRenderer, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&(pVideoRenderer));
- if (FAILED(hr))
- return hr;
- hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&(pSampleGrabber));
- if (FAILED(hr))
- return hr;
- if(FAILED(pSampleGrabber->QueryInterface(IID_ISampleGrabber,(void**)&sampleGrabber))) return(hr);
-
- AM_MEDIA_TYPE _mt;
- ZeroMemory(&_mt,sizeof(AM_MEDIA_TYPE));
- _mt.majortype = MEDIATYPE_Video;
- _mt.formattype = GUID_NULL;
- _mt.subtype = PXtoMEDIASUBTYPE(mf.pixel_format);
- hr = sampleGrabber->SetMediaType(&_mt);
- if (FAILED(hr))
- return hr;
-
- // Obtain interfaces for media control
- hr = graphBuilder->QueryInterface(IID_IMediaControl,(LPVOID *) &mediaControl);
- if (FAILED(hr))
- return hr;
-
- hr = graphBuilder->QueryInterface(IID_IMediaEvent, (LPVOID *) &mediaEvent);
- if (FAILED(hr))
- return hr;
-
- hr = captureGraphBuilder->SetFiltergraph(graphBuilder);
- if (FAILED(hr))
- return hr;
-
- // ###########################################################################################
- if (mf.inputDevice == WDM_VIDEO_CAPTURE_FILTER) {
- // ###########################################################################################
-
- hr = FindCaptureDevice(&pVideoSource,
- (mf.inputFlags & WDM_MATCH_FILTER_NAME ? mf.sourceFilterName : NULL),
- (mf.isDeviceName),
- (mf.inputFlags & WDM_MATCH_IEEE1394_ID ? mf.ieee1394_id : 0));
- if (FAILED(hr))
- {
- // Don't display a message because FindCaptureDevice will handle it
- return hr;
- }
-
- hr = graphBuilder->AddFilter(pVideoSource, L"Video Source");
-
- if (FAILED(hr))
- {
- AMErrorMessage(hr,"Couldn't add capture filter to graph!");
- return hr;
- }
-
- sourceFilter = pVideoSource;
- //capturePin = getPin(pVideoSource,PINDIR_OUTPUT,1);
- if(FAILED(hr = getPin(pVideoSource,PINDIR_OUTPUT,1,capturePin))) return(hr);
-
- // -------------
- hr = captureGraphBuilder->FindInterface(&PIN_CATEGORY_CAPTURE,NULL,pVideoSource,IID_IAMStreamConfig,(void**)&pStreamConfig);
- if (FAILED(hr))
- {
- AMErrorMessage(hr,"Couldn't find IAMStreamConfig interface.");
- return hr;
- }
-
- // ---------------------------------------------------------------------------------
- // Unfortunately, WDM DV Video Capture Devices (such as consumer miniDV camcorders)
- // require special handling. Since the WDM source will only offer DVRESOLUTION_FULL,
- // any changes must be made through IIPDVDec on the DV Decoder filter.
- bool pinSupportsDV = CanDeliverDV(capturePin);
-
- // ---------------------------------------------------------------------------------
- if(pinSupportsDV)
- {
- CComPtr<IIPDVDec> pDVDec;
- // insert a DV decoder (CLSID_DVVideoCodec) into our graph.
- if(FAILED(hr = CoCreateInstance(CLSID_DVVideoCodec, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&(pVideoDecoder)))) return(hr);
- decoderFilter = pVideoDecoder;
-
- hr = graphBuilder->AddFilter(pVideoDecoder, L"Video Decoder");
-
- if(mf.inputFlags & WDM_MATCH_FORMAT)
- // since we're dealing with DV, there's only a limited range of possible resolutions:
- //
- // DVDECODERRESOLUTION_720x480 (PAL: 720x576) = DVRESOLUTION_FULL
- // DVDECODERRESOLUTION_360x240 (PAL: 360x288) = DVRESOLUTION_HALF
- // DVDECODERRESOLUTION_180x120 (PAL: 180x144) = DVRESOLUTION_QUARTER
- // DVDECODERRESOLUTION_88x60 (PAL: 88x72) = DVRESOLUTION_DC
-
- {
- if(FAILED(pVideoDecoder->QueryInterface(IID_IIPDVDec,(void**)&pDVDec))) return(hr);
-
- int dvRes;
- if(FAILED(hr = pDVDec->get_IPDisplay(&dvRes))) return(hr); // get default resolution
-
- if((mf.biWidth == 720) && ((mf.biHeight == 480) || (mf.biHeight == 576))) dvRes = DVRESOLUTION_FULL;
- else if((mf.biWidth == 360) && ((mf.biHeight == 240) || (mf.biHeight == 288))) dvRes = DVRESOLUTION_HALF;
- else if((mf.biWidth == 180) && ((mf.biHeight == 120) || (mf.biHeight == 144))) dvRes = DVRESOLUTION_QUARTER;
- else if((mf.biWidth == 88) && ((mf.biHeight == 60) || (mf.biHeight == 72))) dvRes = DVRESOLUTION_DC;
-
- if(FAILED(hr = pDVDec->put_IPDisplay(dvRes))) return(hr);
- }
-
- if((mf.inputFlags & WDM_SHOW_FORMAT_DIALOG)) // displaying the DV decoder's FILTER property page amounts to
- // the same as showing the WDM capture PIN property page.
- {
- if(FAILED...
[truncated message content] |