FFmpeg
dshow_capture.h
Go to the documentation of this file.
1 /*
2  * DirectShow capture interface
3  * Copyright (c) 2010 Ramiro Polla
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #ifndef AVDEVICE_DSHOW_CAPTURE_H
23 #define AVDEVICE_DSHOW_CAPTURE_H
24 
25 #define DSHOWDEBUG 0
26 
27 #include "avdevice.h"
28 
29 #define COBJMACROS
30 #define WIN32_LEAN_AND_MEAN
31 #include <windows.h>
32 #define NO_DSHOW_STRSAFE
33 #include <dshow.h>
34 #include <dvdmedia.h>
35 
36 #include "libavcodec/internal.h"
37 
38 /* EC_DEVICE_LOST is not defined in MinGW dshow headers. */
39 #ifndef EC_DEVICE_LOST
40 #define EC_DEVICE_LOST 0x1f
41 #endif
42 
43 long ff_copy_dshow_media_type(AM_MEDIA_TYPE *dst, const AM_MEDIA_TYPE *src);
44 void ff_print_VIDEO_STREAM_CONFIG_CAPS(const VIDEO_STREAM_CONFIG_CAPS *caps);
45 void ff_print_AUDIO_STREAM_CONFIG_CAPS(const AUDIO_STREAM_CONFIG_CAPS *caps);
46 void ff_print_AM_MEDIA_TYPE(const AM_MEDIA_TYPE *type);
47 void ff_printGUID(const GUID *g);
48 
50 #define dshowdebug(...) ff_dlog(&ff_dshow_context_class_ptr, __VA_ARGS__)
51 
52 static inline void nothing(void *foo)
53 {
54 }
55 
56 struct GUIDoffset {
57  const GUID *iid;
58  int offset;
59 };
60 
64 };
65 
69 };
70 
71 #define DECLARE_QUERYINTERFACE(class, ...) \
72 long WINAPI \
73 class##_QueryInterface(class *this, const GUID *riid, void **ppvObject) \
74 { \
75  struct GUIDoffset ifaces[] = __VA_ARGS__; \
76  int i; \
77  dshowdebug(AV_STRINGIFY(class)"_QueryInterface(%p, %p, %p)\n", this, riid, ppvObject); \
78  ff_printGUID(riid); \
79  if (!ppvObject) \
80  return E_POINTER; \
81  for (i = 0; i < sizeof(ifaces)/sizeof(ifaces[0]); i++) { \
82  if (IsEqualGUID(riid, ifaces[i].iid)) { \
83  void *obj = (void *) ((uint8_t *) this + ifaces[i].offset); \
84  class##_AddRef(this); \
85  dshowdebug("\tfound %d with offset %d\n", i, ifaces[i].offset); \
86  *ppvObject = (void *) obj; \
87  return S_OK; \
88  } \
89  } \
90  dshowdebug("\tE_NOINTERFACE\n"); \
91  *ppvObject = NULL; \
92  return E_NOINTERFACE; \
93 }
94 #define DECLARE_ADDREF(class) \
95 unsigned long WINAPI \
96 class##_AddRef(class *this) \
97 { \
98  dshowdebug(AV_STRINGIFY(class)"_AddRef(%p)\t%ld\n", this, this->ref+1); \
99  return InterlockedIncrement(&this->ref); \
100 }
101 #define DECLARE_RELEASE(class) \
102 unsigned long WINAPI \
103 class##_Release(class *this) \
104 { \
105  long ref = InterlockedDecrement(&this->ref); \
106  dshowdebug(AV_STRINGIFY(class)"_Release(%p)\t%ld\n", this, ref); \
107  if (!ref) \
108  class##_Destroy(this); \
109  return ref; \
110 }
111 
112 #define DECLARE_DESTROY(class, func) \
113 void class##_Destroy(class *this) \
114 { \
115  dshowdebug(AV_STRINGIFY(class)"_Destroy(%p)\n", this); \
116  func(this); \
117  if (this) { \
118  if (this->vtbl) \
119  CoTaskMemFree(this->vtbl); \
120  CoTaskMemFree(this); \
121  } \
122 }
123 #define DECLARE_CREATE(class, setup, ...) \
124 class *class##_Create(__VA_ARGS__) \
125 { \
126  class *this = CoTaskMemAlloc(sizeof(class)); \
127  void *vtbl = CoTaskMemAlloc(sizeof(*this->vtbl)); \
128  dshowdebug(AV_STRINGIFY(class)"_Create(%p)\n", this); \
129  if (!this || !vtbl) \
130  goto fail; \
131  ZeroMemory(this, sizeof(class)); \
132  ZeroMemory(vtbl, sizeof(*this->vtbl)); \
133  this->ref = 1; \
134  this->vtbl = vtbl; \
135  if (!setup) \
136  goto fail; \
137  dshowdebug("created "AV_STRINGIFY(class)" %p\n", this); \
138  return this; \
139 fail: \
140  class##_Destroy(this); \
141  dshowdebug("could not create "AV_STRINGIFY(class)"\n"); \
142  return NULL; \
143 }
144 
145 #define SETVTBL(vtbl, class, fn) \
146  do { (vtbl)->fn = (void *) class##_##fn; } while(0)
147 
148 /*****************************************************************************
149  * Forward Declarations
150  ****************************************************************************/
151 typedef struct libAVPin libAVPin;
153 typedef struct libAVEnumPins libAVEnumPins;
155 typedef struct libAVFilter libAVFilter;
156 
157 /*****************************************************************************
158  * libAVPin
159  ****************************************************************************/
160 struct libAVPin {
161  IPinVtbl *vtbl;
162  long ref;
164  IPin *connectedto;
165  AM_MEDIA_TYPE type;
166  IMemInputPinVtbl *imemvtbl;
167 };
168 
169 long WINAPI libAVPin_QueryInterface (libAVPin *, const GUID *, void **);
170 unsigned long WINAPI libAVPin_AddRef (libAVPin *);
171 unsigned long WINAPI libAVPin_Release (libAVPin *);
172 long WINAPI libAVPin_Connect (libAVPin *, IPin *, const AM_MEDIA_TYPE *);
173 long WINAPI libAVPin_ReceiveConnection (libAVPin *, IPin *, const AM_MEDIA_TYPE *);
174 long WINAPI libAVPin_Disconnect (libAVPin *);
175 long WINAPI libAVPin_ConnectedTo (libAVPin *, IPin **);
176 long WINAPI libAVPin_ConnectionMediaType (libAVPin *, AM_MEDIA_TYPE *);
177 long WINAPI libAVPin_QueryPinInfo (libAVPin *, PIN_INFO *);
178 long WINAPI libAVPin_QueryDirection (libAVPin *, PIN_DIRECTION *);
179 long WINAPI libAVPin_QueryId (libAVPin *, wchar_t **);
180 long WINAPI libAVPin_QueryAccept (libAVPin *, const AM_MEDIA_TYPE *);
181 long WINAPI libAVPin_EnumMediaTypes (libAVPin *, IEnumMediaTypes **);
182 long WINAPI libAVPin_QueryInternalConnections(libAVPin *, IPin **, unsigned long *);
183 long WINAPI libAVPin_EndOfStream (libAVPin *);
184 long WINAPI libAVPin_BeginFlush (libAVPin *);
185 long WINAPI libAVPin_EndFlush (libAVPin *);
186 long WINAPI libAVPin_NewSegment (libAVPin *, REFERENCE_TIME, REFERENCE_TIME, double);
187 
188 long WINAPI libAVMemInputPin_QueryInterface (libAVMemInputPin *, const GUID *, void **);
189 unsigned long WINAPI libAVMemInputPin_AddRef (libAVMemInputPin *);
190 unsigned long WINAPI libAVMemInputPin_Release (libAVMemInputPin *);
191 long WINAPI libAVMemInputPin_GetAllocator (libAVMemInputPin *, IMemAllocator **);
192 long WINAPI libAVMemInputPin_NotifyAllocator (libAVMemInputPin *, IMemAllocator *, BOOL);
193 long WINAPI libAVMemInputPin_GetAllocatorRequirements(libAVMemInputPin *, ALLOCATOR_PROPERTIES *);
194 long WINAPI libAVMemInputPin_Receive (libAVMemInputPin *, IMediaSample *);
195 long WINAPI libAVMemInputPin_ReceiveMultiple (libAVMemInputPin *, IMediaSample **, long, long *);
197 
198 void libAVPin_Destroy(libAVPin *);
200 
202 
203 /*****************************************************************************
204  * libAVEnumPins
205  ****************************************************************************/
207  IEnumPinsVtbl *vtbl;
208  long ref;
209  int pos;
212 };
213 
214 long WINAPI libAVEnumPins_QueryInterface(libAVEnumPins *, const GUID *, void **);
215 unsigned long WINAPI libAVEnumPins_AddRef (libAVEnumPins *);
216 unsigned long WINAPI libAVEnumPins_Release (libAVEnumPins *);
217 long WINAPI libAVEnumPins_Next (libAVEnumPins *, unsigned long, IPin **, unsigned long *);
218 long WINAPI libAVEnumPins_Skip (libAVEnumPins *, unsigned long);
219 long WINAPI libAVEnumPins_Reset (libAVEnumPins *);
221 
224 
225 /*****************************************************************************
226  * libAVEnumMediaTypes
227  ****************************************************************************/
229  IEnumMediaTypesVtbl *vtbl;
230  long ref;
231  int pos;
232  AM_MEDIA_TYPE type;
233 };
234 
235 long WINAPI libAVEnumMediaTypes_QueryInterface(libAVEnumMediaTypes *, const GUID *, void **);
236 unsigned long WINAPI libAVEnumMediaTypes_AddRef (libAVEnumMediaTypes *);
237 unsigned long WINAPI libAVEnumMediaTypes_Release (libAVEnumMediaTypes *);
238 long WINAPI libAVEnumMediaTypes_Next (libAVEnumMediaTypes *, unsigned long, AM_MEDIA_TYPE **, unsigned long *);
239 long WINAPI libAVEnumMediaTypes_Skip (libAVEnumMediaTypes *, unsigned long);
242 
245 
246 /*****************************************************************************
247  * libAVFilter
248  ****************************************************************************/
249 struct libAVFilter {
250  IBaseFilterVtbl *vtbl;
251  long ref;
252  const wchar_t *name;
254  FILTER_INFO info;
255  FILTER_STATE state;
256  IReferenceClock *clock;
258  void *priv_data;
260  int64_t start_time;
261  void (*callback)(void *priv_data, int index, uint8_t *buf, int buf_size, int64_t time, enum dshowDeviceType type);
262 };
263 
264 long WINAPI libAVFilter_QueryInterface (libAVFilter *, const GUID *, void **);
265 unsigned long WINAPI libAVFilter_AddRef (libAVFilter *);
266 unsigned long WINAPI libAVFilter_Release (libAVFilter *);
267 long WINAPI libAVFilter_GetClassID (libAVFilter *, CLSID *);
268 long WINAPI libAVFilter_Stop (libAVFilter *);
269 long WINAPI libAVFilter_Pause (libAVFilter *);
270 long WINAPI libAVFilter_Run (libAVFilter *, REFERENCE_TIME);
271 long WINAPI libAVFilter_GetState (libAVFilter *, DWORD, FILTER_STATE *);
272 long WINAPI libAVFilter_SetSyncSource (libAVFilter *, IReferenceClock *);
273 long WINAPI libAVFilter_GetSyncSource (libAVFilter *, IReferenceClock **);
274 long WINAPI libAVFilter_EnumPins (libAVFilter *, IEnumPins **);
275 long WINAPI libAVFilter_FindPin (libAVFilter *, const wchar_t *, IPin **);
276 long WINAPI libAVFilter_QueryFilterInfo(libAVFilter *, FILTER_INFO *);
277 long WINAPI libAVFilter_JoinFilterGraph(libAVFilter *, IFilterGraph *, const wchar_t *);
278 long WINAPI libAVFilter_QueryVendorInfo(libAVFilter *, wchar_t **);
279 
281 libAVFilter *libAVFilter_Create (void *, void *, enum dshowDeviceType);
282 
283 /*****************************************************************************
284  * dshow_ctx
285  ****************************************************************************/
286 struct dshow_ctx {
287  const AVClass *class;
288 
289  IGraphBuilder *graph;
290 
291  char *device_name[2];
292  char *device_unique_name[2];
293 
296 
298  int list_devices;
314 
315  IBaseFilter *device_filter[2];
316  IPin *device_pin[2];
319 
321  HANDLE event[2]; /* event[0] is set by DirectShow
322  * event[1] is set by callback() */
324 
325  int eof;
326 
327  int64_t curbufsize[2];
328  unsigned int video_frame_num;
329 
330  IMediaControl *control;
331  IMediaEvent *media_event;
332 
335  char *framerate;
336 
338  int requested_height;
340 
342  int sample_size;
343  int channels;
344 };
345 
346 /*****************************************************************************
347  * CrossBar
348  ****************************************************************************/
349 HRESULT dshow_try_setup_crossbar_options(ICaptureGraphBuilder2 *graph_builder2,
350  IBaseFilter *device_filter, enum dshowDeviceType devtype, AVFormatContext *avctx);
351 
352 void dshow_show_filter_properties(IBaseFilter *pFilter, AVFormatContext *avctx);
353 
354 #endif /* AVDEVICE_DSHOW_CAPTURE_H */
libAVFilter_QueryInterface
long WINAPI libAVFilter_QueryInterface(libAVFilter *, const GUID *, void **)
libAVEnumPins::pos
int pos
Definition: dshow_capture.h:211
ff_printGUID
void ff_printGUID(const GUID *g)
Definition: dshow_common.c:42
libAVEnumMediaTypes::ref
long ref
Definition: dshow_capture.h:232
dshow_ctx::video_codec_id
enum AVCodecID video_codec_id
Definition: dshow_capture.h:336
dshow_ctx::show_audio_crossbar_connection_dialog
int show_audio_crossbar_connection_dialog
Definition: dshow_capture.h:309
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
dshow_ctx::list_devices
int list_devices
Definition: dshow_capture.h:300
libAVPin::connectedto
IPin * connectedto
Definition: dshow_capture.h:166
nothing
static void nothing(void *foo)
Definition: dshow_capture.h:52
dshow_ctx::requested_width
int requested_width
Definition: dshow_capture.h:339
libAVFilter_GetState
long WINAPI libAVFilter_GetState(libAVFilter *, DWORD, FILTER_STATE *)
Definition: dshow_filter.c:59
VideoDevice
@ VideoDevice
Definition: dshow_capture.h:62
dshow_ctx::media_event
IMediaEvent * media_event
Definition: dshow_capture.h:333
libAVFilter::pin
libAVPin * pin
Definition: dshow_capture.h:255
libAVPin_AddRef
unsigned long WINAPI libAVPin_AddRef(libAVPin *)
dshow_ctx::video_filter_save_file
char * video_filter_save_file
Definition: dshow_capture.h:315
libAVEnumMediaTypes::vtbl
IEnumMediaTypesVtbl * vtbl
Definition: dshow_capture.h:231
dshow_ctx::video_frame_num
unsigned int video_frame_num
Definition: dshow_capture.h:330
libAVMemInputPin
struct libAVMemInputPin libAVMemInputPin
Definition: dshow_capture.h:152
ff_print_VIDEO_STREAM_CONFIG_CAPS
void ff_print_VIDEO_STREAM_CONFIG_CAPS(const VIDEO_STREAM_CONFIG_CAPS *caps)
Definition: dshow_common.c:85
dshow_ctx::pktl
AVPacketList * pktl
Definition: dshow_capture.h:325
libAVPin_QueryPinInfo
long WINAPI libAVPin_QueryPinInfo(libAVPin *, PIN_INFO *)
Definition: dshow_pin.c:108
libAVPin_EndOfStream
long WINAPI libAVPin_EndOfStream(libAVPin *)
Definition: dshow_pin.c:175
internal.h
libAVFilter_FindPin
long WINAPI libAVFilter_FindPin(libAVFilter *, const wchar_t *, IPin **)
Definition: dshow_filter.c:111
libAVPin::ref
long ref
Definition: dshow_capture.h:164
libAVPin_EnumMediaTypes
long WINAPI libAVPin_EnumMediaTypes(libAVPin *, IEnumMediaTypes **)
Definition: dshow_pin.c:152
libAVEnumMediaTypes_Create
libAVEnumMediaTypes * libAVEnumMediaTypes_Create(const AM_MEDIA_TYPE *type)
HANDLE
PVOID HANDLE
Definition: basicDataTypeConversions.h:21
dshow_ctx::graph
IGraphBuilder * graph
Definition: dshow_capture.h:291
filter
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
Definition: filter_design.txt:228
libAVFilter_Destroy
void libAVFilter_Destroy(libAVFilter *)
dshow_ctx::device_filter
IBaseFilter * device_filter[2]
Definition: dshow_capture.h:317
libAVFilter::clock
IReferenceClock * clock
Definition: dshow_capture.h:258
libAVFilter_EnumPins
long WINAPI libAVFilter_EnumPins(libAVFilter *, IEnumPins **)
Definition: dshow_filter.c:96
libAVEnumPins::pin
libAVPin * pin
Definition: dshow_capture.h:212
dshow_ctx::video_filter_load_file
char * video_filter_load_file
Definition: dshow_capture.h:314
libAVPin_Destroy
void libAVPin_Destroy(libAVPin *)
libAVFilter_GetSyncSource
long WINAPI libAVFilter_GetSyncSource(libAVFilter *, IReferenceClock **)
Definition: dshow_filter.c:83
libAVEnumPins::ref
long ref
Definition: dshow_capture.h:210
libAVEnumMediaTypes_Release
unsigned long WINAPI libAVEnumMediaTypes_Release(libAVEnumMediaTypes *)
libAVPin_QueryId
long WINAPI libAVPin_QueryId(libAVPin *, wchar_t **)
Definition: dshow_pin.c:134
dshow_ctx::audio_device_number
int audio_device_number
Definition: dshow_capture.h:297
libAVEnumPins_Release
unsigned long WINAPI libAVEnumPins_Release(libAVEnumPins *)
libAVFilter::type
enum dshowDeviceType type
Definition: dshow_capture.h:259
libAVMemInputPin_Receive
long WINAPI libAVMemInputPin_Receive(libAVMemInputPin *, IMediaSample *)
Definition: dshow_pin.c:313
libAVEnumMediaTypes_Next
long WINAPI libAVEnumMediaTypes_Next(libAVEnumMediaTypes *, unsigned long, AM_MEDIA_TYPE **, unsigned long *)
libAVEnumMediaTypes_Destroy
void libAVEnumMediaTypes_Destroy(libAVEnumMediaTypes *)
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
libAVPin::vtbl
IPinVtbl * vtbl
Definition: dshow_capture.h:163
ff_print_AM_MEDIA_TYPE
void ff_print_AM_MEDIA_TYPE(const AM_MEDIA_TYPE *type)
Definition: dshow_common.c:134
libAVMemInputPin_QueryInterface
long WINAPI libAVMemInputPin_QueryInterface(libAVMemInputPin *, const GUID *, void **)
Definition: dshow_pin.c:271
libAVMemInputPin_ReceiveCanBlock
long WINAPI libAVMemInputPin_ReceiveCanBlock(libAVMemInputPin *)
Definition: dshow_pin.c:383
src
#define src
Definition: vp8dsp.c:254
libAVEnumMediaTypes_AddRef
unsigned long WINAPI libAVEnumMediaTypes_AddRef(libAVEnumMediaTypes *)
dshow_ctx::channels
int channels
Definition: dshow_capture.h:345
dshow_ctx
Definition: dshow_capture.h:286
libAVFilter::stream_index
int stream_index
Definition: dshow_capture.h:261
dshow_ctx::sample_rate
int sample_rate
Definition: dshow_capture.h:343
buf
void * buf
Definition: avisynth_c.h:766
dshow_ctx::show_analog_tv_tuner_audio_dialog
int show_analog_tv_tuner_audio_dialog
Definition: dshow_capture.h:311
libAVPin
Definition: dshow_capture.h:160
libAVPin_Create
libAVPin * libAVPin_Create(libAVFilter *filter)
dshow_try_setup_crossbar_options
HRESULT dshow_try_setup_crossbar_options(ICaptureGraphBuilder2 *graph_builder2, IBaseFilter *device_filter, enum dshowDeviceType devtype, AVFormatContext *avctx)
Given a fully constructed graph, check if there is a cross bar filter, and configure its pins if so.
Definition: dshow_crossbar.c:140
libAVFilter_Pause
long WINAPI libAVFilter_Pause(libAVFilter *)
Definition: dshow_filter.c:44
libAVFilter::state
FILTER_STATE state
Definition: dshow_capture.h:257
g
const char * g
Definition: vf_curves.c:115
libAVEnumPins_Destroy
void libAVEnumPins_Destroy(libAVEnumPins *)
dshow_ctx::eof
int eof
Definition: dshow_capture.h:327
libAVEnumMediaTypes::type
AM_MEDIA_TYPE type
Definition: dshow_capture.h:234
libAVPin_Connect
long WINAPI libAVPin_Connect(libAVPin *, IPin *, const AM_MEDIA_TYPE *)
ff_copy_dshow_media_type
long ff_copy_dshow_media_type(AM_MEDIA_TYPE *dst, const AM_MEDIA_TYPE *src)
Definition: dshow_common.c:24
libAVPin_BeginFlush
long WINAPI libAVPin_BeginFlush(libAVPin *)
Definition: dshow_pin.c:182
libAVPin_Disconnect
long WINAPI libAVPin_Disconnect(libAVPin *)
Definition: dshow_pin.c:68
libAVMemInputPin_AddRef
unsigned long WINAPI libAVMemInputPin_AddRef(libAVMemInputPin *)
Definition: dshow_pin.c:279
libAVFilter::vtbl
IBaseFilterVtbl * vtbl
Definition: dshow_capture.h:252
libAVEnumPins_QueryInterface
long WINAPI libAVEnumPins_QueryInterface(libAVEnumPins *, const GUID *, void **)
AVFormatContext
Format I/O context.
Definition: avformat.h:1342
dshow_ctx::capture_pin
libAVPin * capture_pin[2]
Definition: dshow_capture.h:320
libAVMemInputPin_ReceiveMultiple
long WINAPI libAVMemInputPin_ReceiveMultiple(libAVMemInputPin *, IMediaSample **, long, long *)
Definition: dshow_pin.c:370
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:67
libAVPin_ReceiveConnection
long WINAPI libAVPin_ReceiveConnection(libAVPin *, IPin *, const AM_MEDIA_TYPE *)
Definition: dshow_pin.c:40
dshow_ctx::audio_buffer_size
int audio_buffer_size
Definition: dshow_capture.h:301
libAVPin_Release
unsigned long WINAPI libAVPin_Release(libAVPin *)
libAVMemInputPin_GetAllocatorRequirements
long WINAPI libAVMemInputPin_GetAllocatorRequirements(libAVMemInputPin *, ALLOCATOR_PROPERTIES *)
Definition: dshow_pin.c:306
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
libAVFilter_Create
libAVFilter * libAVFilter_Create(void *, void *, enum dshowDeviceType)
libAVFilter::info
FILTER_INFO info
Definition: dshow_capture.h:256
ff_print_AUDIO_STREAM_CONFIG_CAPS
void ff_print_AUDIO_STREAM_CONFIG_CAPS(const AUDIO_STREAM_CONFIG_CAPS *caps)
Definition: dshow_common.c:115
index
int index
Definition: gxfenc.c:89
dshow_ctx::show_audio_device_dialog
int show_audio_device_dialog
Definition: dshow_capture.h:307
dshow_ctx::mutex
HANDLE mutex
Definition: dshow_capture.h:322
AVCodecID
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: avcodec.h:215
dshow_ctx::video_pin_name
char * video_pin_name
Definition: dshow_capture.h:304
dshowSourceFilterType
dshowSourceFilterType
Definition: dshow_capture.h:66
libAVFilter::start_time
int64_t start_time
Definition: dshow_capture.h:262
dshow_ctx::list_options
int list_options
Definition: dshow_capture.h:299
libAVFilter_Release
unsigned long WINAPI libAVFilter_Release(libAVFilter *)
AudioDevice
@ AudioDevice
Definition: dshow_capture.h:63
libAVEnumPins_Next
long WINAPI libAVEnumPins_Next(libAVEnumPins *, unsigned long, IPin **, unsigned long *)
libAVEnumPins_Reset
long WINAPI libAVEnumPins_Reset(libAVEnumPins *)
Definition: dshow_enumpins.c:58
libAVEnumPins::vtbl
IEnumPinsVtbl * vtbl
Definition: dshow_capture.h:209
dshow_ctx::requested_framerate
AVRational requested_framerate
Definition: dshow_capture.h:341
libAVFilter_GetClassID
long WINAPI libAVFilter_GetClassID(libAVFilter *, CLSID *)
libAVEnumMediaTypes_Clone
long WINAPI libAVEnumMediaTypes_Clone(libAVEnumMediaTypes *, libAVEnumMediaTypes **)
Definition: dshow_enummediatypes.c:70
libAVEnumPins_AddRef
unsigned long WINAPI libAVEnumPins_AddRef(libAVEnumPins *)
libAVFilter::callback
void(* callback)(void *priv_data, int index, uint8_t *buf, int buf_size, int64_t time, enum dshowDeviceType type)
Definition: dshow_capture.h:263
dshow_ctx::crossbar_audio_input_pin_number
int crossbar_audio_input_pin_number
Definition: dshow_capture.h:303
libAVFilter::ref
long ref
Definition: dshow_capture.h:253
avdevice.h
libAVFilter_QueryVendorInfo
long WINAPI libAVFilter_QueryVendorInfo(libAVFilter *, wchar_t **)
Definition: dshow_filter.c:154
dshow_ctx::show_video_device_dialog
int show_video_device_dialog
Definition: dshow_capture.h:306
HRESULT
DWORD HRESULT
Definition: basicDataTypeConversions.h:54
libAVFilter_JoinFilterGraph
long WINAPI libAVFilter_JoinFilterGraph(libAVFilter *, IFilterGraph *, const wchar_t *)
Definition: dshow_filter.c:142
libAVPin_ConnectedTo
long WINAPI libAVPin_ConnectedTo(libAVPin *, IPin **)
Definition: dshow_pin.c:82
AudioSourceDevice
@ AudioSourceDevice
Definition: dshow_capture.h:68
dshow_ctx::device_name
char * device_name[2]
Definition: dshow_capture.h:293
libAVMemInputPin_Release
unsigned long WINAPI libAVMemInputPin_Release(libAVMemInputPin *)
Definition: dshow_pin.c:286
dshow_ctx::requested_height
int requested_height
Definition: dshow_capture.h:340
GUIDoffset
Definition: dshow_capture.h:56
libAVFilter::priv_data
void * priv_data
Definition: dshow_capture.h:260
dshow_ctx::audio_filter_save_file
char * audio_filter_save_file
Definition: dshow_capture.h:313
libAVEnumPins
Definition: dshow_capture.h:206
CLSID
GUID CLSID
Definition: basicDataTypeConversions.h:78
dshow_ctx::audio_pin_name
char * audio_pin_name
Definition: dshow_capture.h:305
libAVFilter_Run
long WINAPI libAVFilter_Run(libAVFilter *, REFERENCE_TIME)
Definition: dshow_filter.c:51
libAVMemInputPin_Destroy
void libAVMemInputPin_Destroy(libAVMemInputPin *)
Definition: dshow_pin.c:391
libAVPin_QueryInterface
long WINAPI libAVPin_QueryInterface(libAVPin *, const GUID *, void **)
uint8_t
uint8_t
Definition: audio_convert.c:194
libAVPin_QueryDirection
long WINAPI libAVPin_QueryDirection(libAVPin *, PIN_DIRECTION *)
Definition: dshow_pin.c:125
dshow_ctx::pixel_format
enum AVPixelFormat pixel_format
Definition: dshow_capture.h:335
dshow_ctx::video_device_number
int video_device_number
Definition: dshow_capture.h:296
libAVPin_ConnectionMediaType
long WINAPI libAVPin_ConnectionMediaType(libAVPin *, AM_MEDIA_TYPE *)
Definition: dshow_pin.c:96
dshow_ctx::crossbar_video_input_pin_number
int crossbar_video_input_pin_number
Definition: dshow_capture.h:302
libAVEnumPins_Skip
long WINAPI libAVEnumPins_Skip(libAVEnumPins *, unsigned long)
Definition: dshow_enumpins.c:50
libAVPin_EndFlush
long WINAPI libAVPin_EndFlush(libAVPin *)
Definition: dshow_pin.c:189
DWORD
uint32_t DWORD
Definition: basicDataTypeConversions.h:51
libAVPin_QueryAccept
long WINAPI libAVPin_QueryAccept(libAVPin *, const AM_MEDIA_TYPE *)
Definition: dshow_pin.c:146
ff_dshow_context_class_ptr
const AVClass * ff_dshow_context_class_ptr
Definition: dshow_common.c:60
libAVFilter_Stop
long WINAPI libAVFilter_Stop(libAVFilter *)
Definition: dshow_filter.c:37
dshow_show_filter_properties
void dshow_show_filter_properties(IBaseFilter *pFilter, AVFormatContext *avctx)
Pops up a user dialog allowing them to adjust properties for the given filter, if possible.
Definition: dshow.c:513
libAVPin::type
AM_MEDIA_TYPE type
Definition: dshow_capture.h:167
libAVPin::imemvtbl
IMemInputPinVtbl * imemvtbl
Definition: dshow_capture.h:168
libAVPin::filter
libAVFilter * filter
Definition: dshow_capture.h:165
VideoSourceDevice
@ VideoSourceDevice
Definition: dshow_capture.h:67
libAVFilter_QueryFilterInfo
long WINAPI libAVFilter_QueryFilterInfo(libAVFilter *, FILTER_INFO *)
Definition: dshow_filter.c:129
BOOL
uint32_t BOOL
Definition: basicDataTypeConversions.h:16
dshow_ctx::show_analog_tv_tuner_dialog
int show_analog_tv_tuner_dialog
Definition: dshow_capture.h:310
GUIDoffset::offset
int offset
Definition: dshow_capture.h:58
dshow_ctx::framerate
char * framerate
Definition: dshow_capture.h:337
dshow_ctx::device_pin
IPin * device_pin[2]
Definition: dshow_capture.h:318
libAVPin_NewSegment
long WINAPI libAVPin_NewSegment(libAVPin *, REFERENCE_TIME, REFERENCE_TIME, double)
Definition: dshow_pin.c:196
libAVEnumMediaTypes_Reset
long WINAPI libAVEnumMediaTypes_Reset(libAVEnumMediaTypes *)
Definition: dshow_enummediatypes.c:63
dshow_ctx::sample_size
int sample_size
Definition: dshow_capture.h:344
libAVFilter
Definition: dshow_capture.h:249
libAVMemInputPin_NotifyAllocator
long WINAPI libAVMemInputPin_NotifyAllocator(libAVMemInputPin *, IMemAllocator *, BOOL)
Definition: dshow_pin.c:299
GUIDoffset::iid
const GUID * iid
Definition: dshow_capture.h:57
libAVFilter::name
const wchar_t * name
Definition: dshow_capture.h:254
dshow_ctx::audio_filter_load_file
char * audio_filter_load_file
Definition: dshow_capture.h:312
dshow_ctx::show_video_crossbar_connection_dialog
int show_video_crossbar_connection_dialog
Definition: dshow_capture.h:308
dshow_ctx::control
IMediaControl * control
Definition: dshow_capture.h:332
dshow_ctx::curbufsize
int64_t curbufsize[2]
Definition: dshow_capture.h:329
libAVEnumMediaTypes::pos
int pos
Definition: dshow_capture.h:233
libAVPin_QueryInternalConnections
long WINAPI libAVPin_QueryInternalConnections(libAVPin *, IPin **, unsigned long *)
Definition: dshow_pin.c:168
libAVFilter_SetSyncSource
long WINAPI libAVFilter_SetSyncSource(libAVFilter *, IReferenceClock *)
Definition: dshow_filter.c:68
libAVEnumMediaTypes
Definition: dshow_capture.h:228
dshowDeviceType
dshowDeviceType
Definition: dshow_capture.h:61
libAVFilter_AddRef
unsigned long WINAPI libAVFilter_AddRef(libAVFilter *)
libAVEnumPins::filter
libAVFilter * filter
Definition: dshow_capture.h:213
libAVEnumMediaTypes_Skip
long WINAPI libAVEnumMediaTypes_Skip(libAVEnumMediaTypes *, unsigned long)
Definition: dshow_enummediatypes.c:55
libAVEnumPins_Create
libAVEnumPins * libAVEnumPins_Create(libAVPin *pin, libAVFilter *filter)
libAVMemInputPin_GetAllocator
long WINAPI libAVMemInputPin_GetAllocator(libAVMemInputPin *, IMemAllocator **)
Definition: dshow_pin.c:293
dshow_ctx::capture_filter
libAVFilter * capture_filter[2]
Definition: dshow_capture.h:319
AVPacketList
Definition: avformat.h:2008
dshow_ctx::device_unique_name
char * device_unique_name[2]
Definition: dshow_capture.h:294
libAVEnumPins_Clone
long WINAPI libAVEnumPins_Clone(libAVEnumPins *, libAVEnumPins **)
Definition: dshow_enumpins.c:65
libAVEnumMediaTypes_QueryInterface
long WINAPI libAVEnumMediaTypes_QueryInterface(libAVEnumMediaTypes *, const GUID *, void **)