summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2015-05-20 17:52:47 -0300
committerJames Almer <jamrial@gmail.com>2015-05-20 20:08:56 -0300
commit40bf3687a1c12dc859ad9e76a53c79dd15d99ed6 (patch)
treeba9ff9c128cf92bc9285185da280f65d0c27aa36 /libavcodec
parenta2aff2690b578d6e449b5435e69e43f892499750 (diff)
libvpx: add support for yuv440p and yuv440p10/12 encoding
Reviewed-by: James Zern <jzern@google.com> Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/libvpx.c4
-rw-r--r--libavcodec/libvpxenc.c24
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) {