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;
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,
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) {
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 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
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
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.
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.
AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
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.
int crossbar_audio_input_pin_number
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
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.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
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