/*
* (c) 2005, 2008 Nico Pranke <Nico.Pranke@googlemail.com>, Robin Luedtke <RobinLu@gmx.de>
*
* This file is part of avcap.
*
* avcap 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 3 of the License, or
* (at your option) any later version.
*
* avcap 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 avcap. If not, see <http://www.gnu.org/licenses/>.
*/
/* avcap is free for non-commercial use.
* To use it in commercial endeavors, please contact Nico Pranke <Nico.Pranke@googlemail.com>.
*/
#ifndef SAMPLEGRABBER_H_
#define SAMPLEGRABBER_H_
#include "QEdit.h"
#include "IOBuffer.h"
#include "avcap-export.h"
namespace avcap
{
class DS_VidCapManager;
//! Data capture handler for DirectShow devices.
/*! Each time new data arrives, the method
* SampleCB() is called and delivers the data to the video capture
* manager set by the SetVideoCaptureManager() method.*/
class AVCAP_Export SampleGrabberCallback : public ISampleGrabberCB
{
private:
DS_VidCapManager* mVidCapMngr;
ISampleGrabber* mSampleGrabberFilter;
HANDLE& mLock;
public:
SampleGrabberCallback(HANDLE& lock);
~SampleGrabberCallback();
/*! Sets the video capture manager.
* New data will be delivered to the video capture manager.
* \param vidCapManager The video capture manager. */
void SetVideoCaptureManager(DS_VidCapManager *vidCapManager);
/*! Sets the samplegrabber filter.
* Needed to get some information (e.g. currently used format).
* \param SampleGrabberFilter The samplegrabber filter. */
void SetSampleGrabberFilter(ISampleGrabber *SampleGrabberFilter);
/* Fake referance counting - This is safe because the application
* creates the object on the stack, and the object remains in scope
* throughout the lifetime of the filter graph.*/
STDMETHODIMP_(ULONG) AddRef()
{ return 1; }
STDMETHODIMP_(ULONG) Release()
{ return 2; }
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);
/*! New data (captured data) arrives here and will be
* delivered to the video capture manager set
* by the SetVideoCaptureManager() method. */
STDMETHODIMP SampleCB(double Time, IMediaSample *pSample);
STDMETHODIMP BufferCB(double Time, BYTE *pBuffer, long BufferLen);
friend class IOBuffer;
};
}
#endif // SAMPLEGRABBER_H_