X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fnvenc.h;h=314c270e7486a09e3c41724fe9b89887e6b0481b;hb=d07534b5f5f20b4f780f5b0284aca6354da00695;hp=892a001f691a1df1f35b77d258bf5c8dd231af27;hpb=e929b2f248a9c49761475e07d1a089e05912d1c6;p=ffmpeg diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index 892a001f691..314c270e748 100644 --- a/libavcodec/nvenc.h +++ b/libavcodec/nvenc.h @@ -33,6 +33,7 @@ typedef void ID3D11Device; #include "compat/cuda/dynlink_loader.h" #include "libavutil/fifo.h" #include "libavutil/opt.h" +#include "hwconfig.h" #include "avcodec.h" @@ -54,6 +55,21 @@ typedef void ID3D11Device; #define NVENC_HAVE_HEVC_BFRAME_REF_MODE #endif +// SDK 9.1 compile time feature checks +#if NVENCAPI_CHECK_VERSION(9, 1) +#define NVENC_HAVE_MULTIPLE_REF_FRAMES +#define NVENC_HAVE_CUSTREAM_PTR +#define NVENC_HAVE_GETLASTERRORSTRING +#endif + +// SDK 10.0 compile time feature checks +#if NVENCAPI_CHECK_VERSION(10, 0) +#define NVENC_HAVE_NEW_PRESETS +#define NVENC_HAVE_MULTIPASS +#define NVENC_HAVE_LDKFS +#define NVENC_HAVE_H264_LVL6 +#endif + typedef struct NvencSurface { NV_ENC_INPUT_PTR input_surface; @@ -65,7 +81,6 @@ typedef struct NvencSurface NV_ENC_OUTPUT_PTR output_surface; NV_ENC_BUFFER_FORMAT format; - int size; } NvencSurface; typedef struct NvencDynLoadFunctions @@ -88,8 +103,17 @@ enum { PRESET_LOW_LATENCY_DEFAULT , PRESET_LOW_LATENCY_HQ , PRESET_LOW_LATENCY_HP, - PRESET_LOSSLESS_DEFAULT, // lossless presets must be the last ones + PRESET_LOSSLESS_DEFAULT, PRESET_LOSSLESS_HP, +#ifdef NVENC_HAVE_NEW_PRESETS + PRESET_P1, + PRESET_P2, + PRESET_P3, + PRESET_P4, + PRESET_P5, + PRESET_P6, + PRESET_P7, +#endif }; enum { @@ -110,6 +134,8 @@ enum { NVENC_LOSSLESS = 2, NVENC_ONE_PASS = 4, NVENC_TWO_PASSES = 8, + + NVENC_DEPRECATED_PRESET = 0x8000, }; enum { @@ -127,8 +153,11 @@ typedef struct NvencContext NV_ENC_CONFIG encode_config; CUcontext cu_context; CUcontext cu_context_internal; + CUstream cu_stream; ID3D11Device *d3d11_device; + AVFrame *frame; + int nb_surfaces; NvencSurface *surfaces; @@ -137,8 +166,6 @@ typedef struct NvencContext AVFifoBuffer *output_surface_ready_queue; AVFifoBuffer *timestamp_list; - int encoder_flushing; - struct { void *ptr; int ptr_index; @@ -152,11 +179,6 @@ typedef struct NvencContext * AVCodecContext.pix_fmt when using hwaccel frames on input */ enum AVPixelFormat data_pix_fmt; - /* timestamps of the first two frames, for computing the first dts - * when B-frames are present */ - int64_t initial_pts[2]; - int first_packet_output; - int support_dyn_bitrate; void *nvencoder; @@ -192,20 +214,22 @@ typedef struct NvencContext int coder; int b_ref_mode; int a53_cc; + int s12m_tc; int dpb_size; + int tuning_info; + int multipass; + int ldkfs; } NvencContext; int ff_nvenc_encode_init(AVCodecContext *avctx); int ff_nvenc_encode_close(AVCodecContext *avctx); -int ff_nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame); - int ff_nvenc_receive_packet(AVCodecContext *avctx, AVPacket *pkt); -int ff_nvenc_encode_frame(AVCodecContext *avctx, AVPacket *pkt, - const AVFrame *frame, int *got_packet); +void ff_nvenc_encode_flush(AVCodecContext *avctx); extern const enum AVPixelFormat ff_nvenc_pix_fmts[]; +extern const AVCodecHWConfigInternal *const ff_nvenc_hw_configs[]; #endif /* AVCODEC_NVENC_H */