36 switch(biCompression) {
64 IMediaControl_Stop(ctx->
control);
65 IMediaControl_Release(ctx->
control);
74 r = IGraphBuilder_EnumFilters(ctx->
graph, &fenum);
77 IEnumFilters_Reset(fenum);
78 while (IEnumFilters_Next(fenum, 1, &f,
NULL) == S_OK) {
79 if (IGraphBuilder_RemoveFilter(ctx->
graph, f) == S_OK)
80 IEnumFilters_Reset(fenum);
82 IBaseFilter_Release(f);
84 IEnumFilters_Release(fenum);
86 IGraphBuilder_Release(ctx->
graph);
113 CloseHandle(ctx->
mutex);
115 CloseHandle(ctx->
event[0]);
117 CloseHandle(ctx->
event[1]);
135 int l = WideCharToMultiByte(CP_UTF8, 0, w, -1, 0, 0, 0, 0);
138 WideCharToMultiByte(CP_UTF8, 0, w, -1, s, l, 0, 0);
145 static const uint8_t dropscore[] = {62, 75, 87, 100};
148 const char *devtypename = (devtype ==
VideoDevice) ?
"video" :
"audio";
152 "real-time buffer [%s] [%s input] too full or near too full (%d%% of size: %d [rtbufsize parameter])! frame dropped!\n",
184 pktl_next->
pkt.
pts = time;
185 memcpy(pktl_next->
pkt.
data, buf, buf_size);
187 for(ppktl = &ctx->
pktl ; *ppktl ; ppktl = &(*ppktl)->
next);
191 SetEvent(ctx->
event[1]);
192 ReleaseMutex(ctx->
mutex);
196 ReleaseMutex(ctx->
mutex);
213 IEnumMoniker *classenum =
NULL;
220 const GUID *device_guid[2] = { &CLSID_VideoInputDeviceCategory,
221 &CLSID_AudioInputDeviceCategory };
222 const char *devtypename = (devtype ==
VideoDevice) ?
"video" :
"audio only";
223 const char *sourcetypename = (sourcetype ==
VideoSourceDevice) ?
"video" :
"audio";
225 r = ICreateDevEnum_CreateClassEnumerator(devenum, device_guid[sourcetype],
226 (IEnumMoniker **) &classenum, 0);
234 IPropertyBag *bag =
NULL;
236 char *unique_name =
NULL;
238 IBindCtx *bind_ctx =
NULL;
239 LPOLESTR olestr =
NULL;
240 LPMALLOC co_malloc =
NULL;
243 r = CoGetMalloc(1, &co_malloc);
246 r = CreateBindCtx(0, &bind_ctx);
250 r = IMoniker_GetDisplayName(m, bind_ctx,
NULL, &olestr);
255 for (i = 0; i < strlen(unique_name); i++) {
256 if (unique_name[i] ==
':')
257 unique_name[
i] =
'_';
260 r = IMoniker_BindToStorage(m, 0, 0, &IID_IPropertyBag, (
void *) &bag);
265 r = IPropertyBag_Read(bag,
L"FriendlyName", &var,
NULL);
275 r = IMoniker_BindToObject(m, 0, 0, &IID_IBaseFilter, (
void *) &
device_filter);
290 if (olestr && co_malloc)
291 IMalloc_Free(co_malloc, olestr);
293 IBindCtx_Release(bind_ctx);
297 IPropertyBag_Release(bag);
301 IEnumMoniker_Release(classenum);
305 av_log(avctx,
AV_LOG_ERROR,
"Could not find %s device with name [%s] among source devices of type %s.\n",
323 IPin *pin,
int *pformat_set)
326 IAMStreamConfig *config =
NULL;
332 if (IPin_QueryInterface(pin, &IID_IAMStreamConfig, (
void **) &config) != S_OK)
334 if (IAMStreamConfig_GetNumberOfCapabilities(config, &n, &size) != S_OK)
341 for (i = 0; i < n && !format_set; i++) {
342 r = IAMStreamConfig_GetStreamCaps(config, i, &type, (
void *) caps);
350 VIDEO_STREAM_CONFIG_CAPS *vcaps = caps;
351 BITMAPINFOHEADER *bih;
357 if (IsEqualGUID(&type->formattype, &FORMAT_VideoInfo)) {
358 VIDEOINFOHEADER *v = (
void *) type->pbFormat;
359 fr = &v->AvgTimePerFrame;
361 }
else if (IsEqualGUID(&type->formattype, &FORMAT_VideoInfo2)) {
362 VIDEOINFOHEADER2 *v = (
void *) type->pbFormat;
363 fr = &v->AvgTimePerFrame;
374 av_log(avctx,
AV_LOG_INFO,
" unknown compression type 0x%X", (
int) bih->biCompression);
382 vcaps->MinOutputSize.cx, vcaps->MinOutputSize.cy,
383 1e7 / vcaps->MaxFrameInterval,
384 vcaps->MaxOutputSize.cx, vcaps->MaxOutputSize.cy,
385 1e7 / vcaps->MinFrameInterval);
399 if (framerate > vcaps->MaxFrameInterval ||
400 framerate < vcaps->MinFrameInterval)
414 AUDIO_STREAM_CONFIG_CAPS *acaps = caps;
419 if (IsEqualGUID(&type->formattype, &FORMAT_WaveFormatEx)) {
420 fx = (
void *) type->pbFormat;
425 av_log(avctx,
AV_LOG_INFO,
" min ch=%lu bits=%lu rate=%6lu max ch=%lu bits=%lu rate=%6lu\n",
426 acaps->MinimumChannels, acaps->MinimumBitsPerSample, acaps->MinimumSampleFrequency,
427 acaps->MaximumChannels, acaps->MaximumBitsPerSample, acaps->MaximumSampleFrequency);
431 if (ctx->
sample_rate > acaps->MaximumSampleFrequency ||
437 if (ctx->
sample_size > acaps->MaximumBitsPerSample ||
443 if (ctx->
channels > acaps->MaximumChannels ||
444 ctx->
channels < acaps->MinimumChannels)
449 if (IAMStreamConfig_SetFormat(config, type) != S_OK)
454 CoTaskMemFree(type->pbFormat);
458 IAMStreamConfig_Release(config);
461 *pformat_set = format_set;
472 IAMBufferNegotiation *buffer_negotiation =
NULL;
473 ALLOCATOR_PROPERTIES props = { -1, -1, -1, -1 };
474 IAMStreamConfig *config =
NULL;
478 if (IPin_QueryInterface(pin, &IID_IAMStreamConfig, (
void **) &config) != S_OK)
480 if (IAMStreamConfig_GetFormat(config, &type) != S_OK)
482 if (!IsEqualGUID(&type->formattype, &FORMAT_WaveFormatEx))
485 props.cbBuffer = (((WAVEFORMATEX *) type->pbFormat)->nAvgBytesPerSec)
488 if (IPin_QueryInterface(pin, &IID_IAMBufferNegotiation, (
void **) &buffer_negotiation) != S_OK)
490 if (IAMBufferNegotiation_SuggestAllocatorProperties(buffer_negotiation, &props) != S_OK)
496 if (buffer_negotiation)
497 IAMBufferNegotiation_Release(buffer_negotiation);
500 CoTaskMemFree(type->pbFormat);
504 IAMStreamConfig_Release(config);
514 ISpecifyPropertyPages *property_pages =
NULL;
515 IUnknown *device_filter_iunknown =
NULL;
517 FILTER_INFO filter_info = {0};
518 CAUUID ca_guid = {0};
520 hr = IBaseFilter_QueryInterface(device_filter, &IID_ISpecifyPropertyPages, (
void **)&property_pages);
525 hr = IBaseFilter_QueryFilterInfo(device_filter, &filter_info);
529 hr = IBaseFilter_QueryInterface(device_filter, &IID_IUnknown, (
void **)&device_filter_iunknown);
533 hr = ISpecifyPropertyPages_GetPages(property_pages, &ca_guid);
537 hr = OleCreatePropertyFrame(
NULL, 0, 0, filter_info.achName, 1, &device_filter_iunknown, ca_guid.cElems,
538 ca_guid.pElems, 0, 0,
NULL);
547 ISpecifyPropertyPages_Release(property_pages);
548 if (device_filter_iunknown)
549 IUnknown_Release(device_filter_iunknown);
550 if (filter_info.pGraph)
551 IFilterGraph_Release(filter_info.pGraph);
553 CoTaskMemFree(ca_guid.pElems);
572 const GUID *mediatype[2] = { &MEDIATYPE_Video, &MEDIATYPE_Audio };
573 const char *devtypename = (devtype ==
VideoDevice) ?
"video" :
"audio only";
574 const char *sourcetypename = (sourcetype ==
VideoSourceDevice) ?
"video" :
"audio";
584 if (should_show_properties)
587 r = IBaseFilter_EnumPins(device_filter, &pins);
595 devtypename, sourcetypename);
598 while (!device_pin && IEnumPins_Next(pins, 1, &pin,
NULL) == S_OK) {
599 IKsPropertySet *p =
NULL;
600 IEnumMediaTypes *types =
NULL;
605 char *name_buf =
NULL;
606 wchar_t *pin_id =
NULL;
607 char *pin_buf =
NULL;
610 IPin_QueryPinInfo(pin, &info);
611 IBaseFilter_Release(info.pFilter);
613 if (info.dir != PINDIR_OUTPUT)
615 if (IPin_QueryInterface(pin, &IID_IKsPropertySet, (
void **) &p) != S_OK)
617 if (IKsPropertySet_Get(p, &ROPSETID_Pin, AMPROPERTY_PIN_CATEGORY,
618 NULL, 0, &category,
sizeof(GUID), &r2) != S_OK)
620 if (!IsEqualGUID(&category, &PIN_CATEGORY_CAPTURE))
624 r = IPin_QueryId(pin, &pin_id);
632 av_log(avctx,
AV_LOG_INFO,
" Pin \"%s\" (alternative pin name \"%s\")\n", name_buf, pin_buf);
637 if (desired_pin_name) {
638 if(strcmp(name_buf, desired_pin_name) && strcmp(pin_buf, desired_pin_name)) {
640 name_buf, pin_buf, desired_pin_name);
657 if (IPin_EnumMediaTypes(pin, &types) != S_OK)
660 IEnumMediaTypes_Reset(types);
662 while (!device_pin && IEnumMediaTypes_Next(types, 1, &type,
NULL) == S_OK) {
663 if (IsEqualGUID(&type->majortype, mediatype[devtype])) {
673 IEnumMediaTypes_Release(types);
675 IKsPropertySet_Release(p);
676 if (device_pin != pin)
681 CoTaskMemFree(pin_id);
684 IEnumPins_Release(pins);
687 if (set_format && !format_set) {
693 "Could not find output pin from %s capture device.\n", devtypename);
716 if ((r =
dshow_cycle_devices(avctx, devenum, devtype, sourcetype, &device_filter, &device_unique_name)) < 0)
731 char *device_filter_unique_name =
NULL;
736 ICaptureGraphBuilder2 *graph_builder2 =
NULL;
739 IStream *ifile_stream =
NULL;
740 IStream *ofile_stream =
NULL;
741 IPersistStream *pers_stream =
NULL;
744 const wchar_t *filter_name[2] = {
L"Audio capture filter",
L"Video capture filter" };
750 char *filename =
NULL;
757 hr = SHCreateStreamOnFile ((LPCSTR) filename, STGM_READ, &ifile_stream);
763 hr = OleLoadFromStream(ifile_stream, &IID_IBaseFilter, (
void **) &device_filter);
773 av_log(avctx,
AV_LOG_INFO,
"Capture filter loaded successfully from file \"%s\".\n", filename);
776 if ((r =
dshow_cycle_devices(avctx, devenum, devtype, sourcetype, &device_filter, &device_filter_unique_name)) < 0) {
784 if (!device_filter_unique_name || strcmp(device_filter_unique_name, ctx->
device_unique_name[otherDevType]) == 0) {
785 av_log(avctx,
AV_LOG_DEBUG,
"reusing previous graph capture filter... %s\n", device_filter_unique_name);
786 IBaseFilter_Release(device_filter);
797 r = IGraphBuilder_AddFilter(graph, device_filter,
NULL);
803 if ((r =
dshow_cycle_pins(avctx, devtype, sourcetype, device_filter, &device_pin)) < 0) {
811 if (!capture_filter) {
821 char *filename =
NULL;
828 hr = SHCreateStreamOnFile ((LPCSTR) filename, STGM_CREATE | STGM_READWRITE, &ofile_stream);
834 hr = IBaseFilter_QueryInterface(device_filter, &IID_IPersistStream, (
void **) &pers_stream);
840 hr = OleSaveToStream(pers_stream, ofile_stream);
846 hr = IStream_Commit(ofile_stream, STGC_DEFAULT);
856 av_log(avctx,
AV_LOG_INFO,
"Capture filter saved successfully to file \"%s\".\n", filename);
859 r = IGraphBuilder_AddFilter(graph, (IBaseFilter *) capture_filter,
860 filter_name[devtype]);
867 capture_pin = capture_filter->pin;
870 r = CoCreateInstance(&CLSID_CaptureGraphBuilder2,
NULL, CLSCTX_INPROC_SERVER,
871 &IID_ICaptureGraphBuilder2, (
void **) &graph_builder2);
876 r = ICaptureGraphBuilder2_SetFiltergraph(graph_builder2, graph);
882 r = ICaptureGraphBuilder2_RenderStream(graph_builder2,
NULL,
NULL, (IUnknown *) device_pin,
NULL ,
883 (IBaseFilter *) capture_filter);
900 if (graph_builder2 !=
NULL)
901 ICaptureGraphBuilder2_Release(graph_builder2);
904 IPersistStream_Release(pers_stream);
907 IStream_Release(ifile_stream);
910 IStream_Release(ofile_stream);
917 switch (sample_fmt) {
945 type.pbFormat =
NULL;
960 BITMAPINFOHEADER *bih =
NULL;
963 if (IsEqualGUID(&type.formattype, &FORMAT_VideoInfo)) {
964 VIDEOINFOHEADER *v = (
void *) type.pbFormat;
965 time_base = (
AVRational) { v->AvgTimePerFrame, 10000000 };
967 }
else if (IsEqualGUID(&type.formattype, &FORMAT_VideoInfo2)) {
968 VIDEOINFOHEADER2 *v = (
void *) type.pbFormat;
969 time_base = (
AVRational) { v->AvgTimePerFrame, 10000000 };
981 par->
width = bih->biWidth;
982 par->
height = bih->biHeight;
985 if (bih->biCompression ==
MKTAG(
'H',
'D',
'Y',
'C')) {
994 "Please report type 0x%X.\n", (
int) bih->biCompression);
1001 if (bih->biCompression == BI_RGB || bih->biCompression == BI_BITFIELDS) {
1015 WAVEFORMATEX *fx =
NULL;
1017 if (IsEqualGUID(&type.formattype, &FORMAT_WaveFormatEx)) {
1018 fx = (
void *) type.pbFormat;
1038 CoTaskMemFree(type.pbFormat);
1051 while ((type = strtok(tmp,
"="))) {
1052 char *token = strtok(
NULL,
":");
1055 if (!strcmp(type,
"video")) {
1056 device_name[0] = token;
1057 }
else if (!strcmp(type,
"audio")) {
1058 device_name[1] = token;
1060 device_name[0] =
NULL;
1061 device_name[1] =
NULL;
1066 if (!device_name[0] && !device_name[1]) {
1070 device_name[0] =
av_strdup(device_name[0]);
1072 device_name[1] =
av_strdup(device_name[1]);
1083 ICreateDevEnum *devenum =
NULL;
1086 HANDLE media_event_handle;
1103 "video codec is not set or set to rawvideo\n");
1116 r = CoCreateInstance(&CLSID_FilterGraph,
NULL, CLSCTX_INPROC_SERVER,
1117 &IID_IGraphBuilder, (
void **) &graph);
1124 r = CoCreateInstance(&CLSID_SystemDeviceEnum,
NULL, CLSCTX_INPROC_SERVER,
1125 &IID_ICreateDevEnum, (
void **) &devenum);
1132 av_log(avctx,
AV_LOG_INFO,
"DirectShow video devices (some may be both video and audio devices)\n");
1187 if (!ctx->
event[1]) {
1192 r = IGraphBuilder_QueryInterface(graph, &IID_IMediaControl, (
void **) &control);
1199 r = IGraphBuilder_QueryInterface(graph, &IID_IMediaEvent, (
void **) &media_event);
1206 r = IMediaEvent_GetEventHandle(media_event, (
void *) &media_event_handle);
1211 proc = GetCurrentProcess();
1212 r = DuplicateHandle(proc, media_event_handle, proc, &ctx->
event[0],
1213 0, 0, DUPLICATE_SAME_ACCESS);
1219 r = IMediaControl_Run(control);
1222 r = IMediaControl_GetState(control, 0, &pfs);
1225 av_log(avctx,
AV_LOG_ERROR,
"Could not run graph (sometimes caused by a device already in use by other application)\n");
1234 ICreateDevEnum_Release(devenum);
1253 while (IMediaEvent_GetEvent(media_event, &code, &p1, &p2, 0) != E_ABORT) {
1254 if (code == EC_COMPLETE || code ==
EC_DEVICE_LOST || code == EC_ERRORABORT)
1256 IMediaEvent_FreeEventParams(media_event, code, p1, p2);
1267 while (!ctx->
eof && !pktl) {
1276 ResetEvent(ctx->
event[1]);
1277 ReleaseMutex(ctx->
mutex);
1284 WaitForMultipleObjects(2, ctx->
event, 0, INFINITE);
1292 #define OFFSET(x) offsetof(struct dshow_ctx, x) 1293 #define DEC AV_OPT_FLAG_DECODING_PARAM 1301 {
"audio_buffer_size",
"set audio device buffer latency size in milliseconds (default is the device's default)",
OFFSET(
audio_buffer_size),
AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, DEC },
1334 .priv_data_size =
sizeof(
struct dshow_ctx),
void dshow_show_filter_properties(IBaseFilter *device_filter, AVFormatContext *avctx)
Pops up a user dialog allowing them to adjust properties for the given filter, if possible...
static enum AVPixelFormat pix_fmt
int av_parse_video_rate(AVRational *rate, const char *arg)
Parse str and store the detected values in *rate.
static int dshow_cycle_pins(AVFormatContext *avctx, enum dshowDeviceType devtype, enum dshowSourceFilterType sourcetype, IBaseFilter *device_filter, IPin **ppin)
Cycle through available pins using the device_filter device, of type devtype, retrieve the first outp...
char * audio_filter_load_file
void ff_print_VIDEO_STREAM_CONFIG_CAPS(const VIDEO_STREAM_CONFIG_CAPS *caps)
#define WaitForSingleObject(a, b)
#define AV_LOG_WARNING
Something somehow does not look correct.
#define LIBAVUTIL_VERSION_INT
static enum AVSampleFormat sample_fmt_bits_per_sample(int bits)
unsigned int max_picture_buffer
Maximum amount of memory in bytes to use for buffering frames obtained from realtime capture devices...
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...
AVInputFormat ff_dshow_demuxer
unsigned long WINAPI libAVPin_Release(libAVPin *)
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
IMediaEvent * media_event
int index
stream index in AVFormatContext
const char * av_default_item_name(void *ptr)
Return the context name.
static int dshow_add_device(AVFormatContext *avctx, enum dshowDeviceType devtype)
char * video_filter_load_file
static void error(const char *err)
enum AVCodecID video_codec_id
This struct describes the properties of an encoded stream.
int show_analog_tv_tuner_audio_dialog
packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in ...
int show_audio_crossbar_connection_dialog
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
IBaseFilter * device_filter[2]
const struct AVCodecTag * avformat_get_riff_video_tags(void)
static int dshow_read_close(AVFormatContext *s)
enum AVCodecID av_codec_get_id(const struct AVCodecTag *const *tags, unsigned int tag)
Get the AVCodecID for the given codec tag tag.
static int dshow_open_device(AVFormatContext *avctx, ICreateDevEnum *devenum, enum dshowDeviceType devtype, enum dshowSourceFilterType sourcetype)
static av_cold int end(AVCodecContext *avctx)
libAVFilter * libAVFilter_Create(void *, void *, enum dshowDeviceType)
char * video_filter_save_file
int id
Format-specific stream ID.
static void dshow_cycle_formats(AVFormatContext *avctx, enum dshowDeviceType devtype, IPin *pin, int *pformat_set)
Cycle through available formats using the specified pin, try to set parameters specified through AVOp...
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
int flags
Flags modifying the (de)muxer behaviour.
enum AVCodecID video_codec_id
Forced video codec_id.
#define AV_OPT_FLAG_ENCODING_PARAM
a generic parameter which can be set by the user for muxing or encoding
static const AVOption options[]
static int dshow_cycle_devices(AVFormatContext *avctx, ICreateDevEnum *devenum, enum dshowDeviceType devtype, enum dshowSourceFilterType sourcetype, IBaseFilter **pfilter, char **device_unique_name)
Cycle through available devices using the device enumerator devenum, retrieve the device with type sp...
Main libavdevice API header.
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
#define i(width, name, range_min, range_max)
AVCodecID
Identify the syntax and semantics of the bitstream.
libAVPin * capture_pin[2]
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
char * url
input or output URL.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
enum AVMediaType codec_type
General type of the encoded data.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
const char * name
Name of the codec implementation.
unsigned long WINAPI libAVPin_AddRef(libAVPin *)
AVRational avg_frame_rate
Average framerate.
int extradata_size
Size of the extradata content in bytes.
static int shall_we_drop(AVFormatContext *s, int index, enum dshowDeviceType devtype)
static char * dup_wchar_to_utf8(wchar_t *w)
static const AVClass dshow_class
static void callback(void *priv_data, int index, uint8_t *buf, int buf_size, int64_t time, enum dshowDeviceType devtype)
static int parse_device_name(AVFormatContext *avctx)
void ff_print_AUDIO_STREAM_CONFIG_CAPS(const AUDIO_STREAM_CONFIG_CAPS *caps)
static int dshow_read_header(AVFormatContext *avctx)
AVRational requested_framerate
internal header for RIFF based (de)muxers do NOT include this in end user applications ...
char * audio_filter_save_file
packed RGB 8:8:8, 24bpp, BGRBGR...
enum AVColorRange color_range
Video only.
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
#define FF_ARRAY_ELEMS(a)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags, unsigned int fourcc)
#define AV_LOG_INFO
Standard information.
static int set_format(void *obj, const char *name, int fmt, int search_flags, enum AVOptionType type, const char *desc, int nb_fmts)
char * av_strdup(const char *s)
Duplicate a string.
AVSampleFormat
Audio sample formats.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
static enum AVCodecID waveform_codec_id(enum AVSampleFormat sample_fmt)
const char * friendly_name
static enum AVPixelFormat dshow_pixfmt(DWORD biCompression, WORD biBitCount)
Describe the class of an AVClass context structure.
enum AVPixelFormat pixel_format
Rational number (pair of numerator and denominator).
int show_audio_device_dialog
static int dshow_set_audio_buffer_size(AVFormatContext *avctx, IPin *pin)
Set audio device buffer size in milliseconds (which can directly impact latency, depending on the dev...
int show_video_device_dialog
offset must point to two consecutive integers
static int dshow_list_device_options(AVFormatContext *avctx, ICreateDevEnum *devenum, enum dshowDeviceType devtype, enum dshowSourceFilterType sourcetype)
List options for device with type devtype, source filter type sourcetype.
AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
int crossbar_audio_input_pin_number
the normal 219*2^(n-8) "MPEG" YUV ranges
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
int sample_rate
Audio only.
unsigned long WINAPI libAVFilter_Release(libAVFilter *)
libAVFilter * capture_filter[2]
struct AVPacketList * next
Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb...
long WINAPI libAVPin_ConnectionMediaType(libAVPin *, AM_MEDIA_TYPE *)
packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb)
#define AV_PIX_FMT_RGB555
static int dshow_read_packet(AVFormatContext *s, AVPacket *pkt)
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
char * device_unique_name[2]
int crossbar_video_input_pin_number
void * priv_data
Format private data.
const struct PixelFormatTag * avpriv_get_raw_pix_fmt_tags(void)
int bits_per_coded_sample
The number of bits per sample in the codedwords.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
void ff_print_AM_MEDIA_TYPE(const AM_MEDIA_TYPE *type)
AVCodecParameters * codecpar
Codec parameters associated with this stream.
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
int show_video_crossbar_connection_dialog
static int dshow_check_event_queue(IMediaEvent *media_event)
Checks media events from DirectShow and returns -1 on error or EOF.
#define MKTAG(a, b, c, d)
AVRational r_frame_rate
Real base framerate of the stream.
unsigned int video_frame_num
AVPixelFormat
Pixel format.
This structure stores compressed data.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int show_analog_tv_tuner_dialog
#define AV_PIX_FMT_0RGB32