Commit 70742e59 authored by Stephen Hutchinson's avatar Stephen Hutchinson Committed by Michael Niedermayer

libx265: Enable 12-bit encoding

The configure detection is bumped to X265_BUILD >= 68,
since API version 68 corresponds with the x265 1.8
release tarball. The warnings inside x265 about
12-bit being experimental were removed prior to API
version 72 a short time later.  At this time of
writing, X265_BUILD is at version 80.

12-bit support in the HEVC standard was approved in
October 2014 as part of HEVC Version 2 and published
in January 2015:

http://www.itu.int/ITU-T/recommendations/rec.aspx?rec=12296
http://www.itu.int/rec/T-REC-H.265-201410-S
https://hevc.hhi.fraunhofer.de/rextReveiwed-by: 's avatarDerek Buitenhuis <derek.buitenhuis@gmail.com>
Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent 80075b01
...@@ -5556,8 +5556,8 @@ enabled libx264 && { use_pkg_config x264 "stdint.h x264.h" x264_encode ...@@ -5556,8 +5556,8 @@ enabled libx264 && { use_pkg_config x264 "stdint.h x264.h" x264_encode
{ check_cpp_condition x264.h "X264_MPEG2" && { check_cpp_condition x264.h "X264_MPEG2" &&
enable libx262; } enable libx262; }
enabled libx265 && require_pkg_config x265 x265.h x265_api_get && enabled libx265 && require_pkg_config x265 x265.h x265_api_get &&
{ check_cpp_condition x265.h "X265_BUILD >= 57" || { check_cpp_condition x265.h "X265_BUILD >= 68" ||
die "ERROR: libx265 version must be >= 57."; } die "ERROR: libx265 version must be >= 68."; }
enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
enabled libzimg && require_pkg_config zimg zimg.h zimg_get_api_version enabled libzimg && require_pkg_config zimg zimg.h zimg_get_api_version
......
...@@ -146,14 +146,17 @@ static av_cold int libx265_encode_init(AVCodecContext *avctx) ...@@ -146,14 +146,17 @@ static av_cold int libx265_encode_init(AVCodecContext *avctx)
switch (avctx->pix_fmt) { switch (avctx->pix_fmt) {
case AV_PIX_FMT_YUV420P: case AV_PIX_FMT_YUV420P:
case AV_PIX_FMT_YUV420P10: case AV_PIX_FMT_YUV420P10:
case AV_PIX_FMT_YUV420P12:
ctx->params->internalCsp = X265_CSP_I420; ctx->params->internalCsp = X265_CSP_I420;
break; break;
case AV_PIX_FMT_YUV422P: case AV_PIX_FMT_YUV422P:
case AV_PIX_FMT_YUV422P10: case AV_PIX_FMT_YUV422P10:
case AV_PIX_FMT_YUV422P12:
ctx->params->internalCsp = X265_CSP_I422; ctx->params->internalCsp = X265_CSP_I422;
break; break;
case AV_PIX_FMT_YUV444P: case AV_PIX_FMT_YUV444P:
case AV_PIX_FMT_YUV444P10: case AV_PIX_FMT_YUV444P10:
case AV_PIX_FMT_YUV444P12:
ctx->params->internalCsp = X265_CSP_I444; ctx->params->internalCsp = X265_CSP_I444;
break; break;
} }
...@@ -318,6 +321,16 @@ static const enum AVPixelFormat x265_csp_eight[] = { ...@@ -318,6 +321,16 @@ static const enum AVPixelFormat x265_csp_eight[] = {
AV_PIX_FMT_NONE AV_PIX_FMT_NONE
}; };
static const enum AVPixelFormat x265_csp_ten[] = {
AV_PIX_FMT_YUV420P,
AV_PIX_FMT_YUV422P,
AV_PIX_FMT_YUV444P,
AV_PIX_FMT_YUV420P10,
AV_PIX_FMT_YUV422P10,
AV_PIX_FMT_YUV444P10,
AV_PIX_FMT_NONE
};
static const enum AVPixelFormat x265_csp_twelve[] = { static const enum AVPixelFormat x265_csp_twelve[] = {
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P,
AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV422P,
...@@ -325,13 +338,18 @@ static const enum AVPixelFormat x265_csp_twelve[] = { ...@@ -325,13 +338,18 @@ static const enum AVPixelFormat x265_csp_twelve[] = {
AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV420P10,
AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV422P10,
AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P10,
AV_PIX_FMT_YUV420P12,
AV_PIX_FMT_YUV422P12,
AV_PIX_FMT_YUV444P12,
AV_PIX_FMT_NONE AV_PIX_FMT_NONE
}; };
static av_cold void libx265_encode_init_csp(AVCodec *codec) static av_cold void libx265_encode_init_csp(AVCodec *codec)
{ {
if (x265_api_get(10)) if (x265_api_get(12))
codec->pix_fmts = x265_csp_twelve; codec->pix_fmts = x265_csp_twelve;
else if (x265_api_get(10))
codec->pix_fmts = x265_csp_ten;
else if (x265_api_get(8)) else if (x265_api_get(8))
codec->pix_fmts = x265_csp_eight; codec->pix_fmts = x265_csp_eight;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment