Commit d102925a authored by Derek Buitenhuis's avatar Derek Buitenhuis

libx265: Support 4:4:4

Signed-off-by: 's avatarDerek Buitenhuis <derek.buitenhuis@gmail.com>
parent d3736471
...@@ -81,6 +81,15 @@ static av_cold int libx265_encode_init(AVCodecContext *avctx) ...@@ -81,6 +81,15 @@ static av_cold int libx265_encode_init(AVCodecContext *avctx)
int ret; int ret;
int i; 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(); avctx->coded_frame = av_frame_alloc();
if (!avctx->coded_frame) { if (!avctx->coded_frame) {
av_log(avctx, AV_LOG_ERROR, "Could not allocate frame.\n"); av_log(avctx, AV_LOG_ERROR, "Could not allocate frame.\n");
...@@ -109,6 +118,17 @@ static av_cold int libx265_encode_init(AVCodecContext *avctx) ...@@ -109,6 +118,17 @@ static av_cold int libx265_encode_init(AVCodecContext *avctx)
else if (x265_max_bit_depth == 12) else if (x265_max_bit_depth == 12)
ctx->params->internalBitDepth = 10; 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) { if (avctx->bit_rate > 0) {
ctx->params->rc.bitrate = avctx->bit_rate / 1000; ctx->params->rc.bitrate = avctx->bit_rate / 1000;
ctx->params->rc.rateControlMode = X265_RC_ABR; ctx->params->rc.rateControlMode = X265_RC_ABR;
...@@ -243,12 +263,15 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, ...@@ -243,12 +263,15 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
static const enum AVPixelFormat x265_csp_eight[] = { static const enum AVPixelFormat x265_csp_eight[] = {
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P,
AV_PIX_FMT_YUV444P,
AV_PIX_FMT_NONE 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_YUV444P,
AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV420P10,
AV_PIX_FMT_YUV444P10,
AV_PIX_FMT_NONE AV_PIX_FMT_NONE
}; };
......
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