#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,
}
1.5.8