[SCM] libav/experimental: libx265: Support 4:4:4

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Aug 10 16:01:37 UTC 2014


The following commit has been merged in the experimental branch:
commit 2142b2efcd631db05e4c7c26785e337ecf1258ff
Author: Derek Buitenhuis <derek.buitenhuis at gmail.com>
Date:   Fri Feb 21 11:59:13 2014 -0500

    libx265: Support 4:4:4
    
    Signed-off-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>

diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c
index 102e5fc..2babac3 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
 };
 

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list