From ec93d103b72cb9437cce11e1b93a1522c710d70d Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Wed, 1 Oct 2014 14:45:34 +0200 Subject: [PATCH] Refactored code responsible for printing debug messages in DShow video capture module to reduce footprint in Release mode. Replace printf function used for diagnostic purposes with dedicated DebugPrintOut function to output debug messages. This function is effective only in Debug mode and its body becomes empty in Release mode to reduce footprint. --- modules/videoio/src/cap_dshow.cpp | 236 ++++++++++++++++-------------- 1 file changed, 129 insertions(+), 107 deletions(-) diff --git a/modules/videoio/src/cap_dshow.cpp b/modules/videoio/src/cap_dshow.cpp index 33325e7cc..39ef4e6c3 100644 --- a/modules/videoio/src/cap_dshow.cpp +++ b/modules/videoio/src/cap_dshow.cpp @@ -336,8 +336,33 @@ interface ISampleGrabber : public IUnknown //STUFF YOU CAN CHANGE +#ifdef _DEBUG + //change for verbose debug info -static bool verbose = true; +static bool gs_verbose = true; + +static void DebugPrintOut(const char *format, ...) +{ + if (gs_verbose) + { + va_list args; + va_start(args, format); + if( ::IsDebuggerPresent() ) + { + CHAR szMsg[512]; + ::StringCbVPrintfA(szMsg, sizeof(szMsg), format, args); + ::OutputDebugStringA(szMsg); + } + else + { + vprintf(format, args); + } + va_end (args); + } +} +#else +#define DebugPrintOut(...) void() +#endif //if you need VI to use multi threaded com //#define VI_COM_MULTI_THREADED @@ -697,7 +722,7 @@ public: LeaveCriticalSection(&critSection); SetEvent(hEvent); }else{ - printf("ERROR: SampleCB() - buffer sizes do not match\n"); + DebugPrintOut("ERROR: SampleCB() - buffer sizes do not match\n"); } } @@ -785,7 +810,7 @@ videoDevice::videoDevice(){ void videoDevice::setSize(int w, int h){ if(sizeSet){ - if(verbose)printf("SETUP: Error device size should not be set more than once \n"); + DebugPrintOut("SETUP: Error device size should not be set more than once\n"); } else { @@ -863,7 +888,7 @@ void videoDevice::destroyGraph(){ // We must get the enumerator again every time because removing a filter from the graph // invalidates the enumerator. We always get only the first filter from each enumerator. hr = pGraph->EnumFilters(&pEnum); - if (FAILED(hr)) { if(verbose)printf("SETUP: pGraph->EnumFilters() failed. \n"); return; } + if (FAILED(hr)) { DebugPrintOut("SETUP: pGraph->EnumFilters() failed.\n"); return; } IBaseFilter * pFilter = NULL; if (pEnum->Next(1, &pFilter, &cFetched) == S_OK) @@ -883,10 +908,10 @@ void videoDevice::destroyGraph(){ count++; } - if(verbose)printf("SETUP: removing filter %s...\n", buffer); + DebugPrintOut("SETUP: removing filter %s...\n", buffer); hr = pGraph->RemoveFilter(pFilter); - if (FAILED(hr)) { if(verbose)printf("SETUP: pGraph->RemoveFilter() failed. \n"); return; } - if(verbose)printf("SETUP: filter removed %s \n",buffer); + if (FAILED(hr)) { DebugPrintOut("SETUP: pGraph->RemoveFilter() failed.\n"); return; } + DebugPrintOut("SETUP: filter removed %s\n",buffer); pFilter->Release(); pFilter = NULL; @@ -909,7 +934,7 @@ void videoDevice::destroyGraph(){ videoDevice::~videoDevice(){ - if(setupStarted){ if(verbose)printf("\nSETUP: Disconnecting device %i\n", myID); } + if(setupStarted){ DebugPrintOut("\nSETUP: Disconnecting device %i\n", myID); } else{ if(sgCallback){ sgCallback->Release(); @@ -924,7 +949,7 @@ videoDevice::~videoDevice(){ if( (sgCallback) && (pGrabber) ) { pGrabber->SetCallback(NULL, 1); - if(verbose)printf("SETUP: freeing Grabber Callback\n"); + DebugPrintOut("SETUP: freeing Grabber Callback\n"); sgCallback->Release(); //delete our pixels @@ -940,51 +965,51 @@ videoDevice::~videoDevice(){ if( (pControl) ) { HR = pControl->Pause(); - if (FAILED(HR)) if(verbose)printf("ERROR - Could not pause pControl\n"); + if (FAILED(HR)) DebugPrintOut("ERROR - Could not pause pControl\n"); HR = pControl->Stop(); - if (FAILED(HR)) if(verbose)printf("ERROR - Could not stop pControl\n"); + if (FAILED(HR)) DebugPrintOut("ERROR - Could not stop pControl\n"); } //Disconnect filters from capture device if( (pVideoInputFilter) )NukeDownstream(pVideoInputFilter); //Release and zero pointers to our filters etc - if( (pDestFilter) ){ if(verbose)printf("SETUP: freeing Renderer \n"); + if( (pDestFilter) ){ DebugPrintOut("SETUP: freeing Renderer\n"); (pDestFilter)->Release(); (pDestFilter) = 0; } - if( (pVideoInputFilter) ){ if(verbose)printf("SETUP: freeing Capture Source \n"); + if( (pVideoInputFilter) ){ DebugPrintOut("SETUP: freeing Capture Source\n"); (pVideoInputFilter)->Release(); (pVideoInputFilter) = 0; } - if( (pGrabberF) ){ if(verbose)printf("SETUP: freeing Grabber Filter \n"); + if( (pGrabberF) ){ DebugPrintOut("SETUP: freeing Grabber Filter\n"); (pGrabberF)->Release(); (pGrabberF) = 0; } - if( (pGrabber) ){ if(verbose)printf("SETUP: freeing Grabber \n"); + if( (pGrabber) ){ DebugPrintOut("SETUP: freeing Grabber\n"); (pGrabber)->Release(); (pGrabber) = 0; } - if( (pControl) ){ if(verbose)printf("SETUP: freeing Control \n"); + if( (pControl) ){ DebugPrintOut("SETUP: freeing Control\n"); (pControl)->Release(); (pControl) = 0; } - if( (pMediaEvent) ){ if(verbose)printf("SETUP: freeing Media Event \n"); + if( (pMediaEvent) ){ DebugPrintOut("SETUP: freeing Media Event\n"); (pMediaEvent)->Release(); (pMediaEvent) = 0; } - if( (streamConf) ){ if(verbose)printf("SETUP: freeing Stream \n"); + if( (streamConf) ){ DebugPrintOut("SETUP: freeing Stream\n"); (streamConf)->Release(); (streamConf) = 0; } - if( (pAmMediaType) ){ if(verbose)printf("SETUP: freeing Media Type \n"); + if( (pAmMediaType) ){ DebugPrintOut("SETUP: freeing Media Type\n"); MyDeleteMediaType(pAmMediaType); } if((pMediaEvent)){ - if(verbose)printf("SETUP: freeing Media Event \n"); + DebugPrintOut("SETUP: freeing Media Event\n"); (pMediaEvent)->Release(); (pMediaEvent) = 0; } @@ -993,11 +1018,11 @@ videoDevice::~videoDevice(){ if( (pGraph) )destroyGraph(); //Release and zero our capture graph and our main graph - if( (pCaptureGraph) ){ if(verbose)printf("SETUP: freeing Capture Graph \n"); + if( (pCaptureGraph) ){ DebugPrintOut("SETUP: freeing Capture Graph\n"); (pCaptureGraph)->Release(); (pCaptureGraph) = 0; } - if( (pGraph) ){ if(verbose)printf("SETUP: freeing Main Graph \n"); + if( (pGraph) ){ DebugPrintOut("SETUP: freeing Main Graph\n"); (pGraph)->Release(); (pGraph) = 0; } @@ -1013,7 +1038,7 @@ videoDevice::~videoDevice(){ delete pCaptureGraph; delete pGraph; - if(verbose)printf("SETUP: Device %i disconnected and freed\n\n",myID); + DebugPrintOut("SETUP: Device %i disconnected and freed\n\n",myID); } @@ -1037,7 +1062,7 @@ videoInput::videoInput(){ //setup a max no of device objects for(int i=0; ipVideoInputFilter)VDList[deviceNumber]->pVideoInputFilter = NULL; if(FAILED(hr)){ - printf("SETUP: couldn't set requested format\n"); + DebugPrintOut("SETUP: couldn't set requested format\n"); }else{ long lValue = 0; hr = pVideoDec->get_AvailableTVFormats(&lValue); @@ -1264,7 +1293,7 @@ bool videoInput::setFormat(int deviceNumber, int format){ { hr = pVideoDec->put_TVFormat(VDList[deviceNumber]->formatType); if( FAILED(hr) ){ - printf("SETUP: couldn't set requested format\n"); + DebugPrintOut("SETUP: couldn't set requested format\n"); }else{ returnVal = true; } @@ -1304,7 +1333,7 @@ int videoInput::listDevices(bool silent){ //COM Library Intialization comInit(); - if(!silent)printf("\nVIDEOINPUT SPY MODE!\n\n"); + if(!silent) DebugPrintOut("\nVIDEOINPUT SPY MODE!\n\n"); ICreateDevEnum *pDevEnum = NULL; @@ -1325,7 +1354,7 @@ int videoInput::listDevices(bool silent){ if(hr == S_OK){ - if(!silent)printf("SETUP: Looking For Capture Devices\n"); + if(!silent) DebugPrintOut("SETUP: Looking For Capture Devices\n"); IMoniker *pMoniker = NULL; while (pEnum->Next(1, &pMoniker, NULL) == S_OK){ @@ -1359,7 +1388,7 @@ int videoInput::listDevices(bool silent){ } deviceNames[deviceCounter][count] = 0; - if(!silent)printf("SETUP: %i) %s \n",deviceCounter, deviceNames[deviceCounter]); + if(!silent) DebugPrintOut("SETUP: %i) %s\n",deviceCounter, deviceNames[deviceCounter]); } pPropBag->Release(); @@ -1378,7 +1407,7 @@ int videoInput::listDevices(bool silent){ pEnum = NULL; } - if(!silent)printf("SETUP: %i Device(s) found\n\n", deviceCounter); + if(!silent) DebugPrintOut("SETUP: %i Device(s) found\n\n", deviceCounter); } comUnInit(); @@ -1516,10 +1545,10 @@ bool videoInput::getPixels(int id, unsigned char * dstBuffer, bool flipRedAndBlu processPixels(src, dst, width, height, flipRedAndBlue, flipImage); success = true; }else{ - if(verbose)printf("ERROR: GetPixels() - bufferSizes do not match!\n"); + DebugPrintOut("ERROR: GetPixels() - bufferSizes do not match!\n"); } }else{ - if(verbose)printf("ERROR: GetPixels() - Unable to grab frame for device %i\n", id); + DebugPrintOut("ERROR: GetPixels() - Unable to grab frame for device %i\n", id); } } } @@ -1571,11 +1600,11 @@ bool videoInput::isFrameNew(int id){ VDList[id]->nFramesRunning++; if(freeze && VDList[id]->autoReconnect){ - if(verbose)printf("ERROR: Device seems frozen - attempting to reconnect\n"); + DebugPrintOut("ERROR: Device seems frozen - attempting to reconnect\n"); if( !restartDevice(VDList[id]->myID) ){ - if(verbose)printf("ERROR: Unable to reconnect to device\n"); + DebugPrintOut("ERROR: Unable to reconnect to device\n"); }else{ - if(verbose)printf("SUCCESS: Able to reconnect to device\n"); + DebugPrintOut("SUCCESS: Able to reconnect to device\n"); } } @@ -1646,7 +1675,7 @@ bool videoInput::getVideoSettingFilter(int deviceID, long Property, long &min, l hr = getDevice(&VD->pVideoInputFilter, deviceID, VD->wDeviceName, VD->nDeviceName); if (FAILED(hr)){ - printf("setVideoSetting - getDevice Error\n"); + DebugPrintOut("setVideoSetting - getDevice Error\n"); return false; } @@ -1654,7 +1683,7 @@ bool videoInput::getVideoSettingFilter(int deviceID, long Property, long &min, l hr = VD->pVideoInputFilter->QueryInterface(IID_IAMVideoProcAmp, (void**)&pAMVideoProcAmp); if(FAILED(hr)){ - printf("setVideoSetting - QueryInterface Error\n"); + DebugPrintOut("setVideoSetting - QueryInterface Error\n"); if(VD->pVideoInputFilter)VD->pVideoInputFilter->Release(); if(VD->pVideoInputFilter)VD->pVideoInputFilter = NULL; return false; @@ -1663,10 +1692,10 @@ bool videoInput::getVideoSettingFilter(int deviceID, long Property, long &min, l char propStr[16]; getVideoPropertyAsString(Property,propStr); - if (verbose) printf("Setting video setting %s.\n", propStr); + DebugPrintOut("Setting video setting %s.\n", propStr); pAMVideoProcAmp->GetRange(Property, &min, &max, &SteppingDelta, &defaultValue, &flags); - if (verbose) printf("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, min, max, SteppingDelta, defaultValue, flags); + DebugPrintOut("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, min, max, SteppingDelta, defaultValue, flags); pAMVideoProcAmp->Get(Property, ¤tValue, &flags); if(pAMVideoProcAmp)pAMVideoProcAmp->Release(); @@ -1707,7 +1736,7 @@ bool videoInput::setVideoSettingFilterPct(int deviceID, long Property, float pct float halfStep = (float)stepAmnt * 0.5f; if( mod < halfStep ) rasterValue -= mod; else rasterValue += stepAmnt - mod; - printf("RASTER - pctValue is %f - value is %li - step is %li - mod is %li - rasterValue is %li\n", pctValue, value, stepAmnt, mod, rasterValue); + DebugPrintOut("RASTER - pctValue is %f - value is %li - step is %li - mod is %li - rasterValue is %li\n", pctValue, value, stepAmnt, mod, rasterValue); } return setVideoSettingFilter(deviceID, Property, rasterValue, Flags, false); @@ -1728,7 +1757,7 @@ bool videoInput::setVideoSettingFilter(int deviceID, long Property, long lValue, hr = getDevice(&VD->pVideoInputFilter, deviceID, VD->wDeviceName, VD->nDeviceName); if (FAILED(hr)){ - printf("setVideoSetting - getDevice Error\n"); + DebugPrintOut("setVideoSetting - getDevice Error\n"); return false; } @@ -1736,21 +1765,21 @@ bool videoInput::setVideoSettingFilter(int deviceID, long Property, long lValue, hr = VD->pVideoInputFilter->QueryInterface(IID_IAMVideoProcAmp, (void**)&pAMVideoProcAmp); if(FAILED(hr)){ - printf("setVideoSetting - QueryInterface Error\n"); + DebugPrintOut("setVideoSetting - QueryInterface Error\n"); if(VD->pVideoInputFilter)VD->pVideoInputFilter->Release(); if(VD->pVideoInputFilter)VD->pVideoInputFilter = NULL; return false; } - if (verbose) printf("Setting video setting %s.\n", propStr); + DebugPrintOut("Setting video setting %s.\n", propStr); long CurrVal, Min, Max, SteppingDelta, Default, CapsFlags, AvailableCapsFlags = 0; pAMVideoProcAmp->GetRange(Property, &Min, &Max, &SteppingDelta, &Default, &AvailableCapsFlags); - if (verbose) printf("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, Min, Max, SteppingDelta, Default, AvailableCapsFlags); + DebugPrintOut("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, Min, Max, SteppingDelta, Default, AvailableCapsFlags); pAMVideoProcAmp->Get(Property, &CurrVal, &CapsFlags); - if (verbose) printf("Current value: %ld Flags %ld (%s)\n", CurrVal, CapsFlags, (CapsFlags == 1 ? "Auto" : (CapsFlags == 2 ? "Manual" : "Unknown"))); + DebugPrintOut("Current value: %ld Flags %ld (%s)\n", CurrVal, CapsFlags, (CapsFlags == 1 ? "Auto" : (CapsFlags == 2 ? "Manual" : "Unknown"))); if (useDefaultValue) { pAMVideoProcAmp->Set(Property, Default, VideoProcAmp_Flags_Auto); @@ -1797,7 +1826,7 @@ bool videoInput::setVideoSettingCameraPct(int deviceID, long Property, float pct float halfStep = (float)stepAmnt * 0.5f; if( mod < halfStep ) rasterValue -= mod; else rasterValue += stepAmnt - mod; - printf("RASTER - pctValue is %f - value is %li - step is %li - mod is %li - rasterValue is %li\n", pctValue, value, stepAmnt, mod, rasterValue); + DebugPrintOut("RASTER - pctValue is %f - value is %li - step is %li - mod is %li - rasterValue is %li\n", pctValue, value, stepAmnt, mod, rasterValue); } return setVideoSettingCamera(deviceID, Property, rasterValue, Flags, false); @@ -1814,19 +1843,19 @@ bool videoInput::setVideoSettingCamera(int deviceID, long Property, long lValue, char propStr[16]; getCameraPropertyAsString(Property,propStr); - if (verbose) printf("Setting video setting %s.\n", propStr); + DebugPrintOut("Setting video setting %s.\n", propStr); hr = VDList[deviceID]->pVideoInputFilter->QueryInterface(IID_IAMCameraControl, (void**)&pIAMCameraControl); if (FAILED(hr)) { - printf("Error\n"); + DebugPrintOut("Error\n"); return false; } else { long CurrVal, Min, Max, SteppingDelta, Default, CapsFlags, AvailableCapsFlags; pIAMCameraControl->GetRange(Property, &Min, &Max, &SteppingDelta, &Default, &AvailableCapsFlags); - if (verbose) printf("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, Min, Max, SteppingDelta, Default, AvailableCapsFlags); + DebugPrintOut("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, Min, Max, SteppingDelta, Default, AvailableCapsFlags); pIAMCameraControl->Get(Property, &CurrVal, &CapsFlags); - if (verbose) printf("Current value: %ld Flags %ld (%s)\n", CurrVal, CapsFlags, (CapsFlags == 1 ? "Auto" : (CapsFlags == 2 ? "Manual" : "Unknown"))); + DebugPrintOut("Current value: %ld Flags %ld (%s)\n", CurrVal, CapsFlags, (CapsFlags == 1 ? "Auto" : (CapsFlags == 2 ? "Manual" : "Unknown"))); if (useDefaultValue) { pIAMCameraControl->Set(Property, Default, CameraControl_Flags_Auto); } @@ -1854,7 +1883,7 @@ bool videoInput::getVideoSettingCamera(int deviceID, long Property, long &min, l hr = getDevice(&VD->pVideoInputFilter, deviceID, VD->wDeviceName, VD->nDeviceName); if (FAILED(hr)){ - printf("setVideoSetting - getDevice Error\n"); + DebugPrintOut("setVideoSetting - getDevice Error\n"); return false; } @@ -1862,7 +1891,7 @@ bool videoInput::getVideoSettingCamera(int deviceID, long Property, long &min, l hr = VD->pVideoInputFilter->QueryInterface(IID_IAMCameraControl, (void**)&pIAMCameraControl); if(FAILED(hr)){ - printf("setVideoSetting - QueryInterface Error\n"); + DebugPrintOut("setVideoSetting - QueryInterface Error\n"); if(VD->pVideoInputFilter)VD->pVideoInputFilter->Release(); if(VD->pVideoInputFilter)VD->pVideoInputFilter = NULL; return false; @@ -1870,10 +1899,10 @@ bool videoInput::getVideoSettingCamera(int deviceID, long Property, long &min, l char propStr[16]; getCameraPropertyAsString(Property,propStr); - if (verbose) printf("Setting video setting %s.\n", propStr); + DebugPrintOut("Setting video setting %s.\n", propStr); pIAMCameraControl->GetRange(Property, &min, &max, &SteppingDelta, &defaultValue, &flags); - if (verbose) printf("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, min, max, SteppingDelta, defaultValue, flags); + DebugPrintOut("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, min, max, SteppingDelta, defaultValue, flags); pIAMCameraControl->Get(Property, ¤tValue, &flags); if(pIAMCameraControl)pIAMCameraControl->Release(); @@ -1981,7 +2010,7 @@ bool videoInput::comInit(){ //if another library has started com as single threaded //and we need it multi-threaded - send warning but don't fail if( hr == RPC_E_CHANGED_MODE){ - if(verbose)printf("SETUP - COM already setup - threaded VI might not be possible\n"); + DebugPrintOut("SETUP - COM already setup - threaded VI might not be possible\n"); } } @@ -2066,14 +2095,14 @@ bool videoInput::setup(int deviceNumber){ if(deviceNumber>devicesFound-1) { - if(verbose)printf("SETUP: device[%i] not found - you have %i devices available\n", deviceNumber, devicesFound); - if(devicesFound>=0) if(verbose)printf("SETUP: this means that the last device you can use is device[%i] \n", devicesFound-1); + DebugPrintOut("SETUP: device[%i] not found - you have %i devices available\n", deviceNumber, devicesFound); + if(devicesFound>=0) DebugPrintOut("SETUP: this means that the last device you can use is device[%i]\n", devicesFound-1); return false; } if(VDList[deviceNumber]->readyToCapture) { - if(verbose)printf("SETUP: can't setup, device %i is currently being used\n",VDList[deviceNumber]->myID); + DebugPrintOut("SETUP: can't setup, device %i is currently being used\n",VDList[deviceNumber]->myID); return false; } @@ -2329,8 +2358,8 @@ static void findClosestSizeAndSubtype(videoDevice * VD, int widthIn, int heightI //Don't want to get stuck in a loop if(stepX < 1 || stepY < 1) continue; - //if(verbose)printf("min is %i %i max is %i %i - res is %i %i \n", scc.MinOutputSize.cx, scc.MinOutputSize.cy, scc.MaxOutputSize.cx, scc.MaxOutputSize.cy, stepX, stepY); - //if(verbose)printf("min frame duration is %i max duration is %i\n", scc.MinFrameInterval, scc.MaxFrameInterval); + //DebugPrintOut("min is %i %i max is %i %i - res is %i %i\n", scc.MinOutputSize.cx, scc.MinOutputSize.cy, scc.MaxOutputSize.cx, scc.MaxOutputSize.cy, stepX, stepY); + //DebugPrintOut("min frame duration is %i max duration is %i\n", scc.MinFrameInterval, scc.MaxFrameInterval); bool exactMatch = false; bool exactMatchX = false; @@ -2457,14 +2486,14 @@ int videoInput::start(int deviceID, videoDevice *VD){ CAPTURE_MODE = PIN_CATEGORY_CAPTURE; //Don't worry - it ends up being preview (which is faster) callbackSetCount = 1; //make sure callback method is not changed after setup called - if(verbose)printf("SETUP: Setting up device %i\n",deviceID); + DebugPrintOut("SETUP: Setting up device %i\n",deviceID); // CREATE THE GRAPH BUILDER // // Create the filter graph manager and query for interfaces. hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void **)&VD->pCaptureGraph); if (FAILED(hr)) // FAILED is a macro that tests the return value { - if(verbose)printf("ERROR - Could not create the Filter Graph Manager\n"); + DebugPrintOut("ERROR - Could not create the Filter Graph Manager\n"); return hr; } @@ -2473,7 +2502,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER,IID_IGraphBuilder, (void**)&VD->pGraph); if (FAILED(hr)) { - if(verbose)printf("ERROR - Could not add the graph builder!\n"); + DebugPrintOut("ERROR - Could not add the graph builder!\n"); stopDevice(deviceID); return hr; } @@ -2482,7 +2511,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ hr = VD->pCaptureGraph->SetFiltergraph(VD->pGraph); if (FAILED(hr)) { - if(verbose)printf("ERROR - Could not set filtergraph\n"); + DebugPrintOut("ERROR - Could not set filtergraph\n"); stopDevice(deviceID); return hr; } @@ -2493,8 +2522,8 @@ int videoInput::start(int deviceID, videoDevice *VD){ hr = VD->pGraph->QueryInterface(IID_IMediaControl, (void **)&VD->pControl); if (FAILED(hr)) { - if(verbose)printf("ERROR - Could not create the Media Control object\n"); - stopDevice(deviceID); + DebugPrintOut("ERROR - Could not create the Media Control object\n"); + stopDevice(deviceID); return hr; } @@ -2504,10 +2533,10 @@ int videoInput::start(int deviceID, videoDevice *VD){ hr = getDevice(&VD->pVideoInputFilter, deviceID, VD->wDeviceName, VD->nDeviceName); if (SUCCEEDED(hr)){ - if(verbose)printf("SETUP: %s\n", VD->nDeviceName); + DebugPrintOut("SETUP: %s\n", VD->nDeviceName); hr = VD->pGraph->AddFilter(VD->pVideoInputFilter, VD->wDeviceName); }else{ - if(verbose)printf("ERROR - Could not find specified video device\n"); + DebugPrintOut("ERROR - Could not find specified video device\n"); stopDevice(deviceID); return hr; } @@ -2516,7 +2545,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ IAMStreamConfig *streamConfTest = NULL; hr = VD->pCaptureGraph->FindInterface(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, VD->pVideoInputFilter, IID_IAMStreamConfig, (void **)&streamConfTest); if(FAILED(hr)){ - if(verbose)printf("SETUP: Couldn't find preview pin using SmartTee\n"); + DebugPrintOut("SETUP: Couldn't find preview pin using SmartTee\n"); }else{ CAPTURE_MODE = PIN_CATEGORY_PREVIEW; streamConfTest->Release(); @@ -2528,7 +2557,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ //webcams tend not to have a crossbar so this function will also detect a webcams and not apply the crossbar if(VD->useCrossbar) { - if(verbose)printf("SETUP: Checking crossbar\n"); + DebugPrintOut("SETUP: Checking crossbar\n"); routeCrossbar(&VD->pCaptureGraph, &VD->pVideoInputFilter, VD->connection, CAPTURE_MODE); } @@ -2536,7 +2565,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ //we do this because webcams don't have a preview mode hr = VD->pCaptureGraph->FindInterface(&CAPTURE_MODE, &MEDIATYPE_Video, VD->pVideoInputFilter, IID_IAMStreamConfig, (void **)&VD->streamConf); if(FAILED(hr)){ - if(verbose)printf("ERROR: Couldn't config the stream!\n"); + DebugPrintOut("ERROR: Couldn't config the stream!\n"); stopDevice(deviceID); return hr; } @@ -2544,7 +2573,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ //NOW LETS DEAL WITH GETTING THE RIGHT SIZE hr = VD->streamConf->GetFormat(&VD->pAmMediaType); if(FAILED(hr)){ - if(verbose)printf("ERROR: Couldn't getFormat for pAmMediaType!\n"); + DebugPrintOut("ERROR: Couldn't getFormat for pAmMediaType!\n"); stopDevice(deviceID); return hr; } @@ -2558,12 +2587,12 @@ int videoInput::start(int deviceID, videoDevice *VD){ bool foundSize = false; if(customSize){ - if(verbose) printf("SETUP: Default Format is set to %i by %i \n", currentWidth, currentHeight); + DebugPrintOut("SETUP: Default Format is set to %ix%i\n", currentWidth, currentHeight); char guidStr[8]; // try specified format and size getMediaSubtypeAsString(VD->tryVideoType, guidStr); - if(verbose)printf("SETUP: trying specified format %s @ %i by %i\n", guidStr, VD->tryWidth, VD->tryHeight); + DebugPrintOut("SETUP: trying specified format %s @ %ix%i\n", guidStr, VD->tryWidth, VD->tryHeight); if( setSizeAndSubtype(VD, VD->tryWidth, VD->tryHeight, VD->tryVideoType) ){ VD->setSize(VD->tryWidth, VD->tryHeight); @@ -2575,7 +2604,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ getMediaSubtypeAsString(mediaSubtypes[i], guidStr); - if(verbose)printf("SETUP: trying format %s @ %i by %i\n", guidStr, VD->tryWidth, VD->tryHeight); + DebugPrintOut("SETUP: trying format %s @ %ix%i\n", guidStr, VD->tryWidth, VD->tryHeight); if( setSizeAndSubtype(VD, VD->tryWidth, VD->tryHeight, mediaSubtypes[i]) ){ VD->setSize(VD->tryWidth, VD->tryHeight); VD->videoType = mediaSubtypes[i]; @@ -2588,7 +2617,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ //if we didn't find the requested size - lets try and find the closest matching size if( foundSize == false ){ - if( verbose )printf("SETUP: couldn't find requested size - searching for closest matching size\n"); + DebugPrintOut("SETUP: couldn't find requested size - searching for closest matching size\n"); int closestWidth = -1; int closestHeight = -1; @@ -2599,7 +2628,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ if( closestWidth != -1 && closestHeight != -1){ getMediaSubtypeAsString(newMediaSubtype, guidStr); - if(verbose)printf("SETUP: closest supported size is %s @ %i %i\n", guidStr, closestWidth, closestHeight); + DebugPrintOut("SETUP: closest supported size is %s @ %i %i\n", guidStr, closestWidth, closestHeight); if( setSizeAndSubtype(VD, closestWidth, closestHeight, newMediaSubtype) ){ VD->setSize(closestWidth, closestHeight); foundSize = true; @@ -2621,21 +2650,21 @@ int videoInput::start(int deviceID, videoDevice *VD){ // Create the Sample Grabber. hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER,IID_IBaseFilter, (void**)&VD->pGrabberF); if (FAILED(hr)){ - if(verbose)printf("Could not Create Sample Grabber - CoCreateInstance()\n"); + DebugPrintOut("Could not Create Sample Grabber - CoCreateInstance()\n"); stopDevice(deviceID); return hr; } hr = VD->pGraph->AddFilter(VD->pGrabberF, L"Sample Grabber"); if (FAILED(hr)){ - if(verbose)printf("Could not add Sample Grabber - AddFilter()\n"); + DebugPrintOut("Could not add Sample Grabber - AddFilter()\n"); stopDevice(deviceID); return hr; } hr = VD->pGrabberF->QueryInterface(IID_ISampleGrabber, (void**)&VD->pGrabber); if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not query SampleGrabber\n"); + DebugPrintOut("ERROR: Could not query SampleGrabber\n"); stopDevice(deviceID); return hr; } @@ -2654,11 +2683,11 @@ int videoInput::start(int deviceID, videoDevice *VD){ //We use SampleCB hr = VD->pGrabber->SetCallback(VD->sgCallback, 0); if (FAILED(hr)){ - if(verbose)printf("ERROR: problem setting callback\n"); + DebugPrintOut("ERROR: problem setting callback\n"); stopDevice(deviceID); return hr; }else{ - if(verbose)printf("SETUP: Capture callback set\n"); + DebugPrintOut("SETUP: Capture callback set\n"); } } @@ -2681,7 +2710,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ VD->streamConf->Release(); VD->streamConf = NULL; }else{ - if(verbose)printf("ERROR: connecting device - prehaps it is already being used?\n"); + DebugPrintOut("ERROR: connecting device - prehaps it is already being used?\n"); stopDevice(deviceID); return S_FALSE; } @@ -2691,14 +2720,14 @@ int videoInput::start(int deviceID, videoDevice *VD){ //used to give the video stream somewhere to go to. hr = CoCreateInstance(CLSID_NullRenderer, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)(&VD->pDestFilter)); if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not create filter - NullRenderer\n"); + DebugPrintOut("ERROR: Could not create filter - NullRenderer\n"); stopDevice(deviceID); return hr; } hr = VD->pGraph->AddFilter(VD->pDestFilter, L"NullRenderer"); if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not add filter - NullRenderer\n"); + DebugPrintOut("ERROR: Could not add filter - NullRenderer\n"); stopDevice(deviceID); return hr; } @@ -2708,7 +2737,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ hr = VD->pCaptureGraph->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, VD->pVideoInputFilter, VD->pGrabberF, VD->pDestFilter); if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not connect pins - RenderStream()\n"); + DebugPrintOut("ERROR: Could not connect pins - RenderStream()\n"); stopDevice(deviceID); return hr; } @@ -2719,7 +2748,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ IMediaFilter *pMediaFilter = 0; hr = VD->pGraph->QueryInterface(IID_IMediaFilter, (void**)&pMediaFilter); if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not get IID_IMediaFilter interface\n"); + DebugPrintOut("ERROR: Could not get IID_IMediaFilter interface\n"); }else{ pMediaFilter->SetSyncSource(NULL); pMediaFilter->Release(); @@ -2731,7 +2760,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ hr = VD->pControl->Run(); if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not start graph\n"); + DebugPrintOut("ERROR: Could not start graph\n"); stopDevice(deviceID); return hr; } @@ -2749,7 +2778,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ } - if(verbose)printf("SETUP: Device is setup and ready to capture.\n\n"); + DebugPrintOut("SETUP: Device is setup and ready to capture.\n\n"); VD->readyToCapture = true; //Release filters - seen someone else do this @@ -3026,7 +3055,7 @@ HRESULT videoInput::routeCrossbar(ICaptureGraphBuilder2 **ppBuild, IBaseFilter * bool foundDevice = false; - if(verbose)printf("SETUP: You are not a webcam! Setting Crossbar\n"); + DebugPrintOut("SETUP: You are not a webcam! Setting Crossbar\n"); pXBar1->Release(); IAMCrossbar *Crossbar; @@ -3046,24 +3075,24 @@ HRESULT videoInput::routeCrossbar(ICaptureGraphBuilder2 **ppBuild, IBaseFilter * hr = Crossbar->get_CrossbarPinInfo( iPin , pIndex , &pRIndex , &pType); if( pType == conType){ - if(verbose)printf("SETUP: Found Physical Interface"); + DebugPrintOut("SETUP: Found Physical Interface"); switch(conType){ case PhysConn_Video_Composite: - if(verbose)printf(" - Composite\n"); + DebugPrintOut(" - Composite\n"); break; case PhysConn_Video_SVideo: - if(verbose)printf(" - S-Video\n"); + DebugPrintOut(" - S-Video\n"); break; case PhysConn_Video_Tuner: - if(verbose)printf(" - Tuner\n"); + DebugPrintOut(" - Tuner\n"); break; case PhysConn_Video_USB: - if(verbose)printf(" - USB\n"); + DebugPrintOut(" - USB\n"); break; case PhysConn_Video_1394: - if(verbose)printf(" - Firewire\n"); + DebugPrintOut(" - Firewire\n"); break; } @@ -3084,7 +3113,7 @@ HRESULT videoInput::routeCrossbar(ICaptureGraphBuilder2 **ppBuild, IBaseFilter * } Crossbar->Route(pOIndex,pIndex); }else{ - if(verbose) printf("SETUP: Didn't find specified Physical Connection type. Using Defualt. \n"); + DebugPrintOut("SETUP: Didn't find specified Physical Connection type. Using Defualt.\n"); } //we only free the crossbar when we close or restart the device @@ -3096,20 +3125,13 @@ HRESULT videoInput::routeCrossbar(ICaptureGraphBuilder2 **ppBuild, IBaseFilter * if(pXBar1)pXBar1 = NULL; }else{ - if(verbose) printf("SETUP: You are a webcam or snazzy firewire cam! No Crossbar needed\n"); + DebugPrintOut("SETUP: You are a webcam or snazzy firewire cam! No Crossbar needed\n"); return hr; } return hr; } -struct SuppressVideoInputMessages -{ - SuppressVideoInputMessages() { videoInput::setVerbose(false); } -}; - -static SuppressVideoInputMessages do_it; - namespace cv { videoInput VideoCapture_DShow::g_VI;