FFmpeg
Data Structures | Macros | Functions | Variables
kmsgrab.c File Reference
#include <fcntl.h>
#include <unistd.h>
#include <drm.h>
#include <drm_fourcc.h>
#include <drm_mode.h>
#include <xf86drm.h>
#include <xf86drmMode.h>
#include "libavutil/hwcontext.h"
#include "libavutil/hwcontext_drm.h"
#include "libavutil/internal.h"
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "libavutil/pixfmt.h"
#include "libavutil/pixdesc.h"
#include "libavutil/time.h"
#include "libavformat/avformat.h"
#include "libavformat/internal.h"

Go to the source code of this file.

Data Structures

struct  KMSGrabContext
 

Macros

#define DRM_FORMAT_MOD_INVALID   ((1ULL << 56) - 1)
 
#define OFFSET(x)   offsetof(KMSGrabContext, x)
 
#define FLAGS   AV_OPT_FLAG_DECODING_PARAM
 

Functions

static void kmsgrab_free_desc (void *opaque, uint8_t *data)
 
static void kmsgrab_free_frame (void *opaque, uint8_t *data)
 
static int kmsgrab_get_fb (AVFormatContext *avctx, drmModePlane *plane, AVDRMFrameDescriptor *desc)
 
static int kmsgrab_read_packet (AVFormatContext *avctx, AVPacket *pkt)
 
static av_cold int kmsgrab_read_header (AVFormatContext *avctx)
 
static av_cold int kmsgrab_read_close (AVFormatContext *avctx)
 

Variables

struct {
   enum AVPixelFormat   pixfmt
 
   uint32_t   drm_format
 
kmsgrab_formats []
 
static const AVOption options []
 
static const AVClass kmsgrab_class
 
const AVInputFormat ff_kmsgrab_demuxer
 

Macro Definition Documentation

◆ DRM_FORMAT_MOD_INVALID

#define DRM_FORMAT_MOD_INVALID   ((1ULL << 56) - 1)

Definition at line 32 of file kmsgrab.c.

◆ OFFSET

#define OFFSET (   x)    offsetof(KMSGrabContext, x)

Definition at line 679 of file kmsgrab.c.

◆ FLAGS

#define FLAGS   AV_OPT_FLAG_DECODING_PARAM

Definition at line 680 of file kmsgrab.c.

Function Documentation

◆ kmsgrab_free_desc()

static void kmsgrab_free_desc ( void *  opaque,
uint8_t *  data 
)
static

Definition at line 74 of file kmsgrab.c.

Referenced by kmsgrab_read_packet().

◆ kmsgrab_free_frame()

static void kmsgrab_free_frame ( void *  opaque,
uint8_t *  data 
)
static

Definition at line 85 of file kmsgrab.c.

Referenced by kmsgrab_read_packet().

◆ kmsgrab_get_fb()

static int kmsgrab_get_fb ( AVFormatContext avctx,
drmModePlane *  plane,
AVDRMFrameDescriptor desc 
)
static

Definition at line 92 of file kmsgrab.c.

Referenced by kmsgrab_read_packet().

◆ kmsgrab_read_packet()

static int kmsgrab_read_packet ( AVFormatContext avctx,
AVPacket pkt 
)
static

Definition at line 262 of file kmsgrab.c.

◆ kmsgrab_read_header()

static av_cold int kmsgrab_read_header ( AVFormatContext avctx)
static

Definition at line 408 of file kmsgrab.c.

◆ kmsgrab_read_close()

static av_cold int kmsgrab_read_close ( AVFormatContext avctx)
static

Definition at line 669 of file kmsgrab.c.

Variable Documentation

◆ pixfmt

enum AVPixelFormat pixfmt

◆ drm_format

uint32_t drm_format

Definition at line 366 of file kmsgrab.c.

Referenced by kmsgrab_read_header().

◆ kmsgrab_formats

const { ... } kmsgrab_formats[]

Referenced by kmsgrab_read_header().

◆ options

const AVOption options[]
static
Initial value:
= {
{ "device", "DRM device path",
OFFSET(device_path), AV_OPT_TYPE_STRING,
{ .str = "/dev/dri/card0" }, 0, 0, FLAGS },
{ "format", "Pixel format for framebuffer",
{ .i64 = AV_PIX_FMT_NONE }, -1, INT32_MAX, FLAGS },
{ "format_modifier", "DRM format modifier for framebuffer",
OFFSET(drm_format_modifier), AV_OPT_TYPE_INT64,
{ .i64 = DRM_FORMAT_MOD_INVALID }, 0, INT64_MAX, FLAGS },
{ "crtc_id", "CRTC ID to define capture source",
OFFSET(source_crtc), AV_OPT_TYPE_INT64,
{ .i64 = 0 }, 0, UINT32_MAX, FLAGS },
{ "plane_id", "Plane ID to define capture source",
OFFSET(source_plane), AV_OPT_TYPE_INT64,
{ .i64 = 0 }, 0, UINT32_MAX, FLAGS },
{ "framerate", "Framerate to capture at",
{ .dbl = 30.0 }, 0, 1000, FLAGS },
{ NULL },
}

Definition at line 681 of file kmsgrab.c.

◆ kmsgrab_class

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

Definition at line 703 of file kmsgrab.c.

◆ ff_kmsgrab_demuxer

const AVInputFormat ff_kmsgrab_demuxer
Initial value:
= {
.name = "kmsgrab",
.long_name = NULL_IF_CONFIG_SMALL("KMS screen capture"),
.priv_data_size = sizeof(KMSGrabContext),
.priv_class = &kmsgrab_class,
}

Definition at line 711 of file kmsgrab.c.

AV_OPT_TYPE_RATIONAL
@ AV_OPT_TYPE_RATIONAL
Definition: opt.h:229
kmsgrab_read_close
static av_cold int kmsgrab_read_close(AVFormatContext *avctx)
Definition: kmsgrab.c:669
framerate
int framerate
Definition: h264_levels.c:65
read_close
static av_cold int read_close(AVFormatContext *ctx)
Definition: libcdio.c:141
kmsgrab_read_packet
static int kmsgrab_read_packet(AVFormatContext *avctx, AVPacket *pkt)
Definition: kmsgrab.c:262
DRM_FORMAT_MOD_INVALID
#define DRM_FORMAT_MOD_INVALID
Definition: kmsgrab.c:32
AV_OPT_TYPE_INT64
@ AV_OPT_TYPE_INT64
Definition: opt.h:225
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
read_header
static int read_header(FFV1Context *f)
Definition: ffv1dec.c:527
NULL
#define NULL
Definition: coverity.c:32
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:235
AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT
@ AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT
Definition: log.h:41
KMSGrabContext
Definition: kmsgrab.c:47
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:117
format
ofilter format
Definition: ffmpeg_filter.c:172
OFFSET
#define OFFSET(x)
Definition: kmsgrab.c:679
AVFMT_NOFILE
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:464
kmsgrab_read_header
static av_cold int kmsgrab_read_header(AVFormatContext *avctx)
Definition: kmsgrab.c:408
read_packet
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
Definition: avio_reading.c:42
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:65
options
static const AVOption options[]
Definition: kmsgrab.c:681
AV_OPT_TYPE_PIXEL_FMT
@ AV_OPT_TYPE_PIXEL_FMT
Definition: opt.h:235
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:561
kmsgrab_class
static const AVClass kmsgrab_class
Definition: kmsgrab.c:703
AV_OPT_TYPE_STRING
@ AV_OPT_TYPE_STRING
Definition: opt.h:228
FLAGS
#define FLAGS
Definition: kmsgrab.c:680