mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avcodec/nvenc: add support for gbrp rgb input
This commit is contained in:
parent
47b8871ca6
commit
7555d6f74c
@ -52,6 +52,8 @@ const enum AVPixelFormat ff_nvenc_pix_fmts[] = {
|
|||||||
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_0BGR32,
|
AV_PIX_FMT_0BGR32,
|
||||||
|
AV_PIX_FMT_GBRP,
|
||||||
|
AV_PIX_FMT_GBRP16, // Truncated to 10bits
|
||||||
AV_PIX_FMT_CUDA,
|
AV_PIX_FMT_CUDA,
|
||||||
#if CONFIG_D3D11VA
|
#if CONFIG_D3D11VA
|
||||||
AV_PIX_FMT_D3D11,
|
AV_PIX_FMT_D3D11,
|
||||||
@ -69,12 +71,18 @@ const AVCodecHWConfigInternal *const ff_nvenc_hw_configs[] = {
|
|||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define IS_10BIT(pix_fmt) (pix_fmt == AV_PIX_FMT_P010 || \
|
#define IS_10BIT(pix_fmt) (pix_fmt == AV_PIX_FMT_P010 || \
|
||||||
pix_fmt == AV_PIX_FMT_P016 || \
|
pix_fmt == AV_PIX_FMT_P016 || \
|
||||||
pix_fmt == AV_PIX_FMT_YUV444P16)
|
pix_fmt == AV_PIX_FMT_YUV444P16 || \
|
||||||
|
pix_fmt == AV_PIX_FMT_GBRP16)
|
||||||
|
|
||||||
#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_YUV444P16)
|
pix_fmt == AV_PIX_FMT_YUV444P16 || \
|
||||||
|
pix_fmt == AV_PIX_FMT_GBRP || \
|
||||||
|
pix_fmt == AV_PIX_FMT_GBRP16)
|
||||||
|
|
||||||
|
#define IS_GBRP(pix_fmt) (pix_fmt == AV_PIX_FMT_GBRP || \
|
||||||
|
pix_fmt == AV_PIX_FMT_GBRP16)
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
NVENCSTATUS nverr;
|
NVENCSTATUS nverr;
|
||||||
@ -1028,14 +1036,14 @@ static av_cold int nvenc_setup_h264_config(AVCodecContext *avctx)
|
|||||||
NV_ENC_CONFIG_H264 *h264 = &cc->encodeCodecConfig.h264Config;
|
NV_ENC_CONFIG_H264 *h264 = &cc->encodeCodecConfig.h264Config;
|
||||||
NV_ENC_CONFIG_H264_VUI_PARAMETERS *vui = &h264->h264VUIParameters;
|
NV_ENC_CONFIG_H264_VUI_PARAMETERS *vui = &h264->h264VUIParameters;
|
||||||
|
|
||||||
vui->colourMatrix = avctx->colorspace;
|
vui->colourMatrix = IS_GBRP(ctx->data_pix_fmt) ? AVCOL_SPC_RGB : avctx->colorspace;
|
||||||
vui->colourPrimaries = avctx->color_primaries;
|
vui->colourPrimaries = avctx->color_primaries;
|
||||||
vui->transferCharacteristics = avctx->color_trc;
|
vui->transferCharacteristics = avctx->color_trc;
|
||||||
vui->videoFullRangeFlag = (avctx->color_range == AVCOL_RANGE_JPEG
|
vui->videoFullRangeFlag = (avctx->color_range == AVCOL_RANGE_JPEG
|
||||||
|| ctx->data_pix_fmt == AV_PIX_FMT_YUVJ420P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ422P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ444P);
|
|| ctx->data_pix_fmt == AV_PIX_FMT_YUVJ420P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ422P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ444P);
|
||||||
|
|
||||||
vui->colourDescriptionPresentFlag =
|
vui->colourDescriptionPresentFlag =
|
||||||
(avctx->colorspace != 2 || avctx->color_primaries != 2 || avctx->color_trc != 2);
|
(vui->colourMatrix != 2 || vui->colourPrimaries != 2 || vui->transferCharacteristics != 2);
|
||||||
|
|
||||||
vui->videoSignalTypePresentFlag =
|
vui->videoSignalTypePresentFlag =
|
||||||
(vui->colourDescriptionPresentFlag
|
(vui->colourDescriptionPresentFlag
|
||||||
@ -1094,7 +1102,7 @@ static av_cold int nvenc_setup_h264_config(AVCodecContext *avctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// force setting profile as high444p if input is AV_PIX_FMT_YUV444P
|
// force setting profile as high444p if input is AV_PIX_FMT_YUV444P
|
||||||
if (ctx->data_pix_fmt == AV_PIX_FMT_YUV444P) {
|
if (IS_YUV444(ctx->data_pix_fmt)) {
|
||||||
cc->profileGUID = NV_ENC_H264_PROFILE_HIGH_444_GUID;
|
cc->profileGUID = NV_ENC_H264_PROFILE_HIGH_444_GUID;
|
||||||
avctx->profile = FF_PROFILE_H264_HIGH_444_PREDICTIVE;
|
avctx->profile = FF_PROFILE_H264_HIGH_444_PREDICTIVE;
|
||||||
}
|
}
|
||||||
@ -1125,14 +1133,14 @@ static av_cold int nvenc_setup_hevc_config(AVCodecContext *avctx)
|
|||||||
NV_ENC_CONFIG_HEVC *hevc = &cc->encodeCodecConfig.hevcConfig;
|
NV_ENC_CONFIG_HEVC *hevc = &cc->encodeCodecConfig.hevcConfig;
|
||||||
NV_ENC_CONFIG_HEVC_VUI_PARAMETERS *vui = &hevc->hevcVUIParameters;
|
NV_ENC_CONFIG_HEVC_VUI_PARAMETERS *vui = &hevc->hevcVUIParameters;
|
||||||
|
|
||||||
vui->colourMatrix = avctx->colorspace;
|
vui->colourMatrix = IS_GBRP(ctx->data_pix_fmt) ? AVCOL_SPC_RGB : avctx->colorspace;
|
||||||
vui->colourPrimaries = avctx->color_primaries;
|
vui->colourPrimaries = avctx->color_primaries;
|
||||||
vui->transferCharacteristics = avctx->color_trc;
|
vui->transferCharacteristics = avctx->color_trc;
|
||||||
vui->videoFullRangeFlag = (avctx->color_range == AVCOL_RANGE_JPEG
|
vui->videoFullRangeFlag = (avctx->color_range == AVCOL_RANGE_JPEG
|
||||||
|| ctx->data_pix_fmt == AV_PIX_FMT_YUVJ420P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ422P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ444P);
|
|| ctx->data_pix_fmt == AV_PIX_FMT_YUVJ420P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ422P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ444P);
|
||||||
|
|
||||||
vui->colourDescriptionPresentFlag =
|
vui->colourDescriptionPresentFlag =
|
||||||
(avctx->colorspace != 2 || avctx->color_primaries != 2 || avctx->color_trc != 2);
|
(vui->colourMatrix != 2 || vui->colourPrimaries != 2 || vui->transferCharacteristics != 2);
|
||||||
|
|
||||||
vui->videoSignalTypePresentFlag =
|
vui->videoSignalTypePresentFlag =
|
||||||
(vui->colourDescriptionPresentFlag
|
(vui->colourDescriptionPresentFlag
|
||||||
@ -1406,8 +1414,10 @@ static NV_ENC_BUFFER_FORMAT nvenc_map_buffer_format(enum AVPixelFormat pix_fmt)
|
|||||||
case AV_PIX_FMT_P010:
|
case AV_PIX_FMT_P010:
|
||||||
case AV_PIX_FMT_P016:
|
case AV_PIX_FMT_P016:
|
||||||
return NV_ENC_BUFFER_FORMAT_YUV420_10BIT;
|
return NV_ENC_BUFFER_FORMAT_YUV420_10BIT;
|
||||||
|
case AV_PIX_FMT_GBRP:
|
||||||
case AV_PIX_FMT_YUV444P:
|
case AV_PIX_FMT_YUV444P:
|
||||||
return NV_ENC_BUFFER_FORMAT_YUV444_PL;
|
return NV_ENC_BUFFER_FORMAT_YUV444_PL;
|
||||||
|
case AV_PIX_FMT_GBRP16:
|
||||||
case AV_PIX_FMT_YUV444P16:
|
case AV_PIX_FMT_YUV444P16:
|
||||||
return NV_ENC_BUFFER_FORMAT_YUV444_10BIT;
|
return NV_ENC_BUFFER_FORMAT_YUV444_10BIT;
|
||||||
case AV_PIX_FMT_0RGB32:
|
case AV_PIX_FMT_0RGB32:
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 58
|
#define LIBAVCODEC_VERSION_MAJOR 58
|
||||||
#define LIBAVCODEC_VERSION_MINOR 136
|
#define LIBAVCODEC_VERSION_MINOR 136
|
||||||
#define LIBAVCODEC_VERSION_MICRO 100
|
#define LIBAVCODEC_VERSION_MICRO 101
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
LIBAVCODEC_VERSION_MINOR, \
|
LIBAVCODEC_VERSION_MINOR, \
|
||||||
|
Loading…
Reference in New Issue
Block a user