1 #include "SampleGrabberCallback.hh"
4 #include <Base/Debug/Debug.hh>
15 CallbackFunction_ = NULL;
24 #ifdef BIAS_HAVE_DSHOW
26 BufferCB(
double SampleTime, BYTE *pBuffer,
long BufferLen)
38 SampleCB(
double SampleTime, IMediaSample *pSample)
52 if(SampleTrigger_ || !TargetBuffer_){
return S_OK;}
54 unsigned char *TargetBuffer = TargetBuffer_;
55 unsigned int TargetSize = TargetSize_;
58 pSample->GetPointer(&pSampleData);
59 unsigned bytesperline = Width_ * 3;
60 BYTE *pSampleDataLine = pSampleData;
61 BYTE *pFlipTarget = TargetBuffer + (Height_-1)* bytesperline;
62 unsigned bytewidth = Width_*3;
64 for(
unsigned y=0; y<Height_; y++)
66 for(
unsigned x=0; x<bytewidth; x+=3)
68 *(pFlipTarget+x) = pSampleDataLine[x+2];
69 *(pFlipTarget+x+1) = pSampleDataLine[x+1];
70 *(pFlipTarget+x+2) = pSampleDataLine[x];
72 pSampleDataLine+=bytesperline;
73 pFlipTarget -=bytesperline;
76 SampleTrigger_ =
true;
77 if (CallbackFunction_){
78 (*CallbackFunction_)(SampleTime);
88 if( riid == IID_ISampleGrabberCB || riid == IID_IUnknown ) {
89 *ppv = (
void *) static_cast<ISampleGrabberCB*> (
this );
100 SampleTrigger_ =
false;
107 while (!SampleTrigger_) {Sleep(200/1000);}
114 return SampleTrigger_;
void SampleTriggerWait()
waits until one frame ist grabbed.
STDMETHODIMP BufferCB(double SampleTime, BYTE *pBuffer, long BufferLen)
bool SampleTriggered()
returns trigger state use this if you want to wait for the sample trigger on your own...
STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
void SampleTriggerArm()
resets internal trigger call this before grabbing a frame or the internal trigger can't signal that t...
void SetTargetBuffer(unsigned char *TargetBuffer, unsigned int size, unsigned width, unsigned height)
STDMETHODIMP SampleCB(double SampleTime, IMediaSample *pSample)