UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
SampleGrabberCallback Class Reference
Inheritance diagram for SampleGrabberCallback:
Inheritance graph
Collaboration diagram for SampleGrabberCallback:
Collaboration graph

Public Member Functions

 SampleGrabberCallback (struct vidcap_dshow_state *s, unsigned long *frameNumber)
 
 ~SampleGrabberCallback ()
 
STDMETHODIMP BufferCB (double sampleTime, BYTE *buffer, long len)
 
STDMETHODIMP QueryInterface (REFIID iface, void **pointer)
 
STDMETHODIMP SampleCB (double sampleTime, IMediaSample *ms)
 
 STDMETHODIMP_ (unsigned long) AddRef()
 
 STDMETHODIMP_ (unsigned long) Release()
 

Public Attributes

unsigned long * frameNumber
 
struct vidcap_dshow_state * s
 

Detailed Description

Definition at line 113 of file DirectShowGrabber.cpp.

Constructor & Destructor Documentation

◆ SampleGrabberCallback()

SampleGrabberCallback::SampleGrabberCallback ( struct vidcap_dshow_state * s,
unsigned long * frameNumber )
inline

Definition at line 131 of file DirectShowGrabber.cpp.

131 :
133 s(s)
134 {
135 if (frameNumber != NULL) *frameNumber = 0;
136 }
struct vidcap_dshow_state * s

References frameNumber.

◆ ~SampleGrabberCallback()

SampleGrabberCallback::~SampleGrabberCallback ( )
inline

Definition at line 137 of file DirectShowGrabber.cpp.

137{}

Member Function Documentation

◆ BufferCB()

STDMETHODIMP SampleGrabberCallback::BufferCB ( double sampleTime,
BYTE * buffer,
long len )
inline

Definition at line 146 of file DirectShowGrabber.cpp.

146 {
147 UNUSED(sampleTime);
148
149 if (len <= 0) return S_OK;
150
151 EnterCriticalSection(&s->returnBufferCS);
152 const long req_len = vc_get_datalen(
154 if (s->grabBufferLen != req_len) {
155 s->grabBuffer = (BYTE *) realloc((void *) s->grabBuffer, req_len);
156 if (s->grabBuffer == NULL) {
157 s->grabBufferLen = 0;
158 return S_OK;
159 }
161 }
162
163 // We need to make a copy, DirectShow will do something with the data
164 if (s->convert != nullptr) {
165 s->convert(s->desc.width, s->desc.height, buffer, s->grabBuffer);
166 } else {
167 memcpy((char *) s->grabBuffer, (char *) buffer, len);
168 }
169
170 bool grabMightWait = false;
171 if (!s->haveNewReturnBuffer) {
172 grabMightWait = true;
173 s->haveNewReturnBuffer = true;
174 }
175 LeaveCriticalSection(&s->returnBufferCS);
176 if (grabMightWait) {
177 LOG(LOG_LEVEL_DEBUG) << MOD_NAME << "WakeConditionVariable s->grabWaitCV\n";
178 WakeConditionVariable(&s->grabWaitCV);
179 }
180
181 return S_OK;
182 }
#define MOD_NAME
#define UNUSED(x)
int void size_t * len
unsigned char BYTE
Definition crypt_aes.h:71
#define LOG(level)
Definition debug.h:313
#define LOG_LEVEL_DEBUG
Definition kernels.cu:48
CONDITION_VARIABLE grabWaitCV
struct video_desc desc
CRITICAL_SECTION returnBufferCS
codec_t color_spec
Definition types.h:182
unsigned int width
width of every tile (!)
Definition types.h:179
unsigned int height
height of every tile (!)
Definition types.h:180
size_t vc_get_datalen(unsigned int width, unsigned int height, codec_t codec)

References video_desc::color_spec, vidcap_dshow_state::convert, vidcap_dshow_state::desc, vidcap_dshow_state::grabBuffer, vidcap_dshow_state::grabBufferLen, vidcap_dshow_state::grabWaitCV, vidcap_dshow_state::haveNewReturnBuffer, video_desc::height, len, LOG, LOG_LEVEL_DEBUG, MOD_NAME, vidcap_dshow_state::returnBufferCS, s, UNUSED, vc_get_datalen(), and video_desc::width.

Here is the call graph for this function:

◆ QueryInterface()

STDMETHODIMP SampleGrabberCallback::QueryInterface ( REFIID iface,
void ** pointer )
inline

Definition at line 121 of file DirectShowGrabber.cpp.

121 {
122 if (pointer == NULL) return E_POINTER;
123 if (iface == IID_IUnknown || iface == IID_ISampleGrabberCB) {
124 (*pointer) = this;
125 return S_OK;
126 }
127 *pointer = NULL;
128 return E_NOINTERFACE;
129 }

◆ SampleCB()

STDMETHODIMP SampleGrabberCallback::SampleCB ( double sampleTime,
IMediaSample * ms )
inline

Definition at line 139 of file DirectShowGrabber.cpp.

139 {
140 UNUSED(sampleTime);
141 UNUSED(ms);
142
143 return S_OK;
144 }

References UNUSED.

◆ STDMETHODIMP_() [1/2]

SampleGrabberCallback::STDMETHODIMP_ ( unsigned long )
inline

Definition at line 119 of file DirectShowGrabber.cpp.

119{ return 2; }

◆ STDMETHODIMP_() [2/2]

SampleGrabberCallback::STDMETHODIMP_ ( unsigned long )
inline

Definition at line 120 of file DirectShowGrabber.cpp.

120{ return 1; }

Member Data Documentation

◆ frameNumber

unsigned long* SampleGrabberCallback::frameNumber

Definition at line 115 of file DirectShowGrabber.cpp.

Referenced by SampleGrabberCallback().

◆ s

struct vidcap_dshow_state* SampleGrabberCallback::s

Definition at line 116 of file DirectShowGrabber.cpp.

Referenced by BufferCB().


The documentation for this class was generated from the following file: