From 61a344916d324c8ca52064964478f46c877f02e2 Mon Sep 17 00:00:00 2001 From: Derek Buitenhuis Date: Wed, 11 Jun 2014 21:19:42 +0100 Subject: [PATCH] libx265: Add 4:2:2 support It is also not final yet, so require -strict experimental. Requires a bump to version 17. Signed-off-by: Derek Buitenhuis --- configure | 4 ++-- libavcodec/libx265.c | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/configure b/configure index 8359c68b13..4ed6f1616f 100755 --- a/configure +++ b/configure @@ -4100,8 +4100,8 @@ enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 & { check_cpp_condition x264.h "X264_BUILD >= 118" || die "ERROR: libx264 version must be >= 0.118."; } enabled libx265 && require_pkg_config x265 x265.h x265_encoder_encode && - { check_cpp_condition x265.h "X265_BUILD >= 13" || - die "ERROR: libx265 version must be >= 13."; } + { check_cpp_condition x265.h "X265_BUILD >= 17" || + die "ERROR: libx265 version must be >= 17."; } enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto || diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index 0730784d24..5f27662079 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -82,10 +82,9 @@ static av_cold int libx265_encode_init(AVCodecContext *avctx) int nnal; if (avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL && - !av_pix_fmt_desc_get(avctx->pix_fmt)->log2_chroma_w && - !av_pix_fmt_desc_get(avctx->pix_fmt)->log2_chroma_h) { + !av_pix_fmt_desc_get(avctx->pix_fmt)->log2_chroma_w) { av_log(avctx, AV_LOG_ERROR, - "4:4:4 support is not fully defined for HEVC yet. " + "4:2:2 and 4:4:4 support is not fully defined for HEVC yet. " "Set -strict experimental to encode anyway.\n"); return AVERROR(ENOSYS); } @@ -134,6 +133,10 @@ static av_cold int libx265_encode_init(AVCodecContext *avctx) case AV_PIX_FMT_YUV420P10: ctx->params->internalCsp = X265_CSP_I420; break; + case AV_PIX_FMT_YUV422P: + case AV_PIX_FMT_YUV422P10: + ctx->params->internalCsp = X265_CSP_I422; + break; case AV_PIX_FMT_YUV444P: case AV_PIX_FMT_YUV444P10: ctx->params->internalCsp = X265_CSP_I444; @@ -262,14 +265,17 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, static const enum AVPixelFormat x265_csp_eight[] = { AV_PIX_FMT_YUV420P, + AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE }; static const enum AVPixelFormat x265_csp_twelve[] = { 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 };