Commit 40bf3687 authored by James Almer's avatar James Almer

libvpx: add support for yuv440p and yuv440p10/12 encoding

Reviewed-by: 's avatarJames Zern <jzern@google.com>
Signed-off-by: 's avatarJames Almer <jamrial@gmail.com>
parent a2aff269
...@@ -36,6 +36,7 @@ static const enum AVPixelFormat vp9_pix_fmts_def[] = { ...@@ -36,6 +36,7 @@ static const enum AVPixelFormat vp9_pix_fmts_def[] = {
static const enum AVPixelFormat vp9_pix_fmts_highcol[] = { static const enum AVPixelFormat vp9_pix_fmts_highcol[] = {
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P,
AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV422P,
AV_PIX_FMT_YUV440P,
AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV444P,
AV_PIX_FMT_NONE AV_PIX_FMT_NONE
}; };
...@@ -43,12 +44,15 @@ static const enum AVPixelFormat vp9_pix_fmts_highcol[] = { ...@@ -43,12 +44,15 @@ static const enum AVPixelFormat vp9_pix_fmts_highcol[] = {
static const enum AVPixelFormat vp9_pix_fmts_highbd[] = { static const enum AVPixelFormat vp9_pix_fmts_highbd[] = {
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P,
AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV422P,
AV_PIX_FMT_YUV440P,
AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV444P,
AV_PIX_FMT_YUV420P10LE, AV_PIX_FMT_YUV420P10LE,
AV_PIX_FMT_YUV422P10LE, AV_PIX_FMT_YUV422P10LE,
AV_PIX_FMT_YUV440P10LE,
AV_PIX_FMT_YUV444P10LE, AV_PIX_FMT_YUV444P10LE,
AV_PIX_FMT_YUV420P12LE, AV_PIX_FMT_YUV420P12LE,
AV_PIX_FMT_YUV422P12LE, AV_PIX_FMT_YUV422P12LE,
AV_PIX_FMT_YUV440P12LE,
AV_PIX_FMT_YUV444P12LE, AV_PIX_FMT_YUV444P12LE,
AV_PIX_FMT_NONE AV_PIX_FMT_NONE
}; };
......
...@@ -280,9 +280,18 @@ static int set_pix_fmt(AVCodecContext *avctx, vpx_codec_caps_t codec_caps, ...@@ -280,9 +280,18 @@ static int set_pix_fmt(AVCodecContext *avctx, vpx_codec_caps_t codec_caps,
*img_fmt = VPX_IMG_FMT_I420; *img_fmt = VPX_IMG_FMT_I420;
return 0; return 0;
case AV_PIX_FMT_YUV422P: case AV_PIX_FMT_YUV422P:
enccfg->g_profile = 1;
*img_fmt = VPX_IMG_FMT_I422;
return 0;
#if VPX_IMAGE_ABI_VERSION >= 3
case AV_PIX_FMT_YUV440P:
enccfg->g_profile = 1;
*img_fmt = VPX_IMG_FMT_I440;
return 0;
#endif
case AV_PIX_FMT_YUV444P: case AV_PIX_FMT_YUV444P:
enccfg->g_profile = 1; enccfg->g_profile = 1;
*img_fmt = avctx->pix_fmt == AV_PIX_FMT_YUV422P ? VPX_IMG_FMT_I422 : VPX_IMG_FMT_I444; *img_fmt = VPX_IMG_FMT_I444;
return 0; return 0;
#ifdef VPX_IMG_FMT_HIGHBITDEPTH #ifdef VPX_IMG_FMT_HIGHBITDEPTH
case AV_PIX_FMT_YUV420P10LE: case AV_PIX_FMT_YUV420P10LE:
...@@ -307,6 +316,19 @@ static int set_pix_fmt(AVCodecContext *avctx, vpx_codec_caps_t codec_caps, ...@@ -307,6 +316,19 @@ static int set_pix_fmt(AVCodecContext *avctx, vpx_codec_caps_t codec_caps,
return 0; return 0;
} }
break; break;
#if VPX_IMAGE_ABI_VERSION >= 3
case AV_PIX_FMT_YUV440P10LE:
case AV_PIX_FMT_YUV440P12LE:
if (codec_caps & VPX_CODEC_CAP_HIGHBITDEPTH) {
enccfg->g_bit_depth = enccfg->g_input_bit_depth =
avctx->pix_fmt == AV_PIX_FMT_YUV440P10LE ? 10 : 12;
enccfg->g_profile = 3;
*img_fmt = VPX_IMG_FMT_I44016;
*flags |= VPX_CODEC_USE_HIGHBITDEPTH;
return 0;
}
break;
#endif
case AV_PIX_FMT_YUV444P10LE: case AV_PIX_FMT_YUV444P10LE:
case AV_PIX_FMT_YUV444P12LE: case AV_PIX_FMT_YUV444P12LE:
if (codec_caps & VPX_CODEC_CAP_HIGHBITDEPTH) { if (codec_caps & VPX_CODEC_CAP_HIGHBITDEPTH) {
......
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