From: Derek Buitenhuis Date: Fri, 21 Feb 2014 16:59:13 +0000 (-0500) Subject: libx265: Support 4:4:4 X-Git-Tag: android-x86-6.0-r1~10^2~2109 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=2142b2efcd631db05e4c7c26785e337ecf1258ff;p=android-x86%2Fexternal-ffmpeg.git libx265: Support 4:4:4 Signed-off-by: Derek Buitenhuis --- diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index 102e5fc1af..2babac3775 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -81,6 +81,15 @@ static av_cold int libx265_encode_init(AVCodecContext *avctx) int ret; int i; + 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_log(avctx, AV_LOG_ERROR, + "4:4:4 support is not fully defined for HEVC yet. " + "Set -strict experimental to encode anyway.\n"); + return AVERROR(ENOSYS); + } + avctx->coded_frame = av_frame_alloc(); if (!avctx->coded_frame) { av_log(avctx, AV_LOG_ERROR, "Could not allocate frame.\n"); @@ -109,6 +118,17 @@ static av_cold int libx265_encode_init(AVCodecContext *avctx) else if (x265_max_bit_depth == 12) ctx->params->internalBitDepth = 10; + switch (avctx->pix_fmt) { + case AV_PIX_FMT_YUV420P: + case AV_PIX_FMT_YUV420P10: + ctx->params->internalCsp = X265_CSP_I420; + break; + case AV_PIX_FMT_YUV444P: + case AV_PIX_FMT_YUV444P10: + ctx->params->internalCsp = X265_CSP_I444; + break; + } + if (avctx->bit_rate > 0) { ctx->params->rc.bitrate = avctx->bit_rate / 1000; ctx->params->rc.rateControlMode = X265_RC_ABR; @@ -243,12 +263,15 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, static const enum AVPixelFormat x265_csp_eight[] = { AV_PIX_FMT_YUV420P, + AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE }; static const enum AVPixelFormat x265_csp_twelve[] = { AV_PIX_FMT_YUV420P, + AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV420P10, + AV_PIX_FMT_YUV444P10, AV_PIX_FMT_NONE };