On Mon, Sep 5, 2016 at 2:33 PM, Luca Barbato <[email protected]> wrote:
> As discussed in the ml, the high bitdept support in vpx allows to
> specify the number of bits used.
>
> Reported-by: Harfe Leier <[email protected]>
> ---
>
>  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);
> --

seems ok
-- 
Vittorio
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to