FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions | Variables
dshow.c File Reference
#include "libavutil/parseutils.h"
#include "libavutil/pixdesc.h"
#include "libavutil/opt.h"
#include "libavformat/internal.h"
#include "libavformat/riff.h"
#include "avdevice.h"
#include "dshow_capture.h"
#include "libavcodec/raw.h"

Go to the source code of this file.

Data Structures

struct  dshow_ctx
 

Macros

#define OFFSET(x)   offsetof(struct dshow_ctx, x)
 
#define DEC   AV_OPT_FLAG_DECODING_PARAM
 

Functions

static enum AVPixelFormat dshow_pixfmt (DWORD biCompression, WORD biBitCount)
 
static int dshow_read_close (AVFormatContext *s)
 
static char * dup_wchar_to_utf8 (wchar_t *w)
 
static int shall_we_drop (AVFormatContext *s, int index, enum dshowDeviceType devtype)
 
static void callback (void *priv_data, int index, uint8_t *buf, int buf_size, int64_t time, enum dshowDeviceType devtype)
 
static int dshow_cycle_devices (AVFormatContext *avctx, ICreateDevEnum *devenum, enum dshowDeviceType devtype, IBaseFilter **pfilter)
 Cycle through available devices using the device enumerator devenum, retrieve the device with type specified by devtype and return the pointer to the object found in *pfilter.
 
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 AVOptions and if successful return 1 in *pformat_set.
 
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 device).
 
static int dshow_cycle_pins (AVFormatContext *avctx, enum dshowDeviceType devtype, IBaseFilter *device_filter, IPin **ppin)
 Cycle through available pins using the device_filter device, of type devtype, retrieve the first output pin and return the pointer to the object found in *ppin.
 
static int dshow_list_device_options (AVFormatContext *avctx, ICreateDevEnum *devenum, enum dshowDeviceType devtype)
 List options for device with type devtype.
 
static int dshow_open_device (AVFormatContext *avctx, ICreateDevEnum *devenum, enum dshowDeviceType devtype)
 
static enum AVCodecID waveform_codec_id (enum AVSampleFormat sample_fmt)
 
static enum AVSampleFormat sample_fmt_bits_per_sample (int bits)
 
static int dshow_add_device (AVFormatContext *avctx, enum dshowDeviceType devtype)
 
static int parse_device_name (AVFormatContext *avctx)
 
static int dshow_read_header (AVFormatContext *avctx)
 
static int dshow_check_event_queue (IMediaEvent *media_event)
 Checks media events from DirectShow and returns -1 on error or EOF.
 
static int dshow_read_packet (AVFormatContext *s, AVPacket *pkt)
 

Variables

static const AVOption options []
 
static const AVClass dshow_class
 
AVInputFormat ff_dshow_demuxer
 

Macro Definition Documentation

#define OFFSET (   x)    offsetof(struct dshow_ctx, x)

Definition at line 1060 of file dshow.c.

#define DEC   AV_OPT_FLAG_DECODING_PARAM

Definition at line 1061 of file dshow.c.

Function Documentation

static enum AVPixelFormat dshow_pixfmt ( DWORD  biCompression,
WORD  biBitCount 
)
static

Definition at line 75 of file dshow.c.

Referenced by dshow_add_device(), and dshow_cycle_formats().

static int dshow_read_close ( AVFormatContext s)
static

Definition at line 99 of file dshow.c.

Referenced by dshow_read_header().

static char* dup_wchar_to_utf8 ( wchar_t *  w)
static

Definition at line 173 of file dshow.c.

Referenced by dshow_cycle_pins().

static int shall_we_drop ( AVFormatContext s,
int  index,
enum dshowDeviceType  devtype 
)
static

Definition at line 183 of file dshow.c.

Referenced by callback().

static void callback ( void priv_data,
int  index,
uint8_t buf,
int  buf_size,
int64_t  time,
enum dshowDeviceType  devtype 
)
static
static int dshow_cycle_devices ( AVFormatContext avctx,
ICreateDevEnum *  devenum,
enum dshowDeviceType  devtype,
IBaseFilter **  pfilter 
)
static

Cycle through available devices using the device enumerator devenum, retrieve the device with type specified by devtype and return the pointer to the object found in *pfilter.

If pfilter is NULL, list all device names.

Definition at line 246 of file dshow.c.

Referenced by dshow_list_device_options(), dshow_open_device(), and dshow_read_header().

static void dshow_cycle_formats ( AVFormatContext avctx,
enum dshowDeviceType  devtype,
IPin *  pin,
int *  pformat_set 
)
static

Cycle through available formats using the specified pin, try to set parameters specified through AVOptions and if successful return 1 in *pformat_set.

If pformat_set is NULL, list all pin capabilities.

Definition at line 325 of file dshow.c.

Referenced by dshow_cycle_pins().

static int dshow_set_audio_buffer_size ( AVFormatContext avctx,
IPin *  pin 
)
static

Set audio device buffer size in milliseconds (which can directly impact latency, depending on the device).

Definition at line 471 of file dshow.c.

Referenced by dshow_cycle_pins().

static int dshow_cycle_pins ( AVFormatContext avctx,
enum dshowDeviceType  devtype,
IBaseFilter *  device_filter,
IPin **  ppin 
)
static

Cycle through available pins using the device_filter device, of type devtype, retrieve the first output pin and return the pointer to the object found in *ppin.

If ppin is NULL, cycle through all pins listing audio/video capabilities.

Definition at line 518 of file dshow.c.

Referenced by dshow_list_device_options(), and dshow_open_device().

static int dshow_list_device_options ( AVFormatContext avctx,
ICreateDevEnum *  devenum,
enum dshowDeviceType  devtype 
)
static

List options for device with type devtype.

Parameters
devenumdevice enumerator used for accessing the device

Definition at line 632 of file dshow.c.

Referenced by dshow_read_header().

static int dshow_open_device ( AVFormatContext avctx,
ICreateDevEnum *  devenum,
enum dshowDeviceType  devtype 
)
static

Definition at line 649 of file dshow.c.

Referenced by dshow_read_header().

static enum AVCodecID waveform_codec_id ( enum AVSampleFormat  sample_fmt)
static

Definition at line 712 of file dshow.c.

Referenced by dshow_add_device().

static enum AVSampleFormat sample_fmt_bits_per_sample ( int  bits)
static

Definition at line 722 of file dshow.c.

Referenced by dshow_add_device().

static int dshow_add_device ( AVFormatContext avctx,
enum dshowDeviceType  devtype 
)
static

Definition at line 733 of file dshow.c.

Referenced by dshow_read_header().

static int parse_device_name ( AVFormatContext avctx)
static

Definition at line 827 of file dshow.c.

Referenced by dshow_read_header().

static int dshow_read_header ( AVFormatContext avctx)
static

Definition at line 864 of file dshow.c.

static int dshow_check_event_queue ( IMediaEvent *  media_event)
static

Checks media events from DirectShow and returns -1 on error or EOF.

Also purges all events that might be in the event queue to stop the trigger of event notification.

Definition at line 1015 of file dshow.c.

Referenced by dshow_read_packet().

static int dshow_read_packet ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 1030 of file dshow.c.

Variable Documentation

const AVOption options[]
static
Initial value:
= {
{ "video_size", "set video size given a string such as 640x480 or hd720.", OFFSET(requested_width), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, 0, 0, DEC },
{ "pixel_format", "set video pixel format", OFFSET(pixel_format), AV_OPT_TYPE_PIXEL_FMT, {.i64 = AV_PIX_FMT_NONE}, -1, INT_MAX, DEC },
{ "framerate", "set video frame rate", OFFSET(framerate), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC },
{ "sample_rate", "set audio sample rate", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, DEC },
{ "sample_size", "set audio sample size", OFFSET(sample_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 16, DEC },
{ "channels", "set number of audio channels, such as 1 or 2", OFFSET(channels), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, DEC },
{ "list_devices", "list available devices", OFFSET(list_devices), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, DEC, "list_devices" },
{ "true", "", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, DEC, "list_devices" },
{ "false", "", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, DEC, "list_devices" },
{ "list_options", "list available options for specified device", OFFSET(list_options), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, DEC, "list_options" },
{ "true", "", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, DEC, "list_options" },
{ "false", "", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, DEC, "list_options" },
{ "video_device_number", "set video device number for devices with same name (starts at 0)", OFFSET(video_device_number), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, DEC },
{ "audio_device_number", "set audio device number for devices with same name (starts at 0)", OFFSET(audio_device_number), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, DEC },
{ "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 },
{ NULL },
}

Definition at line 1062 of file dshow.c.

const AVClass dshow_class
static
Initial value:
= {
.class_name = "dshow indev",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 1081 of file dshow.c.

AVInputFormat ff_dshow_demuxer
Initial value:
= {
.name = "dshow",
.long_name = NULL_IF_CONFIG_SMALL("DirectShow capture"),
.priv_data_size = sizeof(struct dshow_ctx),
.read_packet = dshow_read_packet,
.read_close = dshow_read_close,
.flags = AVFMT_NOFILE,
.priv_class = &dshow_class,
}

Definition at line 1089 of file dshow.c.