[FFmpeg-devel] [PATCH 3/3] avcodec/nvenc: Declare support for P016
Timo Rothenpieler
timo at rothenpieler.org
Fri Mar 2 12:14:21 EET 2018
On 02.03.2018 05:26, Philip Langdale wrote:
> nvenc doesn't support P016, but we have two problems today:
>
> 1) We declare support for YUV444P16 which nvenc also doesn't support.
> We do this because it's the only pix_fmt we have that can
> approximate nvenc's internal format that is YUV444P10 with data in
> MSBs instead of LSBs. Because the declared format is a 16bit one,
> it will be preferrentially chosen when encoding >10bit content,
> but that content will normally be YUV420P12 or P016 which should
> get mapped to P010 and not YUV444P10.
>
> 2) Transcoding P016 content with nvenc should be possible in a pure
> hardware pipeline, and that can't be done if nvenc doesn't say it
> accepts P016. By mapping it to P010, we can use it, albeit with
> truncation. I have established that swscale doesn't know how to
> dither to 10bits so we'd get truncation anyway, even if we tried
> to do this 'properly'.
>
> Signed-off-by: Philip Langdale <philipl at overt.org>
> ---
> libavcodec/nvenc.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
> index 161c56adc2..e00c1fb245 100644
> --- a/libavcodec/nvenc.c
> +++ b/libavcodec/nvenc.c
> @@ -41,7 +41,8 @@ const enum AVPixelFormat ff_nvenc_pix_fmts[] = {
> AV_PIX_FMT_NV12,
> AV_PIX_FMT_P010,
> AV_PIX_FMT_YUV444P,
> - AV_PIX_FMT_YUV444P16,
> + AV_PIX_FMT_P016, // Truncated to 10bits
> + AV_PIX_FMT_YUV444P16, // Truncated to 10bits
> AV_PIX_FMT_0RGB32,
> AV_PIX_FMT_0BGR32,
> AV_PIX_FMT_CUDA,
> @@ -52,6 +53,7 @@ const enum AVPixelFormat ff_nvenc_pix_fmts[] = {
> };
>
> #define IS_10BIT(pix_fmt) (pix_fmt == AV_PIX_FMT_P010 || \
> + pix_fmt == AV_PIX_FMT_P016 || \
> pix_fmt == AV_PIX_FMT_YUV444P16)
>
> #define IS_YUV444(pix_fmt) (pix_fmt == AV_PIX_FMT_YUV444P || \
> @@ -1222,6 +1224,7 @@ static NV_ENC_BUFFER_FORMAT nvenc_map_buffer_format(enum AVPixelFormat pix_fmt)
> case AV_PIX_FMT_NV12:
> return NV_ENC_BUFFER_FORMAT_NV12_PL;
> case AV_PIX_FMT_P010:
> + case AV_PIX_FMT_P016:
> return NV_ENC_BUFFER_FORMAT_YUV420_10BIT;
> case AV_PIX_FMT_YUV444P:
> return NV_ENC_BUFFER_FORMAT_YUV444_PL;
>
It's definitely better than the current situation, and I can't think of
a scenario where it breaks something that's not already broken.
So LGTM from me.
The other patches also look sensible to me, but I'm not the one to Ok them.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3994 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180302/2c0c0a67/attachment.bin>
More information about the ffmpeg-devel
mailing list