mirror of https://git.ffmpeg.org/ffmpeg.git
libx265: Support 4:4:4
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
This commit is contained in:
parent
d373647194
commit
d102925a6d
|
@ -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
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue