aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/libvpxdec.c
diff options
context:
space:
mode:
authorJames Zern <jzern@google.com>2015-06-23 14:25:26 -0700
committerJames Zern <jzern@google.com>2015-06-24 14:54:54 -0700
commit469398f8b7a8ebe43bd4d5149cdc2b96eac53b76 (patch)
tree37ea1c8993f8f436390c085c1037e05bc82824c6 /libavcodec/libvpxdec.c
parenteb823df817660947fe9c8172f01319c3b972b588 (diff)
downloadffmpeg-469398f8b7a8ebe43bd4d5149cdc2b96eac53b76.tar.gz
libvpxdec: report profile for vp9
Reviewed-by: Ronald S. Bultje <rsbultje@gmail.com> Signed-off-by: James Zern <jzern@google.com>
Diffstat (limited to 'libavcodec/libvpxdec.c')
-rw-r--r--libavcodec/libvpxdec.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/libavcodec/libvpxdec.c b/libavcodec/libvpxdec.c
index c69e88899e..d94561efb5 100644
--- a/libavcodec/libvpxdec.c
+++ b/libavcodec/libvpxdec.c
@@ -66,22 +66,28 @@ static int set_pix_fmt(AVCodecContext *avctx, struct vpx_image *img)
return AVERROR_INVALIDDATA;
switch (img->fmt) {
case VPX_IMG_FMT_I420:
+ if (avctx->codec_id == AV_CODEC_ID_VP9)
+ avctx->profile = FF_PROFILE_VP9_0;
avctx->pix_fmt = AV_PIX_FMT_YUV420P;
return 0;
#if CONFIG_LIBVPX_VP9_DECODER
case VPX_IMG_FMT_I422:
+ avctx->profile = FF_PROFILE_VP9_1;
avctx->pix_fmt = AV_PIX_FMT_YUV422P;
return 0;
#if VPX_IMAGE_ABI_VERSION >= 3
case VPX_IMG_FMT_I440:
+ avctx->profile = FF_PROFILE_VP9_1;
avctx->pix_fmt = AV_PIX_FMT_YUV440P;
return 0;
#endif
case VPX_IMG_FMT_I444:
+ avctx->profile = FF_PROFILE_VP9_1;
avctx->pix_fmt = AV_PIX_FMT_YUV444P;
return 0;
#ifdef VPX_IMG_FMT_HIGHBITDEPTH
case VPX_IMG_FMT_I42016:
+ avctx->profile = FF_PROFILE_VP9_2;
if (img->bit_depth == 10) {
avctx->pix_fmt = AV_PIX_FMT_YUV420P10LE;
return 0;
@@ -92,6 +98,7 @@ static int set_pix_fmt(AVCodecContext *avctx, struct vpx_image *img)
return AVERROR_INVALIDDATA;
}
case VPX_IMG_FMT_I42216:
+ avctx->profile = FF_PROFILE_VP9_3;
if (img->bit_depth == 10) {
avctx->pix_fmt = AV_PIX_FMT_YUV422P10LE;
return 0;
@@ -103,6 +110,7 @@ static int set_pix_fmt(AVCodecContext *avctx, struct vpx_image *img)
}
#if VPX_IMAGE_ABI_VERSION >= 3
case VPX_IMG_FMT_I44016:
+ avctx->profile = FF_PROFILE_VP9_3;
if (img->bit_depth == 10) {
avctx->pix_fmt = AV_PIX_FMT_YUV440P10LE;
return 0;
@@ -114,6 +122,7 @@ static int set_pix_fmt(AVCodecContext *avctx, struct vpx_image *img)
}
#endif
case VPX_IMG_FMT_I44416:
+ avctx->profile = FF_PROFILE_VP9_3;
if (img->bit_depth == 10) {
avctx->pix_fmt = AV_PIX_FMT_YUV444P10LE;
return 0;
@@ -211,6 +220,14 @@ static av_cold int vp9_init(AVCodecContext *avctx)
return vpx_init(avctx, &vpx_codec_vp9_dx_algo);
}
+static const AVProfile profiles[] = {
+ { FF_PROFILE_VP9_0, "Profile 0" },
+ { FF_PROFILE_VP9_1, "Profile 1" },
+ { FF_PROFILE_VP9_2, "Profile 2" },
+ { FF_PROFILE_VP9_3, "Profile 3" },
+ { FF_PROFILE_UNKNOWN },
+};
+
AVCodec ff_libvpx_vp9_decoder = {
.name = "libvpx-vp9",
.long_name = NULL_IF_CONFIG_SMALL("libvpx VP9"),
@@ -222,5 +239,6 @@ AVCodec ff_libvpx_vp9_decoder = {
.decode = vp8_decode,
.capabilities = CODEC_CAP_AUTO_THREADS | CODEC_CAP_DR1,
.init_static_data = ff_vp9_init_static,
+ .profiles = NULL_IF_CONFIG_SMALL(profiles),
};
#endif /* CONFIG_LIBVPX_VP9_DECODER */