X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=libavcodec%2Fnvenc.h;h=fefc5f7f0bac83efc280984ae8d6cf0cbef47d8e;hb=af867e59d9ac3db5aaf7df4691f032e14ea51588;hp=c44c81e67596d43e70ca815b748663e3b5a08c77;hpb=3ea705767720033754e8d85566460390191ae27d;p=ffmpeg diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index c44c81e6759..fefc5f7f0ba 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" @@ -61,6 +62,14 @@ typedef void ID3D11Device; #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; @@ -72,7 +81,6 @@ typedef struct NvencSurface NV_ENC_OUTPUT_PTR output_surface; NV_ENC_BUFFER_FORMAT format; - int size; } NvencSurface; typedef struct NvencDynLoadFunctions @@ -97,6 +105,15 @@ enum { PRESET_LOW_LATENCY_HP, PRESET_LOSSLESS_DEFAULT, // lossless presets must be the last ones PRESET_LOSSLESS_HP, +#ifdef NVENC_HAVE_NEW_PRESETS + PRESET_P1, + PRESET_P2, + PRESET_P3, + PRESET_P4, + PRESET_P5, + PRESET_P6, + PRESET_P7, +#endif }; enum { @@ -117,6 +134,8 @@ enum { NVENC_LOSSLESS = 2, NVENC_ONE_PASS = 4, NVENC_TWO_PASSES = 8, + + NVENC_DEPRECATED_PRESET = 0x8000, }; enum { @@ -137,6 +156,8 @@ typedef struct NvencContext CUstream cu_stream; ID3D11Device *d3d11_device; + AVFrame *frame; + int nb_surfaces; NvencSurface *surfaces; @@ -145,8 +166,6 @@ typedef struct NvencContext AVFifoBuffer *output_surface_ready_queue; AVFifoBuffer *timestamp_list; - int encoder_flushing; - struct { void *ptr; int ptr_index; @@ -160,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; @@ -200,22 +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 */