101     const char *err_name;
 
  102     const char *err_string;
 
  106     if (err == CUDA_SUCCESS)
 
  109     ctx->
cudl->cuGetErrorName(err, &err_name);
 
  110     ctx->
cudl->cuGetErrorString(err, &err_string);
 
  113     if (err_name && err_string)
 
  120 #define CHECK_CU(x) check_cu(avctx, (x), #x) 
  127     CUVIDDECODECAPS *caps = 
NULL;
 
  128     CUVIDDECODECREATEINFO cuinfo;
 
  131     int old_width = avctx->
width;
 
  132     int old_height = avctx->
height;
 
  140     memset(&cuinfo, 0, 
sizeof(cuinfo));
 
  142     ctx->internal_error = 0;
 
  144     avctx->coded_width = cuinfo.ulWidth = 
format->coded_width;
 
  145     avctx->coded_height = cuinfo.ulHeight = 
format->coded_height;
 
  148     cuinfo.display_area.left = 
format->display_area.left + 
ctx->crop.left;
 
  149     cuinfo.display_area.top = 
format->display_area.top + 
ctx->crop.top;
 
  150     cuinfo.display_area.right = 
format->display_area.right - 
ctx->crop.right;
 
  151     cuinfo.display_area.bottom = 
format->display_area.bottom - 
ctx->crop.bottom;
 
  154     if (
ctx->resize_expr) {
 
  155         avctx->width = 
ctx->resize.width;
 
  156         avctx->height = 
ctx->resize.height;
 
  158         avctx->width = cuinfo.display_area.right - cuinfo.display_area.left;
 
  159         avctx->height = cuinfo.display_area.bottom - cuinfo.display_area.top;
 
  163     cuinfo.ulTargetWidth = avctx->width = (avctx->width + 1) & ~1;
 
  164     cuinfo.ulTargetHeight = avctx->height = (avctx->height + 1) & ~1;
 
  167     cuinfo.target_rect.left = 0;
 
  168     cuinfo.target_rect.top = 0;
 
  169     cuinfo.target_rect.right = cuinfo.ulTargetWidth;
 
  170     cuinfo.target_rect.bottom = cuinfo.ulTargetHeight;
 
  172     switch (
format->bit_depth_luma_minus8) {
 
  189     if (!caps || !caps->bIsSupported) {
 
  191                format->bit_depth_luma_minus8 + 8);
 
  197     if (surface_fmt < 0) {
 
  208     avctx->pix_fmt = surface_fmt;
 
  211     if (avctx->hw_frames_ctx) {
 
  225         (
AVRational){ avctx->width, avctx->height }));
 
  227     ctx->deint_mode_current = 
format->progressive_sequence
 
  228                               ? cudaVideoDeinterlaceMode_Weave
 
  231     if (!
format->progressive_sequence && 
ctx->deint_mode_current == cudaVideoDeinterlaceMode_Weave)
 
  236     if (
format->video_signal_description.video_full_range_flag)
 
  241     avctx->color_primaries = 
format->video_signal_description.color_primaries;
 
  242     avctx->color_trc = 
format->video_signal_description.transfer_characteristics;
 
  243     avctx->colorspace = 
format->video_signal_description.matrix_coefficients;
 
  246         avctx->bit_rate = 
format->bitrate;
 
  248     if (
format->frame_rate.numerator && 
format->frame_rate.denominator) {
 
  249         avctx->framerate.num = 
format->frame_rate.numerator;
 
  250         avctx->framerate.den = 
format->frame_rate.denominator;
 
  254             && avctx->coded_width == 
format->coded_width
 
  255             && avctx->coded_height == 
format->coded_height
 
  256             && avctx->width == old_width
 
  257             && avctx->height == old_height
 
  258             && 
ctx->chroma_format == 
format->chroma_format
 
  262     if (
ctx->cudecoder) {
 
  265         if (
ctx->internal_error < 0)
 
  270     if (hwframe_ctx->pool && (
 
  271             hwframe_ctx->width < avctx->width ||
 
  272             hwframe_ctx->height < avctx->height ||
 
  274             hwframe_ctx->sw_format != avctx->sw_pix_fmt)) {
 
  275         av_log(avctx, 
AV_LOG_ERROR, 
"AVHWFramesContext is already initialized with incompatible parameters\n");
 
  277         av_log(avctx, 
AV_LOG_DEBUG, 
"height: %d <-> %d\n", hwframe_ctx->height, avctx->height);
 
  285     if (
format->chroma_format != cudaVideoChromaFormat_420) {
 
  291     ctx->chroma_format = 
format->chroma_format;
 
  293     cuinfo.CodecType = 
ctx->codec_type = 
format->codec;
 
  294     cuinfo.ChromaFormat = 
format->chroma_format;
 
  296     switch (avctx->sw_pix_fmt) {
 
  298         cuinfo.OutputFormat = cudaVideoSurfaceFormat_NV12;
 
  302         cuinfo.OutputFormat = cudaVideoSurfaceFormat_P016;
 
  305         av_log(avctx, 
AV_LOG_ERROR, 
"Output formats other than NV12, P010 or P016 are not supported\n");
 
  310     cuinfo.ulNumDecodeSurfaces = 
ctx->nb_surfaces;
 
  311     cuinfo.ulNumOutputSurfaces = 1;
 
  312     cuinfo.ulCreationFlags = cudaVideoCreate_PreferCUVID;
 
  313     cuinfo.bitDepthMinus8 = 
format->bit_depth_luma_minus8;
 
  314     cuinfo.DeinterlaceMode = 
ctx->deint_mode_current;
 
  316     if (
ctx->deint_mode_current != cudaVideoDeinterlaceMode_Weave && !
ctx->drop_second_field)
 
  319     ctx->internal_error = 
CHECK_CU(
ctx->cvdl->cuvidCreateDecoder(&
ctx->cudecoder, &cuinfo));
 
  320     if (
ctx->internal_error < 0)
 
  323     if (!hwframe_ctx->pool) {
 
  325         hwframe_ctx->sw_format = avctx->sw_pix_fmt;
 
  326         hwframe_ctx->width = avctx->width;
 
  327         hwframe_ctx->height = avctx->height;
 
  345     ctx->
key_frame[picparams->CurrPicIdx] = picparams->intra_pic_flag;
 
  393     CUcontext 
dummy, cuda_ctx = device_hwctx->cuda_ctx;
 
  394     CUVIDSOURCEDATAPACKET cupkt;
 
  397     int ret = 0, eret = 0, is_flush = 
ctx->decoder_flushing;
 
  401     if (is_flush && avpkt && avpkt->size)
 
  407     if (
ctx->bsf && avpkt && avpkt->size) {
 
  424         avpkt = &filtered_packet;
 
  427     ret = 
CHECK_CU(
ctx->cudl->cuCtxPushCurrent(cuda_ctx));
 
  433     memset(&cupkt, 0, 
sizeof(cupkt));
 
  435     if (avpkt && avpkt->size) {
 
  436         cupkt.payload_size = avpkt->size;
 
  437         cupkt.payload = avpkt->data;
 
  440             cupkt.flags = CUVID_PKT_TIMESTAMP;
 
  441             if (avctx->pkt_timebase.num && avctx->pkt_timebase.den)
 
  444                 cupkt.timestamp = avpkt->pts;
 
  447         cupkt.flags = CUVID_PKT_ENDOFSTREAM;
 
  448         ctx->decoder_flushing = 1;
 
  451     ret = 
CHECK_CU(
ctx->cvdl->cuvidParseVideoData(
ctx->cuparser, &cupkt));
 
  459     if (
ctx->internal_error) {
 
  461         ret = 
ctx->internal_error;
 
  483     CUcontext 
dummy, cuda_ctx = device_hwctx->cuda_ctx;
 
  484     CUdeviceptr mapped_frame = 0;
 
  485     int ret = 0, eret = 0;
 
  516         unsigned int pitch = 0;
 
  522         memset(¶ms, 0, 
sizeof(params));
 
  523         params.progressive_frame = parsed_frame.
dispinfo.progressive_frame;
 
  525         params.top_field_first = parsed_frame.
dispinfo.top_field_first;
 
  544             for (i = 0; i < 2; i++) {
 
  545                 CUDA_MEMCPY2D cpy = {
 
  546                     .srcMemoryType = CU_MEMORYTYPE_DEVICE,
 
  547                     .dstMemoryType = CU_MEMORYTYPE_DEVICE,
 
  548                     .srcDevice     = mapped_frame,
 
  549                     .dstDevice     = (CUdeviceptr)frame->
data[i],
 
  554                     .Height        = avctx->
height >> (i ? 1 : 0),
 
  557                 ret = 
CHECK_CU(ctx->
cudl->cuMemcpy2DAsync(&cpy, device_hwctx->stream));
 
  564             ret = 
CHECK_CU(ctx->
cudl->cuStreamSynchronize(device_hwctx->stream));
 
  620                 frame->
pts += pts_diff;
 
  680     } 
else if (ret < 0) {
 
  711     cuvid_free_functions(&ctx->
cvdl);
 
  717                                    const CUVIDPARSERPARAMS *cuparseinfo,
 
  723     CUVIDDECODECAPS *caps;
 
  724     int res8 = 0, res10 = 0, res12 = 0;
 
  726     if (!ctx->
cvdl->cuvidGetDecoderCaps) {
 
  727         av_log(avctx, 
AV_LOG_WARNING, 
"Used Nvidia driver is too old to perform a capability check.\n");
 
  729 #
if defined(_WIN32) || defined(__CYGWIN__)
 
  734             ". Continuing blind.\n");
 
  735         ctx->
caps8.bIsSupported = ctx->
caps10.bIsSupported = 1;
 
  737         ctx->
caps12.bIsSupported = 0;
 
  742         = cuparseinfo->CodecType;
 
  744         = cudaVideoChromaFormat_420;
 
  746     ctx->
caps8.nBitDepthMinus8 = 0;
 
  747     ctx->
caps10.nBitDepthMinus8 = 2;
 
  748     ctx->
caps12.nBitDepthMinus8 = 4;
 
  755     av_log(avctx, 
AV_LOG_VERBOSE, 
"8 bit: supported: %d, min_width: %d, max_width: %d, min_height: %d, max_height: %d\n",
 
  757     av_log(avctx, 
AV_LOG_VERBOSE, 
"10 bit: supported: %d, min_width: %d, max_width: %d, min_height: %d, max_height: %d\n",
 
  759     av_log(avctx, 
AV_LOG_VERBOSE, 
"12 bit: supported: %d, min_width: %d, max_width: %d, min_height: %d, max_height: %d\n",
 
  779     if (!ctx->
caps8.bIsSupported) {
 
  784     if (!caps->bIsSupported) {
 
  789     if (probed_width > caps->nMaxWidth || probed_width < caps->nMinWidth) {
 
  791                probed_width, caps->nMinWidth, caps->nMaxWidth);
 
  795     if (probed_height > caps->nMaxHeight || probed_height < caps->nMinHeight) {
 
  797                probed_height, caps->nMinHeight, caps->nMaxHeight);
 
  810     CUVIDSOURCEDATAPACKET seq_pkt;
 
  811     CUcontext cuda_ctx = 
NULL;
 
  822     int probed_bit_depth = 8;
 
  826         probed_bit_depth = probe_desc->
comp[0].
depth;
 
  854     ret = cuvid_load_functions(&ctx->
cvdl, avctx);
 
  904     device_hwctx = device_ctx->
hwctx;
 
  911     memset(&seq_pkt, 0, 
sizeof(seq_pkt));
 
  916 #if CONFIG_H264_CUVID_DECODER 
  921 #if CONFIG_HEVC_CUVID_DECODER 
  926 #if CONFIG_MJPEG_CUVID_DECODER 
  931 #if CONFIG_MPEG1_CUVID_DECODER 
  936 #if CONFIG_MPEG2_CUVID_DECODER 
  941 #if CONFIG_MPEG4_CUVID_DECODER 
  946 #if CONFIG_VP8_CUVID_DECODER 
  951 #if CONFIG_VP9_CUVID_DECODER 
  956 #if CONFIG_VC1_CUVID_DECODER 
 1023     seq_pkt.payload = ctx->
cuparse_ext.raw_seqhdr_data;
 
 1024     seq_pkt.payload_size = ctx->
cuparse_ext.format.seqhdr_data_length;
 
 1026     if (seq_pkt.payload && seq_pkt.payload_size) {
 
 1053     CUcontext 
dummy, cuda_ctx = device_hwctx->cuda_ctx;
 
 1054     CUVIDSOURCEDATAPACKET seq_pkt = { 0 };
 
 1057     ret = 
CHECK_CU(
ctx->cudl->cuCtxPushCurrent(cuda_ctx));
 
 1064     if (!
ctx->frame_queue) {
 
 1069     if (
ctx->cudecoder) {
 
 1070         ctx->cvdl->cuvidDestroyDecoder(
ctx->cudecoder);
 
 1074     if (
ctx->cuparser) {
 
 1075         ctx->cvdl->cuvidDestroyVideoParser(
ctx->cuparser);
 
 1079     ret = 
CHECK_CU(
ctx->cvdl->cuvidCreateVideoParser(&
ctx->cuparser, &
ctx->cuparseinfo));
 
 1083     seq_pkt.payload = 
ctx->cuparse_ext.raw_seqhdr_data;
 
 1084     seq_pkt.payload_size = 
ctx->cuparse_ext.format.seqhdr_data_length;
 
 1086     if (seq_pkt.payload && seq_pkt.payload_size) {
 
 1087         ret = 
CHECK_CU(
ctx->cvdl->cuvidParseVideoData(
ctx->cuparser, &seq_pkt));
 
 1096     ctx->prev_pts = INT64_MIN;
 
 1097     ctx->decoder_flushing = 0;
 
 1104 #define OFFSET(x) offsetof(CuvidContext, x) 
 1105 #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM 
 1107     { 
"deint",    
"Set deinterlacing mode", 
OFFSET(deint_mode), 
AV_OPT_TYPE_INT,   { .i64 = cudaVideoDeinterlaceMode_Weave    }, cudaVideoDeinterlaceMode_Weave, cudaVideoDeinterlaceMode_Adaptive, 
VD, 
"deint" },
 
 1108     { 
"weave",    
"Weave deinterlacing (do nothing)",        0, 
AV_OPT_TYPE_CONST, { .i64 = cudaVideoDeinterlaceMode_Weave    }, 0, 0, 
VD, 
"deint" },
 
 1109     { 
"bob",      
"Bob deinterlacing",                       0, 
AV_OPT_TYPE_CONST, { .i64 = cudaVideoDeinterlaceMode_Bob      }, 0, 0, 
VD, 
"deint" },
 
 1110     { 
"adaptive", 
"Adaptive deinterlacing",                  0, 
AV_OPT_TYPE_CONST, { .i64 = cudaVideoDeinterlaceMode_Adaptive }, 0, 0, 
VD, 
"deint" },
 
 1112     { 
"surfaces", 
"Maximum surfaces to be used for decoding", 
OFFSET(nb_surfaces), 
AV_OPT_TYPE_INT, { .i64 = 25 }, 0, INT_MAX, 
VD },
 
 1113     { 
"drop_second_field", 
"Drop second field when deinterlacing", 
OFFSET(drop_second_field), 
AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, 
VD },
 
 1132 #define DEFINE_CUVID_CODEC(x, X) \ 
 1133     static const AVClass x##_cuvid_class = { \ 
 1134         .class_name = #x "_cuvid", \ 
 1135         .item_name = av_default_item_name, \ 
 1136         .option = options, \ 
 1137         .version = LIBAVUTIL_VERSION_INT, \ 
 1139     AVCodec ff_##x##_cuvid_decoder = { \ 
 1140         .name           = #x "_cuvid", \ 
 1141         .long_name      = NULL_IF_CONFIG_SMALL("Nvidia CUVID " #X " decoder"), \ 
 1142         .type           = AVMEDIA_TYPE_VIDEO, \ 
 1143         .id             = AV_CODEC_ID_##X, \ 
 1144         .priv_data_size = sizeof(CuvidContext), \ 
 1145         .priv_class     = &x##_cuvid_class, \ 
 1146         .init           = cuvid_decode_init, \ 
 1147         .close          = cuvid_decode_end, \ 
 1148         .decode         = cuvid_decode_frame, \ 
 1149         .receive_frame  = cuvid_output_frame, \ 
 1150         .flush          = cuvid_flush, \ 
 1151         .capabilities   = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, \ 
 1152         .pix_fmts       = (const enum AVPixelFormat[]){ AV_PIX_FMT_CUDA, \ 
 1156                                                         AV_PIX_FMT_NONE }, \ 
 1157         .hw_configs     = cuvid_hw_configs, \ 
 1158         .wrapper_name   = "cuvid", \ 
 1161 #if CONFIG_HEVC_CUVID_DECODER 
 1165 #if CONFIG_H264_CUVID_DECODER 
 1169 #if CONFIG_MJPEG_CUVID_DECODER 
 1173 #if CONFIG_MPEG1_CUVID_DECODER 
 1177 #if CONFIG_MPEG2_CUVID_DECODER 
 1181 #if CONFIG_MPEG4_CUVID_DECODER 
 1185 #if CONFIG_VP8_CUVID_DECODER 
 1189 #if CONFIG_VP9_CUVID_DECODER 
 1193 #if CONFIG_VC1_CUVID_DECODER 
This struct aggregates all the (hardware/vendor-specific) "high-level" state, i.e. 
 
AVCodecHWConfig public
This is the structure which will be returned to the user by avcodec_get_hw_config(). 
 
void av_bsf_free(AVBSFContext **ctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
 
int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Select the (possibly hardware accelerated) pixel format. 
 
const struct AVCodec * codec
 
AVCodecParameters * par_out
Parameters of the output stream. 
 
AVRational av_div_q(AVRational b, AVRational c)
Divide one rational by another. 
 
static const char * format[]
 
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it...
 
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
 
This structure describes decoded (raw) audio or video data. 
 
ptrdiff_t const GLvoid * data
 
#define AV_CODEC_FLAG_INTERLACED_DCT
Use interlaced DCT. 
 
The codec supports this format by some internal method. 
 
int coded_width
Bitstream width / height, may be different from width/height e.g. 
 
int64_t pkt_pos
reordered pos from the last AVPacket that has been input into the decoder 
 
static av_cold int cuvid_decode_init(AVCodecContext *avctx)
 
#define AV_LOG_WARNING
Something somehow does not look correct. 
 
AVCUDADeviceContextInternal * internal
 
The bitstream filter state. 
 
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
 
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
 
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
 
CUVIDPARSERPARAMS cuparseinfo
 
int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
Set various frame properties from the codec context / packet data. 
 
static av_cold int cuvid_decode_end(AVCodecContext *avctx)
 
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set. 
 
int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int(*func)(void *, void *, int))
Feed data from a user-supplied callback to an AVFifoBuffer. 
 
AVBufferRef * hw_frames_ctx
For hwaccel-format frames, this should be a reference to the AVHWFramesContext describing the frame...
 
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx)
Allocate a context for a given bitstream filter. 
 
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet. 
 
struct CuvidContext::@68 crop
 
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed. 
 
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values. 
 
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development. 
 
static int cuvid_decode_packet(AVCodecContext *avctx, const AVPacket *avpkt)
 
int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt)
Called by decoders to get the next packet for decoding. 
 
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user). 
 
enum AVPixelFormat pix_fmt
A hardware pixel format which the codec can use. 
 
struct CuvidContext::@69 resize
 
AVFifoBuffer * frame_queue
 
uint8_t * extradata
some codecs need / can use extradata like Huffman tables. 
 
void * hwctx
The format-specific data, allocated and freed by libavutil along with this context. 
 
int av_hwdevice_ctx_create(AVBufferRef **pdevice_ref, enum AVHWDeviceType type, const char *device, AVDictionary *opts, int flags)
Open a device of the specified type and create an AVHWDeviceContext for it. 
 
int flags
Flags modifying the (de)muxer behaviour. 
 
int ff_set_sar(AVCodecContext *avctx, AVRational sar)
Check that the provided sample aspect ratio is valid and set it on the codec context. 
 
#define AVERROR_EOF
End of file. 
 
#define AV_LOG_VERBOSE
Detailed information. 
 
int interlaced_frame
The content of the picture is interlaced. 
 
The codec supports this format via the hw_device_ctx interface. 
 
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet. 
 
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers. 
 
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are. 
 
cudaVideoChromaFormat chroma_format
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
cudaVideoCodec codec_type
 
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g. 
 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
 
int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void(*func)(void *, void *, int))
Feed data from an AVFifoBuffer to a user-supplied callback. 
 
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
 
const char * name
Name of the codec implementation. 
 
int av_hwframe_ctx_init(AVBufferRef *ref)
Finalize the context before use. 
 
static void cuvid_flush(AVCodecContext *avctx)
 
static const uint8_t offset[127][2]
 
int av_hwframe_get_buffer(AVBufferRef *hwframe_ref, AVFrame *frame, int flags)
Allocate a new frame attached to the given AVHWFramesContext. 
 
int extradata_size
Size of the extradata content in bytes. 
 
int av_hwframe_transfer_data(AVFrame *dst, const AVFrame *src, int flags)
Copy data to or from a hw surface. 
 
static int check_cu(AVCodecContext *avctx, CUresult err, const char *func)
 
uint8_t nb_components
The number of components each pixel has, (1-4) 
 
AVHWDeviceContext * device_ctx
The parent AVHWDeviceContext. 
 
static int CUDAAPI cuvid_handle_video_sequence(void *opaque, CUVIDEOFORMAT *format)
 
int width
picture width / height. 
 
static int filter_packet(AVFormatContext *avf, ConcatStream *cs, AVPacket *pkt)
 
AVBufferRef * hw_frames_ctx
A reference to the AVHWFramesContext describing the input (for encoding) or output (decoding) frames...
 
static void bit_depth(AudioStatsContext *s, uint64_t mask, uint64_t imask, AVRational *depth)
 
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering. 
 
static int cuvid_output_frame(AVCodecContext *avctx, AVFrame *frame)
 
#define AVERROR_BSF_NOT_FOUND
Bitstream filter not found. 
 
FFmpeg internal API for CUDA. 
 
static int CUDAAPI cuvid_handle_picture_decode(void *opaque, CUVIDPICPARAMS *picparams)
 
HW acceleration through CUDA. 
 
preferred ID for MPEG-1/2 video decoding 
 
static void error(const char *err)
 
the normal 2^n-1 "JPEG" YUV ranges 
 
static int cuvid_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
 
Libavcodec external API header. 
 
int64_t pkt_duration
duration of the corresponding packet, expressed in AVStream->time_base units, 0 if unknown...
 
int av_fifo_size(const AVFifoBuffer *f)
Return the amount of data in bytes in the AVFifoBuffer, that is the amount of data you can read from ...
 
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
 
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
 
main external API structure. 
 
void av_packet_unref(AVPacket *pkt)
Wipe the packet. 
 
uint8_t * data
The data buffer. 
 
static int cuvid_test_capabilities(AVCodecContext *avctx, const CUVIDPARSERPARAMS *cuparseinfo, int probed_width, int probed_height, int bit_depth)
 
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame. 
 
a very simple circular buffer FIFO implementation 
 
static const AVOption options[]
 
static const AVCodecHWConfigInternal * cuvid_hw_configs[]
 
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2. 
 
This struct is allocated as AVHWDeviceContext.hwctx. 
 
Describe the class of an AVClass context structure. 
 
Rational number (pair of numerator and denominator). 
 
int avcodec_parameters_from_context(AVCodecParameters *par, const AVCodecContext *codec)
Fill the parameters struct based on the values from the supplied codec context. 
 
This struct describes a set or pool of "hardware" frames (i.e. 
 
int(* func)(AVBPrint *dst, const char *in, const char *arg)
 
refcounted data buffer API 
 
#define DEFINE_CUVID_CODEC(x, X)
 
static enum AVPixelFormat pix_fmts[]
 
CUVIDPARSERDISPINFO dispinfo
 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
 
AVBufferRef * device_ref
A reference to the parent AVHWDeviceContext. 
 
attribute_deprecated int64_t pkt_pts
PTS copied from the AVPacket that was decoded to produce this frame. 
 
the normal 219*2^(n-8) "MPEG" YUV ranges 
 
A reference to a data buffer. 
 
#define FF_DISABLE_DEPRECATION_WARNINGS
 
common internal api header. 
 
AVBufferRef * av_hwframe_ctx_alloc(AVBufferRef *device_ref_in)
Allocate an AVHWFramesContext tied to a given device context. 
 
static int CUDAAPI cuvid_handle_picture_display(void *opaque, CUVIDPARSERDISPINFO *dispinfo)
 
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer. 
 
AVFifoBuffer * av_fifo_alloc(unsigned int size)
Initialize an AVFifoBuffer. 
 
#define FF_ENABLE_DEPRECATION_WARNINGS
 
int top_field_first
If the content is interlaced, is top field displayed first. 
 
int key_frame
1 -> keyframe, 0-> not 
 
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent. 
 
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals. 
 
CUVIDEOFORMATEX cuparse_ext
 
void av_fifo_freep(AVFifoBuffer **f)
Free an AVFifoBuffer and reset pointer to NULL. 
 
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown. 
 
int depth
Number of bits in the component. 
 
AVBufferRef * hw_device_ctx
A reference to the AVHWDeviceContext describing the device which will be used by a hardware encoder/d...
 
int pkt_size
size of the corresponding packet containing the compressed frame. 
 
#define AVERROR_EXTERNAL
Generic error in an external library. 
 
AVPixelFormat
Pixel format. 
 
This structure stores compressed data. 
 
AVCodecParameters * par_in
Parameters of the input stream. 
 
#define AV_NOPTS_VALUE
Undefined timestamp value. 
 
static int cuvid_is_buffer_full(AVCodecContext *avctx)