/usr/include/visp/vpDirectShowGrabberImpl.h is in libvisp-dev 2.9.0-3+b2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | /****************************************************************************
*
* $Id: vpDirectShowGrabberImpl.h 4574 2014-01-09 08:48:51Z fspindle $
*
* This file is part of the ViSP software.
* Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
*
* This software is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* ("GPL") version 2 as published by the Free Software Foundation.
* See the file LICENSE.txt at the root directory of this source
* distribution for additional information about the GNU GPL.
*
* For using ViSP with software that can not be combined with the GNU
* GPL, please contact INRIA about acquiring a ViSP Professional
* Edition License.
*
* See http://www.irisa.fr/lagadic/visp/visp.html for more information.
*
* This software was developed at:
* INRIA Rennes - Bretagne Atlantique
* Campus Universitaire de Beaulieu
* 35042 Rennes Cedex
* France
* http://www.irisa.fr/lagadic
*
* If you have questions regarding the use of this file, please contact
* INRIA at visp@inria.fr
*
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
*
* Description:
* DirectShow framegrabber Implementation.
*
* Authors:
* Bruno Renier
* Anthony Saunier
*
*****************************************************************************/
#ifndef vpDirectShowGrabberImpl_hh
#define vpDirectShowGrabberImpl_hh
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#include <visp/vpConfig.h>
#if ( defined(VISP_HAVE_DIRECTSHOW) )
#include <atlbase.h>
#include <qedit.h>
#include <dshow.h>
#include <visp/vpFrameGrabber.h>
#include <visp/vpFrameGrabberException.h>
#include <visp/vpDirectShowSampleGrabberI.h>
#include <visp/vpDirectShowDevice.h>
#include <visp/vpDebug.h>
/*!
\class vpDirectShowGrabberImpl
\brief class for windows direct show devices - implementation
\ingroup libdevice
This class uses CComPtr which is the best way to be sure that all the interfaces
are released sooner or later.
*/
class VISP_EXPORT vpDirectShowGrabberImpl : public vpFrameGrabber
{
static const int MAX_DELAY = 10000;
static const int MAX_DEVICES = 10;
public:
/*!
Enumeration of video subtypes.
*/
/*
typedef enum {
//Known RGB formats
vpMEDIASUBTYPE_ARGB32 = MEDIASUBTYPE_ARGB32,
vpMEDIASUBTYPE_RGB32 = MEDIASUBTYPE_RGB32,
vpMEDIASUBTYPE_RGB24 = MEDIASUBTYPE_RGB24,
vpMEDIASUBTYPE_RGB555 = MEDIASUBTYPE_RGB555,
vpMEDIASUBTYPE_RGB565 = MEDIASUBTYPE_RGB565,
vpMEDIASUBTYPE_RGB8 = MEDIASUBTYPE_RGB8,
vpMEDIASUBTYPE_RGB4 = MEDIASUBTYPE_RGB4,
vpMEDIASUBTYPE_RGB1 = MEDIASUBTYPE_RGB1,
//Known YUV formats
vpMEDIASUBTYPE_AYUV = MEDIASUBTYPE_AYUV,
vpMEDIASUBTYPE_UYVY = MEDIASUBTYPE_UYVY,
vpMEDIASUBTYPE_Y411 = MEDIASUBTYPE_Y411,
vpMEDIASUBTYPE_Y41P = MEDIASUBTYPE_Y41P,
vpMEDIASUBTYPE_Y211 = MEDIASUBTYPE_Y211,
vpMEDIASUBTYPE_YUY2 = MEDIASUBTYPE_YUY2,
vpMEDIASUBTYPE_YVYU = MEDIASUBTYPE_YVYU,
vpMEDIASUBTYPE_YUYV = MEDIASUBTYPE_YUYV,
vpMEDIASUBTYPE_IF09 = MEDIASUBTYPE_IF09,
vpMEDIASUBTYPE_IYUV = MEDIASUBTYPE_IYUV,
vpMEDIASUBTYPE_YV12 = MEDIASUBTYPE_YV12,
vpMEDIASUBTYPE_YVU9 = MEDIASUBTYPE_YVU9
} vpDirectShowMediaSubtype;
*/
vpDirectShowGrabberImpl();
virtual ~vpDirectShowGrabberImpl();
void open();
void open(vpImage<unsigned char> &I);
void open(vpImage<vpRGBa> &I);
void acquire(vpImage<unsigned char> &I);
void acquire(vpImage<vpRGBa> &I);
void close();
/*!
Gets the number of capture devices
*/
unsigned int getDeviceNumber() {return nbDevices;}
//change the capture device
bool setDevice(unsigned int id);
//displays a list of available devices
void displayDevices();
//set image size
bool setImageSize(unsigned int width,unsigned int height);
//set capture framerate
bool setFramerate(double framerate);
//set capture format
bool setFormat(unsigned int width,unsigned int height, double framerate);
//get capture format
void getFormat(unsigned int &width,unsigned int &height, double &framerate);
//set capture MediaType
bool setMediaType(int mediaTypeID);
//get current capture MediaType
int getMediaType();
//Get the available capture formats
bool getStreamCapabilities();
private:
CComPtr<IGraphBuilder> pGraph; //our DS filter graph
CComPtr<ICaptureGraphBuilder2> pBuild; //the interface to the capture graph builder
//used to build the filter graph
CComPtr<IBaseFilter> pCapSource; //the capture source filter
CComPtr<ISampleGrabber> pGrabberI; //the sample grabber's interface and filter
CComPtr<IBaseFilter> pGrabberFilter;
CComPtr<IMediaControl> pControl; //The DS filter graph control interface
CComPtr<IMediaEvent> pEvent; //The DS filter graph event interface
vpDirectShowSampleGrabberI sgCB; //Interface used to implement the frame grabber callback
HRESULT hr; //contains the result of the last operation
static vpDirectShowDevice * deviceList; //This contains the list of the available capture devices
//it is shared by all the DirectShow Grabbers
static unsigned int nbDevices; //the number of available devices
int currentDevice; //the number of the current device
// flag to manage CoInitialize() and CoUnInitialze()
bool initCo ;
//setup the directshow filtergraph with the first available device
bool initDirectShow();
//enumerates the different video inputs
bool enumerate(CComPtr<IEnumMoniker>& ppVideoInputEnum);
//selects a random video input from the enumeration and returns the associated filter
bool selectRandomSource(CComPtr<IEnumMoniker>& ppVideoInputEnum, CComPtr<IBaseFilter>& pCapSource);
//creates the filter graph
bool createGraph();
//creates the sample grabber
bool createSampleGrabber(CComPtr<IBaseFilter>& ppGrabberFilter);
//checks the capture filter's media type and sets flags as needed
bool checkSourceType(CComPtr<IPin>& pCapSourcePin);
//connects the filters as needed
bool connectSourceToGrabber(CComPtr<IBaseFilter>& pCapSource, CComPtr<IBaseFilter>& pGrabberFilter);
//used to convert HRESULT-associated error message to a string
void HRtoStr(std::string str);
//create the list of the available devices
bool createDeviceList(CComPtr<IEnumMoniker>& ppVideoInputEnum);
//get the n-th device if it is available
bool getDevice(unsigned int n, CComPtr<IBaseFilter>& ppCapSource);
//get the first available device if any
unsigned int getFirstUnusedDevice(CComPtr<IBaseFilter>& ppDevice);
//removes all the filters in the graph
bool removeAll();
//Deletes an allocated AM_MEDIA_TYPE structure, including the format block
void MyDeleteMediaType(AM_MEDIA_TYPE *pmt);
//Frees the format block in an AM_MEDIA_TYPE structure
void MyFreeMediaType(AM_MEDIA_TYPE& mt);
};
#endif
#endif
#endif
|