On 25/08/16 19:54, Lucien AT wrote:
> Seems you didn't see another post above....
> 
> I tested this patch with videos encoded by aomenc, and found that for
> 10/12-bit av1 videos this patch decodes incorrectly. I found that
> ff_aom_imgfmt_to_pixfmt might not work as supposed for high bit depth. Like
> libvpx, avctx->pix_fmt should be set by both img->fmt and img->bit_depth.
> Also it seems that AV_PIX_FMT_YUV4XXP10/12/16 should use LE instead of BE.
> So after I change ff_aom_imgfmt_to_pixfmt to the following one:
> 
> +enum AVPixelFormat ff_aom_imgfmt_to_pixfmt(aom_img_fmt_t img, unsigned int
> bit_depth)
> +{
> +    switch (img) {
> +    case AOM_IMG_FMT_RGB24:     return AV_PIX_FMT_RGB24;
> +    case AOM_IMG_FMT_RGB565:    return AV_PIX_FMT_RGB565BE;
> +    case AOM_IMG_FMT_RGB555:    return AV_PIX_FMT_RGB555BE;
> +    case AOM_IMG_FMT_UYVY:      return AV_PIX_FMT_UYVY422;
> +    case AOM_IMG_FMT_YUY2:      return AV_PIX_FMT_YUYV422;
> +    case AOM_IMG_FMT_YVYU:      return AV_PIX_FMT_YVYU422;
> +    case AOM_IMG_FMT_BGR24:     return AV_PIX_FMT_BGR24;
> +    case AOM_IMG_FMT_ARGB:      return AV_PIX_FMT_ARGB;
> +    case AOM_IMG_FMT_ARGB_LE:   return AV_PIX_FMT_BGRA;
> +    case AOM_IMG_FMT_RGB565_LE: return AV_PIX_FMT_RGB565LE;
> +    case AOM_IMG_FMT_RGB555_LE: return AV_PIX_FMT_RGB555LE;
> +    case AOM_IMG_FMT_I420:      return AV_PIX_FMT_YUV420P;
> +    case AOM_IMG_FMT_I422:      return AV_PIX_FMT_YUV422P;
> +    case AOM_IMG_FMT_I444:      return AV_PIX_FMT_YUV444P;
> +    case AOM_IMG_FMT_444A:      return AV_PIX_FMT_YUVA444P;
> +#if AOM_IMAGE_ABI_VERSION >= 3
> +    case AOM_IMG_FMT_I440:      return AV_PIX_FMT_YUV440P;
> +    case AOM_IMG_FMT_I42016:
> +        switch (bit_depth) {
> +            case 10: return AV_PIX_FMT_YUV420P10;
> +            case 12: return AV_PIX_FMT_YUV420P12;
> +        }
> +    case AOM_IMG_FMT_I42216:
> +        switch (bit_depth) {
> +            case 10: return AV_PIX_FMT_YUV422P10;
> +            case 12: return AV_PIX_FMT_YUV422P12;
> +        }
> +    case AOM_IMG_FMT_I44416:
> +        switch (bit_depth) {
> +            case 10: return AV_PIX_FMT_YUV444P10;
> +            case 12: return AV_PIX_FMT_YUV444P12;
> +        }
> +#endif
> +    default:                    return AV_PIX_FMT_NONE;
> +    }
> +}
> 
> and use
> +        avctx->pix_fmt = ff_aom_imgfmt_to_pixfmt(img->fmt, img->bit_depth);
> in libaomdec, the decoding result is identical to aomdec.
> 
> If it is correct to do this, ff_aom_pixfmt_to_imgfmt might also need to be
> re-defined. While libaom can be built with or without high bit depth
> support (--enable/disable-aom-highbitdepth), it does not expose a macro
> like AOM_IMG_FMT_HIGHBITDEPTH. It only defines CONFIG_AOM_HIGHBITDEPTH in
> aom_config.h which is used for building aom reference tools only. I'm not
> sure if we should add further check on the pixel format conversion above.

Thank you a lot =) I eventually found time to rebuild aom with the
correct flags to test it. I'm updating my patch accordingly.

lu

_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to