You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
libx265: Support 4:4:4
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
This commit is contained in:
@@ -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)
|
|||||||
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,
|
|||||||
|
|
||||||
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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user