FFmpeg  4.0
Data Structures | Macros | Functions | Variables
cuviddec.c File Reference
#include "compat/cuda/dynlink_loader.h"
#include "libavutil/buffer.h"
#include "libavutil/mathematics.h"
#include "libavutil/hwcontext.h"
#include "libavutil/hwcontext_cuda_internal.h"
#include "libavutil/fifo.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "avcodec.h"
#include "decode.h"
#include "hwaccel.h"
#include "internal.h"

Go to the source code of this file.

Data Structures

struct  CuvidContext
 
struct  CuvidParsedFrame
 

Macros

#define CHECK_CU(x)   check_cu(avctx, (x), #x)
 
#define OFFSET(x)   offsetof(CuvidContext, x)
 
#define VD   AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
 
#define DEFINE_CUVID_CODEC(x, X)
 

Functions

static int check_cu (AVCodecContext *avctx, CUresult err, const char *func)
 
static int CUDAAPI cuvid_handle_video_sequence (void *opaque, CUVIDEOFORMAT *format)
 
static int CUDAAPI cuvid_handle_picture_decode (void *opaque, CUVIDPICPARAMS *picparams)
 
static int CUDAAPI cuvid_handle_picture_display (void *opaque, CUVIDPARSERDISPINFO *dispinfo)
 
static int cuvid_is_buffer_full (AVCodecContext *avctx)
 
static int cuvid_decode_packet (AVCodecContext *avctx, const AVPacket *avpkt)
 
static int cuvid_output_frame (AVCodecContext *avctx, AVFrame *frame)
 
static int cuvid_decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
static av_cold int cuvid_decode_end (AVCodecContext *avctx)
 
static int cuvid_test_capabilities (AVCodecContext *avctx, const CUVIDPARSERPARAMS *cuparseinfo, int probed_width, int probed_height, int bit_depth)
 
static av_cold int cuvid_decode_init (AVCodecContext *avctx)
 
static void cuvid_flush (AVCodecContext *avctx)
 

Variables

static const AVOption options []
 
static const AVCodecHWConfigInternalcuvid_hw_configs []
 

Macro Definition Documentation

◆ CHECK_CU

#define CHECK_CU (   x)    check_cu(avctx, (x), #x)

◆ OFFSET

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

Definition at line 1096 of file cuviddec.c.

◆ VD

Definition at line 1097 of file cuviddec.c.

Referenced by decode_flush().

◆ DEFINE_CUVID_CODEC

#define DEFINE_CUVID_CODEC (   x,
 
)
Value:
static const AVClass x##_cuvid_class = { \
.class_name = #x "_cuvid", \
.item_name = av_default_item_name, \
.option = options, \
.version = LIBAVUTIL_VERSION_INT, \
}; \
AVCodec ff_##x##_cuvid_decoder = { \
.name = #x "_cuvid", \
.long_name = NULL_IF_CONFIG_SMALL("Nvidia CUVID " #X " decoder"), \
.type = AVMEDIA_TYPE_VIDEO, \
.id = AV_CODEC_ID_##X, \
.priv_data_size = sizeof(CuvidContext), \
.priv_class = &x##_cuvid_class, \
.close = cuvid_decode_end, \
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_CUDA, \
AV_PIX_FMT_NV12, \
AV_PIX_FMT_P010, \
AV_PIX_FMT_P016, \
AV_PIX_FMT_NONE }, \
.hw_configs = cuvid_hw_configs, \
.wrapper_name = "cuvid", \
};
static void flush(AVCodecContext *avctx)
static av_cold int cuvid_decode_init(AVCodecContext *avctx)
Definition: cuviddec.c:796
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define AV_CODEC_CAP_HARDWARE
Codec is backed by a hardware implementation.
Definition: avcodec.h:1056
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
static av_cold int cuvid_decode_end(AVCodecContext *avctx)
Definition: cuviddec.c:681
static CopyRet receive_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame)
Definition: crystalhd.c:560
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:42
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:72
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: avcodec.h:984
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
static void cuvid_flush(AVCodecContext *avctx)
Definition: cuviddec.c:1040
static int cuvid_output_frame(AVCodecContext *avctx, AVFrame *frame)
Definition: cuviddec.c:474
HW acceleration through CUDA.
Definition: pixfmt.h:231
static int cuvid_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: cuviddec.c:650
static const AVOption options[]
Definition: cuviddec.c:1098
static const AVCodecHWConfigInternal * cuvid_hw_configs[]
Definition: cuviddec.c:1111
Describe the class of an AVClass context structure.
Definition: log.h:67
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:266
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
Definition: avcodec.h:1041
AVPixelFormat
Pixel format.
Definition: pixfmt.h:60

Definition at line 1124 of file cuviddec.c.

Function Documentation

◆ check_cu()

static int check_cu ( AVCodecContext avctx,
CUresult  err,
const char *  func 
)
static

Definition at line 98 of file cuviddec.c.

◆ cuvid_handle_video_sequence()

static int CUDAAPI cuvid_handle_video_sequence ( void opaque,
CUVIDEOFORMAT *  format 
)
static

Definition at line 122 of file cuviddec.c.

Referenced by cuvid_decode_init().

◆ cuvid_handle_picture_decode()

static int CUDAAPI cuvid_handle_picture_decode ( void opaque,
CUVIDPICPARAMS *  picparams 
)
static

Definition at line 338 of file cuviddec.c.

Referenced by cuvid_decode_init().

◆ cuvid_handle_picture_display()

static int CUDAAPI cuvid_handle_picture_display ( void opaque,
CUVIDPARSERDISPINFO *  dispinfo 
)
static

Definition at line 354 of file cuviddec.c.

Referenced by cuvid_decode_init().

◆ cuvid_is_buffer_full()

static int cuvid_is_buffer_full ( AVCodecContext avctx)
static

Definition at line 377 of file cuviddec.c.

Referenced by cuvid_output_frame().

◆ cuvid_decode_packet()

static int cuvid_decode_packet ( AVCodecContext avctx,
const AVPacket avpkt 
)
static

Definition at line 384 of file cuviddec.c.

Referenced by cuvid_decode_frame(), and cuvid_output_frame().

◆ cuvid_output_frame()

static int cuvid_output_frame ( AVCodecContext avctx,
AVFrame frame 
)
static

Definition at line 474 of file cuviddec.c.

Referenced by cuvid_decode_frame().

◆ cuvid_decode_frame()

static int cuvid_decode_frame ( AVCodecContext avctx,
void data,
int got_frame,
AVPacket avpkt 
)
static

Definition at line 650 of file cuviddec.c.

◆ cuvid_decode_end()

static av_cold int cuvid_decode_end ( AVCodecContext avctx)
static

Definition at line 681 of file cuviddec.c.

Referenced by cuvid_decode_init().

◆ cuvid_test_capabilities()

static int cuvid_test_capabilities ( AVCodecContext avctx,
const CUVIDPARSERPARAMS *  cuparseinfo,
int  probed_width,
int  probed_height,
int  bit_depth 
)
static

Definition at line 708 of file cuviddec.c.

Referenced by cuvid_decode_init().

◆ cuvid_decode_init()

static av_cold int cuvid_decode_init ( AVCodecContext avctx)
static

Definition at line 796 of file cuviddec.c.

◆ cuvid_flush()

static void cuvid_flush ( AVCodecContext avctx)
static

Definition at line 1040 of file cuviddec.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{ "deint", "Set deinterlacing mode", OFFSET(deint_mode), AV_OPT_TYPE_INT, { .i64 = cudaVideoDeinterlaceMode_Weave }, cudaVideoDeinterlaceMode_Weave, cudaVideoDeinterlaceMode_Adaptive, VD, "deint" },
{ "weave", "Weave deinterlacing (do nothing)", 0, AV_OPT_TYPE_CONST, { .i64 = cudaVideoDeinterlaceMode_Weave }, 0, 0, VD, "deint" },
{ "bob", "Bob deinterlacing", 0, AV_OPT_TYPE_CONST, { .i64 = cudaVideoDeinterlaceMode_Bob }, 0, 0, VD, "deint" },
{ "adaptive", "Adaptive deinterlacing", 0, AV_OPT_TYPE_CONST, { .i64 = cudaVideoDeinterlaceMode_Adaptive }, 0, 0, VD, "deint" },
{ "gpu", "GPU to be used for decoding", OFFSET(cu_gpu), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VD },
{ "surfaces", "Maximum surfaces to be used for decoding", OFFSET(nb_surfaces), AV_OPT_TYPE_INT, { .i64 = 25 }, 0, INT_MAX, VD },
{ "drop_second_field", "Drop second field when deinterlacing", OFFSET(drop_second_field), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD },
{ "crop", "Crop (top)x(bottom)x(left)x(right)", OFFSET(crop_expr), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VD },
{ "resize", "Resize (width)x(height)", OFFSET(resize_expr), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VD },
{ NULL }
}
#define NULL
Definition: coverity.c:32
#define OFFSET(x)
Definition: cuviddec.c:1096
#define VD
Definition: cuviddec.c:1097

Definition at line 1098 of file cuviddec.c.

◆ cuvid_hw_configs

const AVCodecHWConfigInternal* cuvid_hw_configs[]
static
Initial value:
= {
.public = {
.pix_fmt = AV_PIX_FMT_CUDA,
.device_type = AV_HWDEVICE_TYPE_CUDA
},
.hwaccel = NULL,
},
}
#define NULL
Definition: coverity.c:32
The codec supports this format by some internal method.
Definition: avcodec.h:3370
HW acceleration through CUDA.
Definition: pixfmt.h:231
The codec supports this format via the hw_device_ctx interface.
Definition: avcodec.h:3354

Definition at line 1111 of file cuviddec.c.