As discussed in the ml, the high bitdept support in vpx allows to specify the number of bits used.
Reported-by: Harfe Leier <astrat...@gmail.com> --- libavcodec/libvpx.c | 28 +++++++++++++++++++++++----- libavcodec/libvpx.h | 2 +- libavcodec/libvpxdec.c | 2 +- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/libavcodec/libvpx.c b/libavcodec/libvpx.c index 49f966d..c65f80d 100644 --- a/libavcodec/libvpx.c +++ b/libavcodec/libvpx.c @@ -22,9 +22,9 @@ #include "libvpx.h" -enum AVPixelFormat ff_vpx_imgfmt_to_pixfmt(vpx_img_fmt_t img) +enum AVPixelFormat ff_vpx_image_to_pixfmt(vpx_image_t *img) { - switch (img) { + switch (img->fmt) { case VPX_IMG_FMT_RGB24: return AV_PIX_FMT_RGB24; case VPX_IMG_FMT_RGB565: return AV_PIX_FMT_RGB565BE; case VPX_IMG_FMT_RGB555: return AV_PIX_FMT_RGB555BE; @@ -42,9 +42,27 @@ enum AVPixelFormat ff_vpx_imgfmt_to_pixfmt(vpx_img_fmt_t img) case VPX_IMG_FMT_444A: return AV_PIX_FMT_YUVA444P; #if VPX_IMAGE_ABI_VERSION >= 3 case VPX_IMG_FMT_I440: return AV_PIX_FMT_YUV440P; - case VPX_IMG_FMT_I42016: return AV_PIX_FMT_YUV420P16BE; - case VPX_IMG_FMT_I42216: return AV_PIX_FMT_YUV422P16BE; - case VPX_IMG_FMT_I44416: return AV_PIX_FMT_YUV444P16BE; + case VPX_IMG_FMT_I42016: + switch (img->bit_depth) { + case 9: return AV_PIX_FMT_YUV420P9; + case 10: return AV_PIX_FMT_YUV420P10; + case 16: return AV_PIX_FMT_YUV420P16BE; + default: return AV_PIX_FMT_NONE; + } + case VPX_IMG_FMT_I42216: + switch (img->bit_depth) { + case 9: return AV_PIX_FMT_YUV422P9; + case 10: return AV_PIX_FMT_YUV422P10; + case 16: return AV_PIX_FMT_YUV422P16BE; + default: return AV_PIX_FMT_NONE; + } + case VPX_IMG_FMT_I44416: + switch (img->bit_depth) { + case 9: return AV_PIX_FMT_YUV444P9; + case 10: return AV_PIX_FMT_YUV444P10; + case 16: return AV_PIX_FMT_YUV444P16BE; + default: return AV_PIX_FMT_NONE; + } #endif default: return AV_PIX_FMT_NONE; } diff --git a/libavcodec/libvpx.h b/libavcodec/libvpx.h index b437f37..2b58ed4 100644 --- a/libavcodec/libvpx.h +++ b/libavcodec/libvpx.h @@ -25,7 +25,7 @@ #include "avcodec.h" -enum AVPixelFormat ff_vpx_imgfmt_to_pixfmt(vpx_img_fmt_t img); +enum AVPixelFormat ff_vpx_image_to_pixfmt(vpx_image_t *img); vpx_img_fmt_t ff_vpx_pixfmt_to_imgfmt(enum AVPixelFormat pix); #endif /* AVCODEC_LIBVPX_H */ diff --git a/libavcodec/libvpxdec.c b/libavcodec/libvpxdec.c index 6d3b29f..214e1c5 100644 --- a/libavcodec/libvpxdec.c +++ b/libavcodec/libvpxdec.c @@ -81,7 +81,7 @@ static int vp8_decode(AVCodecContext *avctx, } if ((img = vpx_codec_get_frame(&ctx->decoder, &iter))) { - avctx->pix_fmt = ff_vpx_imgfmt_to_pixfmt(img->fmt); + avctx->pix_fmt = ff_vpx_image_to_pixfmt(img); if (avctx->pix_fmt == AV_PIX_FMT_NONE) { av_log(avctx, AV_LOG_ERROR, "Unsupported output colorspace (%d)\n", img->fmt); -- 2.9.2 _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel