#include "config.h"
#include "libavformat/internal.h"
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/time.h>
#include <linux/videodev2.h>
#include <time.h>
#include "libavutil/imgutils.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "avdevice.h"
#include "libavutil/parseutils.h"
#include "libavutil/pixdesc.h"
#include "libavutil/avstring.h"
Go to the source code of this file.
Data Structures | |
struct | video_data |
struct | buff_data |
struct | fmt_map |
Defines | |
#define | v4l2_open open |
#define | v4l2_close close |
#define | v4l2_dup dup |
#define | v4l2_ioctl ioctl |
#define | v4l2_read read |
#define | v4l2_mmap mmap |
#define | v4l2_munmap munmap |
#define | V4L_ALLFORMATS 3 |
#define | V4L_RAWFORMATS 1 |
#define | V4L_COMPFORMATS 2 |
#define | OFFSET(x) offsetof(struct video_data, x) |
#define | DEC AV_OPT_FLAG_DECODING_PARAM |
Functions | |
static int | device_open (AVFormatContext *ctx) |
static int | device_init (AVFormatContext *ctx, int *width, int *height, uint32_t pix_fmt) |
static int | first_field (int fd) |
static uint32_t | fmt_ff2v4l (enum PixelFormat pix_fmt, enum CodecID codec_id) |
static enum PixelFormat | fmt_v4l2ff (uint32_t v4l2_fmt, enum CodecID codec_id) |
static enum CodecID | fmt_v4l2codec (uint32_t v4l2_fmt) |
static void | list_formats (AVFormatContext *ctx, int fd, int type) |
static int | mmap_init (AVFormatContext *ctx) |
static void | mmap_release_buffer (AVPacket *pkt) |
static int | mmap_read_frame (AVFormatContext *ctx, AVPacket *pkt) |
static int | mmap_start (AVFormatContext *ctx) |
static void | mmap_close (struct video_data *s) |
static int | v4l2_set_parameters (AVFormatContext *s1, AVFormatParameters *ap) |
static uint32_t | device_try_init (AVFormatContext *s1, enum PixelFormat pix_fmt, int *width, int *height, enum CodecID *codec_id) |
static int | v4l2_read_header (AVFormatContext *s1, AVFormatParameters *ap) |
static int | v4l2_read_packet (AVFormatContext *s1, AVPacket *pkt) |
static int | v4l2_read_close (AVFormatContext *s1) |
Variables | |
static const int | desired_video_buffers = 256 |
static struct fmt_map | fmt_conversion_table [] |
static const AVOption | options [] |
static const AVClass | v4l2_class |
AVInputFormat | ff_v4l2_demuxer |
Part of this file is based on the V4L2 video capture example (http://v4l2spec.bytesex.org/v4l2spec/capture.c)
Thanks to Michael Niedermayer for providing the mapping between V4L2_PIX_FMT_* and PIX_FMT_*
Definition in file v4l2.c.
#define OFFSET | ( | x | ) | offsetof(struct video_data, x) |
#define v4l2_close close |
Definition at line 62 of file v4l2.c.
Referenced by device_open(), v4l2_read_close(), and v4l2_read_header().
#define v4l2_ioctl ioctl |
Definition at line 64 of file v4l2.c.
Referenced by device_init(), device_open(), first_field(), mmap_close(), mmap_init(), mmap_read_frame(), mmap_release_buffer(), mmap_start(), v4l2_read_header(), and v4l2_set_parameters().
#define v4l2_mmap mmap |
#define v4l2_munmap munmap |
#define v4l2_open open |
#define V4L_COMPFORMATS 2 |
#define V4L_RAWFORMATS 1 |
static int device_init | ( | AVFormatContext * | ctx, | |
int * | width, | |||
int * | height, | |||
uint32_t | pix_fmt | |||
) | [static] |
static int device_open | ( | AVFormatContext * | ctx | ) | [static] |
static uint32_t device_try_init | ( | AVFormatContext * | s1, | |
enum PixelFormat | pix_fmt, | |||
int * | width, | |||
int * | height, | |||
enum CodecID * | codec_id | |||
) | [static] |
static int first_field | ( | int | fd | ) | [static] |
Definition at line 236 of file v4l2.c.
Referenced by dnxhd_decode_frame(), dnxhd_encode_picture(), and v4l2_read_header().
static uint32_t fmt_ff2v4l | ( | enum PixelFormat | pix_fmt, | |
enum CodecID | codec_id | |||
) | [static] |
static enum CodecID fmt_v4l2codec | ( | uint32_t | v4l2_fmt | ) | [static] |
static enum PixelFormat fmt_v4l2ff | ( | uint32_t | v4l2_fmt, | |
enum CodecID | codec_id | |||
) | [static] |
static void list_formats | ( | AVFormatContext * | ctx, | |
int | fd, | |||
int | type | |||
) | [static] |
static void mmap_close | ( | struct video_data * | s | ) | [static] |
static int mmap_init | ( | AVFormatContext * | ctx | ) | [static] |
static int mmap_read_frame | ( | AVFormatContext * | ctx, | |
AVPacket * | pkt | |||
) | [static] |
static void mmap_release_buffer | ( | AVPacket * | pkt | ) | [static] |
static int mmap_start | ( | AVFormatContext * | ctx | ) | [static] |
static int v4l2_read_close | ( | AVFormatContext * | s1 | ) | [static] |
static int v4l2_read_header | ( | AVFormatContext * | s1, | |
AVFormatParameters * | ap | |||
) | [static] |
static int v4l2_read_packet | ( | AVFormatContext * | s1, | |
AVPacket * | pkt | |||
) | [static] |
static int v4l2_set_parameters | ( | AVFormatContext * | s1, | |
AVFormatParameters * | ap | |||
) | [static] |
const int desired_video_buffers = 256 [static] |
Initial value:
{ .name = "video4linux2,v4l2", .long_name = NULL_IF_CONFIG_SMALL("Video4Linux2 device grab"), .priv_data_size = sizeof(struct video_data), .read_header = v4l2_read_header, .read_packet = v4l2_read_packet, .read_close = v4l2_read_close, .flags = AVFMT_NOFILE, .priv_class = &v4l2_class, }
struct fmt_map fmt_conversion_table[] [static] |
Initial value:
{ { PIX_FMT_YUV420P, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_YUV420 }, { PIX_FMT_YUV422P, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_YUV422P }, { PIX_FMT_YUYV422, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_YUYV }, { PIX_FMT_UYVY422, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_UYVY }, { PIX_FMT_YUV411P, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_YUV411P }, { PIX_FMT_YUV410P, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_YUV410 }, { PIX_FMT_RGB555, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_RGB555 }, { PIX_FMT_RGB565, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_RGB565 }, { PIX_FMT_BGR24, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_BGR24 }, { PIX_FMT_RGB24, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_RGB24 }, { PIX_FMT_BGRA, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_BGR32 }, { PIX_FMT_GRAY8, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_GREY }, { PIX_FMT_NV12, CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_NV12 }, { PIX_FMT_NONE, CODEC_ID_MJPEG, V4L2_PIX_FMT_MJPEG }, { PIX_FMT_NONE, CODEC_ID_MJPEG, V4L2_PIX_FMT_JPEG }, }
Initial value:
{ { "standard", "TV standard, used only by analog frame grabber", OFFSET(standard), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC }, { "channel", "TV channel, used only by frame grabber", OFFSET(channel), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, DEC }, { "video_size", "A string describing frame size, such as 640x480 or hd720.", OFFSET(video_size), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, { "pixel_format", "Preferred pixel format", OFFSET(pixel_format), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, { "input_format", "Preferred pixel format (for raw video) or codec name", OFFSET(pixel_format), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, { "framerate", "", OFFSET(framerate), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, { "list_formats", "List available formats and exit", OFFSET(list_format), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, DEC, "list_formats" }, { "all", "Show all available formats", OFFSET(list_format), AV_OPT_TYPE_CONST, {.dbl = V4L_ALLFORMATS }, 0, INT_MAX, DEC, "list_formats" }, { "raw", "Show only non-compressed formats", OFFSET(list_format), AV_OPT_TYPE_CONST, {.dbl = V4L_RAWFORMATS }, 0, INT_MAX, DEC, "list_formats" }, { "compressed", "Show only compressed formats", OFFSET(list_format), AV_OPT_TYPE_CONST, {.dbl = V4L_COMPFORMATS }, 0, INT_MAX, DEC, "list_formats" }, { NULL }, }
const AVClass v4l2_class [static] |
Initial value:
{ .class_name = "V4L2 indev", .item_name = av_default_item_name, .option = options, .version = LIBAVUTIL_VERSION_INT, }