On 11/06/15 11:56 AM, Luca Barbato wrote:
---
I tied the supported formats to the ABI version.
configure | 12 ++--
libavcodec/libvpx.c| 8 ++--
libavcodec/libvpxenc.c | 6 +-
3 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/configure b/configure
index a416dc2..8cb53d2 100755
--- a/configure
+++ b/configure
@@ -4312,19 +4312,19 @@ enabled libvo_amrwbenc require libvo_amrwbenc
vo-amrwbenc/enc_if.h E_IF_in
enabled libvorbis require libvorbis vorbis/vorbisenc.h
vorbis_info_init -lvorbisenc -lvorbis -logg
enabled libvpx {
enabled libvpx_vp8_decoder {
-require vpx = 1.4.0 vpx/vpx_decoder.h vpx_codec_dec_init_ver
-lvpx ||
-die ERROR: libvpx encoder version must be =1.4.0;
+require_pkg_config vpx = 1.3.0 vpx/vpx_decoder.h
vpx_codec_dec_init_ver ||
+die ERROR: libvpx encoder version must be = 1.3.0;
}
enabled libvpx_vp8_encoder {
-require vpx = 1.4.0 vpx/vpx_encoder.h vpx_codec_enc_init_ver
-lvpx ||
-die ERROR: libvpx encoder version must be =1.4.0;
+require_pkg_config vpx = 1.3.0 vpx/vpx_encoder.h
vpx_codec_enc_init_ver ||
+die ERROR: libvpx encoder version must be = 1.3.0;
}
enabled libvpx_vp9_decoder {
-require vpx = 1.4.0 vpx/vpx_decoder.h vpx_codec_dec_init_ver
-lvpx ||
+require_pkg_config vpx = 1.3.0 vpx/vpx_decoder.h
vpx_codec_dec_init_ver ||
disable libvpx_vp9_decoder;
}
enabled libvpx_vp9_encoder {
-require vpx = 1.4.0 vpx/vpx_encoder.h vpx_codec_enc_init_ver
-lvpx ||
+require_pkg_config vpx = 1.3.0 vpx/vpx_encoder.h
vpx_codec_enc_init_ver ||
disable libvpx_vp9_encoder;
Using require_pkg_config() makes configure abort if the check fails, so the
disable() calls are dead code.
That's why use_pkg_config() and check_pkg_config exist.
Also, checking for the decoding/encoding header and the init function is
apparently not enough. You need
to check for the decoding/encoding interfaces vpx_codec_vp[89]_[cd]x because
libvpx can be built without
one or more of the four components.
enabled libvpx require_pkg_config vpx = 1.3.0 vpx/vpx_codec.h
vpx_codec_version {
enabled libvpx_vp8_decoder { check_pkg_config vpx vpx/vpx_decoder.h
vpx/vp8dx.h vpx_codec_vp8_dx ||
disable libvpx_vp8_decoder; }
enabled libvpx_vp8_encoder { check_pkg_config vpx vpx/vpx_encoder.h
vpx/vp8cx.h vpx_codec_vp8_cx ||
disable libvpx_vp8_encoder; }
enabled libvpx_vp9_decoder { check_pkg_config vpx vpx/vpx_decoder.h
vpx/vp8dx.h vpx_codec_vp9_dx ||
disable libvpx_vp9_decoder; }
enabled libvpx_vp9_encoder { check_pkg_config vpx vpx/vpx_encoder.h
vpx/vp8cx.h vpx_codec_vp9_cx ||
disable libvpx_vp9_encoder; } }
Updated from the version i posted in a previous email (Which was wrong as it
only checked for the header
and init function).
This will first check for a recent libvpx, then for each component.
}
}
diff --git a/libavcodec/libvpx.c b/libavcodec/libvpx.c
index 603ed13..230bc49 100644
--- a/libavcodec/libvpx.c
+++ b/libavcodec/libvpx.c
@@ -39,11 +39,13 @@ enum AVPixelFormat ff_vpx_imgfmt_to_pixfmt(vpx_img_fmt_t
img)
case VPX_IMG_FMT_I420: return AV_PIX_FMT_YUV420P;
case VPX_IMG_FMT_I422: return AV_PIX_FMT_YUV422P;
case VPX_IMG_FMT_I444: return AV_PIX_FMT_YUV444P;
-case VPX_IMG_FMT_I440: return AV_PIX_FMT_YUV440P;
case VPX_IMG_FMT_444A: return AV_PIX_FMT_YUVA444P;
+#ifdef VPX_IMG_FMT_HIGHBITDEPTH
+case VPX_IMG_FMT_I440: return AV_PIX_FMT_YUV440P;
The correct guard for VPX_IMG_FMT_I440 is VPX_IMAGE_ABI_VERSION =3.
libvpx git snapshots post 1.3.0 and pre 1.4.0 may fail because they may define
VPX_IMG_FMT_HIGHBITDEPTH
but not VPX_IMG_FMT_I440.
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;
+#endif
default:return AV_PIX_FMT_NONE;
}
}
@@ -65,11 +67,13 @@ vpx_img_fmt_t ff_vpx_pixfmt_to_imgfmt(enum AVPixelFormat
pix)
case AV_PIX_FMT_YUV420P: return VPX_IMG_FMT_I420;
case AV_PIX_FMT_YUV422P: return VPX_IMG_FMT_I422;
case AV_PIX_FMT_YUV444P: return VPX_IMG_FMT_I444;
-case AV_PIX_FMT_YUV440P: return VPX_IMG_FMT_I440;
case AV_PIX_FMT_YUVA444P: return VPX_IMG_FMT_444A;
+#ifdef VPX_IMG_FMT_HIGHBITDEPTH
+case AV_PIX_FMT_YUV440P: return VPX_IMG_FMT_I440;
case AV_PIX_FMT_YUV420P16BE: return VPX_IMG_FMT_I42016;
case AV_PIX_FMT_YUV422P16BE: return VPX_IMG_FMT_I42216;
case AV_PIX_FMT_YUV444P16BE: return VPX_IMG_FMT_I44416;