FFmpeg  4.0
Data Structures | Macros | Functions | Variables
avfoundation.m File Reference

AVFoundation input device. More...

#import <AVFoundation/AVFoundation.h>
#include <pthread.h>
#include "libavutil/pixdesc.h"
#include "libavutil/opt.h"
#include "libavutil/avstring.h"
#include "libavformat/internal.h"
#include "libavutil/internal.h"
#include "libavutil/parseutils.h"
#include "libavutil/time.h"
#include "avdevice.h"

Go to the source code of this file.

Data Structures

struct  AVFPixelFormatSpec
 
struct  AVFContext
 
class  AVFFrameReceiver
 FrameReciever class - delegate for AVCaptureSession. More...
 
class  AVFAudioReceiver
 AudioReciever class - delegate for AVCaptureSession. More...
 

Macros

#define INTERLEAVE_OUTPUT(bps)
 

Functions

static void lock_frames (AVFContext *ctx)
 
static void unlock_frames (AVFContext *ctx)
 
static void destroy_context (AVFContext *ctx)
 
static void parse_device_name (AVFormatContext *s)
 
static int configure_video_device (AVFormatContext *s, AVCaptureDevice *video_device)
 Configure the video device. More...
 
static int add_video_device (AVFormatContext *s, AVCaptureDevice *video_device)
 
static int add_audio_device (AVFormatContext *s, AVCaptureDevice *audio_device)
 
static int get_video_config (AVFormatContext *s)
 
static int get_audio_config (AVFormatContext *s)
 
static int avf_read_header (AVFormatContext *s)
 
static int avf_read_packet (AVFormatContext *s, AVPacket *pkt)
 
static int avf_close (AVFormatContext *s)
 

Variables

static const int avf_time_base = 1000000
 
static const AVRational avf_time_base_q
 
static const struct AVFPixelFormatSpec avf_pixel_formats []
 
static const AVOption options []
 
static const AVClass avf_class
 
AVInputFormat ff_avfoundation_demuxer
 

Detailed Description

AVFoundation input device.

Author
Thilo Borgmann thilo.nosp@m..bor.nosp@m.gmann.nosp@m.@mai.nosp@m.l.de

Definition in file avfoundation.m.

Macro Definition Documentation

◆ INTERLEAVE_OUTPUT

#define INTERLEAVE_OUTPUT (   bps)
Value:
{ \
int##bps##_t **src; \
int##bps##_t *dest; \
src = av_malloc(ctx->audio_channels * sizeof(int##bps##_t*)); \
if (!src) return AVERROR(EIO); \
for (c = 0; c < ctx->audio_channels; c++) { \
src[c] = ((int##bps##_t*)ctx->audio_buffer) + c * num_samples; \
} \
dest = (int##bps##_t*)pkt->data; \
shift = bps - ctx->audio_bits_per_sample; \
for (sample = 0; sample < num_samples; sample++) \
for (c = 0; c < ctx->audio_channels; c++) \
*dest++ = src[c][sample] << shift; \
av_freep(&src); \
}
static int shift(int a, int b)
Definition: sonic.c:82
static AVPacket pkt
#define src
Definition: vp8dsp.c:254
#define sample
#define av_malloc(s)
uint8_t * data
Definition: avcodec.h:1430
#define AVERROR(e)
Definition: error.h:43
AVFormatContext * ctx
Definition: movenc.c:48
static double c[64]
unsigned bps
Definition: movenc.c:1456
for(j=16;j >0;--j)

Referenced by avf_read_packet().

Function Documentation

◆ lock_frames()

static void lock_frames ( AVFContext ctx)
static

◆ unlock_frames()

static void unlock_frames ( AVFContext ctx)
static

◆ destroy_context()

static void destroy_context ( AVFContext ctx)
static

Definition at line 233 of file avfoundation.m.

Referenced by avf_close(), and avf_read_header().

◆ parse_device_name()

static void parse_device_name ( AVFormatContext s)
static

Definition at line 259 of file avfoundation.m.

Referenced by avf_read_header().

◆ configure_video_device()

static int configure_video_device ( AVFormatContext s,
AVCaptureDevice *  video_device 
)
static

Configure the video device.

Configure the video device using a run-time approach to access properties since formats, activeFormat are available since iOS >= 7.0 or OSX >= 10.7 and activeVideoMaxFrameDuration is available since i0S >= 7.0 and OSX >= 10.9.

The NSUndefinedKeyException must be handled by the caller of this function.

Definition at line 283 of file avfoundation.m.

Referenced by add_video_device().

◆ add_video_device()

static int add_video_device ( AVFormatContext s,
AVCaptureDevice *  video_device 
)
static

Definition at line 366 of file avfoundation.m.

Referenced by avf_read_header().

◆ add_audio_device()

static int add_audio_device ( AVFormatContext s,
AVCaptureDevice *  audio_device 
)
static

Definition at line 494 of file avfoundation.m.

Referenced by avf_read_header().

◆ get_video_config()

static int get_video_config ( AVFormatContext s)
static

Definition at line 538 of file avfoundation.m.

Referenced by avf_read_header().

◆ get_audio_config()

static int get_audio_config ( AVFormatContext s)
static

Definition at line 577 of file avfoundation.m.

Referenced by avf_read_header().

◆ avf_read_header()

static int avf_read_header ( AVFormatContext s)
static

Definition at line 662 of file avfoundation.m.

◆ avf_read_packet()

static int avf_read_packet ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 895 of file avfoundation.m.

◆ avf_close()

static int avf_close ( AVFormatContext s)
static

Definition at line 1010 of file avfoundation.m.

Variable Documentation

◆ avf_time_base

const int avf_time_base = 1000000
static

Definition at line 40 of file avfoundation.m.

Referenced by get_audio_config(), and get_video_config().

◆ avf_time_base_q

const AVRational avf_time_base_q
static
Initial value:
= {
.num = 1,
}
static const int avf_time_base
Definition: avfoundation.m:40

Definition at line 42 of file avfoundation.m.

◆ avf_pixel_formats

const struct AVFPixelFormatSpec avf_pixel_formats[]
static
Initial value:
= {
{ AV_PIX_FMT_MONOBLACK, kCVPixelFormatType_1Monochrome },
{ AV_PIX_FMT_RGB555BE, kCVPixelFormatType_16BE555 },
{ AV_PIX_FMT_RGB555LE, kCVPixelFormatType_16LE555 },
{ AV_PIX_FMT_RGB565BE, kCVPixelFormatType_16BE565 },
{ AV_PIX_FMT_RGB565LE, kCVPixelFormatType_16LE565 },
{ AV_PIX_FMT_RGB24, kCVPixelFormatType_24RGB },
{ AV_PIX_FMT_BGR24, kCVPixelFormatType_24BGR },
{ AV_PIX_FMT_0RGB, kCVPixelFormatType_32ARGB },
{ AV_PIX_FMT_BGR0, kCVPixelFormatType_32BGRA },
{ AV_PIX_FMT_0BGR, kCVPixelFormatType_32ABGR },
{ AV_PIX_FMT_RGB0, kCVPixelFormatType_32RGBA },
{ AV_PIX_FMT_BGR48BE, kCVPixelFormatType_48RGB },
{ AV_PIX_FMT_UYVY422, kCVPixelFormatType_422YpCbCr8 },
{ AV_PIX_FMT_YUVA444P, kCVPixelFormatType_4444YpCbCrA8R },
{ AV_PIX_FMT_YUVA444P16LE, kCVPixelFormatType_4444AYpCbCr16 },
{ AV_PIX_FMT_YUV444P, kCVPixelFormatType_444YpCbCr8 },
{ AV_PIX_FMT_YUV422P16, kCVPixelFormatType_422YpCbCr16 },
{ AV_PIX_FMT_YUV422P10, kCVPixelFormatType_422YpCbCr10 },
{ AV_PIX_FMT_YUV444P10, kCVPixelFormatType_444YpCbCr10 },
{ AV_PIX_FMT_YUV420P, kCVPixelFormatType_420YpCbCr8Planar },
{ AV_PIX_FMT_NV12, kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange },
{ AV_PIX_FMT_YUYV422, kCVPixelFormatType_422YpCbCr8_yuvs },
}
packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
Definition: pixfmt.h:77
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:67
packed RGB 8:8:8, 24bpp, RGBRGB...
Definition: pixfmt.h:64
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined ...
Definition: pixfmt.h:104
packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined
Definition: pixfmt.h:235
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian
Definition: pixfmt.h:102
packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined
Definition: pixfmt.h:234
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian
Definition: pixfmt.h:101
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
Definition: pixfmt.h:85
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:371
packed RGB 8:8:8, 24bpp, BGRBGR...
Definition: pixfmt.h:65
packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big...
Definition: pixfmt.h:144
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
Definition: pixfmt.h:173
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
Definition: pixfmt.h:63
planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
Definition: pixfmt.h:191
packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
Definition: pixfmt.h:236
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:369
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined
Definition: pixfmt.h:103
Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb...
Definition: pixfmt.h:72
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:62
packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined
Definition: pixfmt.h:233
#define AV_PIX_FMT_YUV422P16
Definition: pixfmt.h:380

Definition at line 52 of file avfoundation.m.

◆ options

const AVOption options[]
static
Initial value:
= {
{ "list_devices", "list available devices", 0x42, AV_OPT_TYPE_INT, {.i64=0}, 0, 1, AV_OPT_FLAG_DECODING_PARAM, "list_devices" },
{ "true", "", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, AV_OPT_FLAG_DECODING_PARAM, "list_devices" },
{ "false", "", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, AV_OPT_FLAG_DECODING_PARAM, "list_devices" },
{ "video_device_index", "select video device by index for devices with same name (starts at 0)", 0x42, AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
{ "audio_device_index", "select audio device by index for devices with same name (starts at 0)", 0x42, AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
{ "pixel_format", "set pixel format", 0x42, AV_OPT_TYPE_PIXEL_FMT, {.i64 = AV_PIX_FMT_YUV420P}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM},
{ "framerate", "set frame rate", 0x42, AV_OPT_TYPE_VIDEO_RATE, {.str = "ntsc"}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
{ "video_size", "set video size", 0x42, AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, 0, 0, AV_OPT_FLAG_DECODING_PARAM },
{ "capture_cursor", "capture the screen cursor", 0x42, AV_OPT_TYPE_INT, {.i64=0}, 0, 1, AV_OPT_FLAG_DECODING_PARAM },
{ "capture_mouse_clicks", "capture the screen mouse clicks", 0x42, AV_OPT_TYPE_INT, {.i64=0}, 0, 1, AV_OPT_FLAG_DECODING_PARAM },
{ NULL },
}
#define NULL
Definition: coverity.c:32
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
Definition: opt.h:277
offset must point to AVRational
Definition: opt.h:236
offset must point to two consecutive integers
Definition: opt.h:233
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:62

Definition at line 1017 of file avfoundation.m.

◆ avf_class

const AVClass avf_class
static
Initial value:
= {
.class_name = "AVFoundation input device",
.item_name = av_default_item_name,
.option = options,
}
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
static const AVOption options[]
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191

Definition at line 1032 of file avfoundation.m.

◆ ff_avfoundation_demuxer

AVInputFormat ff_avfoundation_demuxer
Initial value:
= {
.name = "avfoundation",
.long_name = NULL_IF_CONFIG_SMALL("AVFoundation input device"),
.priv_data_size = sizeof(AVFContext),
.priv_class = &avf_class,
}
static int flags
Definition: log.c:55
static av_cold int read_close(AVFormatContext *ctx)
Definition: libcdio.c:145
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
static int avf_read_header(AVFormatContext *s)
Definition: avfoundation.m:662
static int read_header(FFV1Context *f)
Definition: ffv1dec.c:530
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
Definition: avio_reading.c:42
static const AVClass avf_class
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:465
static int avf_read_packet(AVFormatContext *s, AVPacket *pkt)
Definition: avfoundation.m:895
static int avf_close(AVFormatContext *s)

Definition at line 1040 of file avfoundation.m.