1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

avcodec/nvenc: add support for new 10 bit MSB pixel formats

This commit is contained in:
Timo Rothenpieler
2025-07-04 18:52:25 +02:00
parent 02a7c85753
commit 8304a1abc7

View File

@ -68,6 +68,7 @@ const enum AVPixelFormat ff_nvenc_pix_fmts[] = {
AV_PIX_FMT_P210, AV_PIX_FMT_P210,
AV_PIX_FMT_P216, AV_PIX_FMT_P216,
#endif #endif
AV_PIX_FMT_YUV444P10MSB,
AV_PIX_FMT_YUV444P16, // Truncated to 10bits AV_PIX_FMT_YUV444P16, // Truncated to 10bits
AV_PIX_FMT_0RGB32, AV_PIX_FMT_0RGB32,
AV_PIX_FMT_RGB32, AV_PIX_FMT_RGB32,
@ -76,6 +77,7 @@ const enum AVPixelFormat ff_nvenc_pix_fmts[] = {
AV_PIX_FMT_X2RGB10, AV_PIX_FMT_X2RGB10,
AV_PIX_FMT_X2BGR10, AV_PIX_FMT_X2BGR10,
AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRP,
AV_PIX_FMT_GBRP10MSB,
AV_PIX_FMT_GBRP16, // Truncated to 10bits AV_PIX_FMT_GBRP16, // Truncated to 10bits
AV_PIX_FMT_CUDA, AV_PIX_FMT_CUDA,
#if CONFIG_D3D11VA #if CONFIG_D3D11VA
@ -98,9 +100,11 @@ const AVCodecHWConfigInternal *const ff_nvenc_hw_configs[] = {
pix_fmt == AV_PIX_FMT_P016 || \ pix_fmt == AV_PIX_FMT_P016 || \
pix_fmt == AV_PIX_FMT_P210 || \ pix_fmt == AV_PIX_FMT_P210 || \
pix_fmt == AV_PIX_FMT_P216 || \ pix_fmt == AV_PIX_FMT_P216 || \
pix_fmt == AV_PIX_FMT_YUV444P10MSB || \
pix_fmt == AV_PIX_FMT_YUV444P16 || \ pix_fmt == AV_PIX_FMT_YUV444P16 || \
pix_fmt == AV_PIX_FMT_X2RGB10 || \ pix_fmt == AV_PIX_FMT_X2RGB10 || \
pix_fmt == AV_PIX_FMT_X2BGR10 || \ pix_fmt == AV_PIX_FMT_X2BGR10 || \
pix_fmt == AV_PIX_FMT_GBRP10MSB || \
pix_fmt == AV_PIX_FMT_GBRP16) pix_fmt == AV_PIX_FMT_GBRP16)
#define IS_RGB(pix_fmt) (pix_fmt == AV_PIX_FMT_0RGB32 || \ #define IS_RGB(pix_fmt) (pix_fmt == AV_PIX_FMT_0RGB32 || \
@ -111,8 +115,10 @@ const AVCodecHWConfigInternal *const ff_nvenc_hw_configs[] = {
pix_fmt == AV_PIX_FMT_X2BGR10) pix_fmt == AV_PIX_FMT_X2BGR10)
#define IS_YUV444(pix_fmt) (pix_fmt == AV_PIX_FMT_YUV444P || \ #define IS_YUV444(pix_fmt) (pix_fmt == AV_PIX_FMT_YUV444P || \
pix_fmt == AV_PIX_FMT_YUV444P10MSB || \
pix_fmt == AV_PIX_FMT_YUV444P16 || \ pix_fmt == AV_PIX_FMT_YUV444P16 || \
pix_fmt == AV_PIX_FMT_GBRP || \ pix_fmt == AV_PIX_FMT_GBRP || \
pix_fmt == AV_PIX_FMT_GBRP10MSB || \
pix_fmt == AV_PIX_FMT_GBRP16 || \ pix_fmt == AV_PIX_FMT_GBRP16 || \
(ctx->rgb_mode == NVENC_RGB_MODE_444 && IS_RGB(pix_fmt))) (ctx->rgb_mode == NVENC_RGB_MODE_444 && IS_RGB(pix_fmt)))
@ -121,6 +127,7 @@ const AVCodecHWConfigInternal *const ff_nvenc_hw_configs[] = {
pix_fmt == AV_PIX_FMT_P216) pix_fmt == AV_PIX_FMT_P216)
#define IS_GBRP(pix_fmt) (pix_fmt == AV_PIX_FMT_GBRP || \ #define IS_GBRP(pix_fmt) (pix_fmt == AV_PIX_FMT_GBRP || \
pix_fmt == AV_PIX_FMT_GBRP10MSB || \
pix_fmt == AV_PIX_FMT_GBRP16) pix_fmt == AV_PIX_FMT_GBRP16)
static const struct { static const struct {
@ -1991,7 +1998,9 @@ static NV_ENC_BUFFER_FORMAT nvenc_map_buffer_format(enum AVPixelFormat pix_fmt)
case AV_PIX_FMT_YUV444P: case AV_PIX_FMT_YUV444P:
return NV_ENC_BUFFER_FORMAT_YUV444; return NV_ENC_BUFFER_FORMAT_YUV444;
case AV_PIX_FMT_GBRP16: case AV_PIX_FMT_GBRP16:
case AV_PIX_FMT_GBRP10MSB:
case AV_PIX_FMT_YUV444P16: case AV_PIX_FMT_YUV444P16:
case AV_PIX_FMT_YUV444P10MSB:
return NV_ENC_BUFFER_FORMAT_YUV444_10BIT; return NV_ENC_BUFFER_FORMAT_YUV444_10BIT;
case AV_PIX_FMT_0RGB32: case AV_PIX_FMT_0RGB32:
case AV_PIX_FMT_RGB32: case AV_PIX_FMT_RGB32: