diff options
author | James Almer <jamrial@gmail.com> | 2015-05-20 17:52:47 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2015-05-20 20:08:56 -0300 |
commit | 40bf3687a1c12dc859ad9e76a53c79dd15d99ed6 (patch) | |
tree | ba9ff9c128cf92bc9285185da280f65d0c27aa36 | |
parent | a2aff2690b578d6e449b5435e69e43f892499750 (diff) | |
download | ffmpeg-40bf3687a1c12dc859ad9e76a53c79dd15d99ed6.tar.gz |
libvpx: add support for yuv440p and yuv440p10/12 encoding
Reviewed-by: James Zern <jzern@google.com>
Signed-off-by: James Almer <jamrial@gmail.com>
-rw-r--r-- | libavcodec/libvpx.c | 4 | ||||
-rw-r--r-- | libavcodec/libvpxenc.c | 24 |
2 files changed, 27 insertions, 1 deletions
diff --git a/libavcodec/libvpx.c b/libavcodec/libvpx.c index b432fe9671..e0f9df3caa 100644 --- a/libavcodec/libvpx.c +++ b/libavcodec/libvpx.c @@ -36,6 +36,7 @@ static const enum AVPixelFormat vp9_pix_fmts_def[] = { static const enum AVPixelFormat vp9_pix_fmts_highcol[] = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, + AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE }; @@ -43,12 +44,15 @@ static const enum AVPixelFormat vp9_pix_fmts_highcol[] = { static const enum AVPixelFormat vp9_pix_fmts_highbd[] = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, + AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV420P10LE, AV_PIX_FMT_YUV422P10LE, + AV_PIX_FMT_YUV440P10LE, AV_PIX_FMT_YUV444P10LE, AV_PIX_FMT_YUV420P12LE, AV_PIX_FMT_YUV422P12LE, + AV_PIX_FMT_YUV440P12LE, AV_PIX_FMT_YUV444P12LE, AV_PIX_FMT_NONE }; diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index c2408a5174..adf4b2e2f6 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -280,9 +280,18 @@ static int set_pix_fmt(AVCodecContext *avctx, vpx_codec_caps_t codec_caps, *img_fmt = VPX_IMG_FMT_I420; return 0; 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: 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; #ifdef VPX_IMG_FMT_HIGHBITDEPTH case AV_PIX_FMT_YUV420P10LE: @@ -307,6 +316,19 @@ static int set_pix_fmt(AVCodecContext *avctx, vpx_codec_caps_t codec_caps, return 0; } 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_YUV444P12LE: if (codec_caps & VPX_CODEC_CAP_HIGHBITDEPTH) { |