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; > +#endif > default: return VPX_IMG_FMT_NONE; > } > } > diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c > index 16d239d..1b0b9e7 100644 > --- a/libavcodec/libvpxenc.c > +++ b/libavcodec/libvpxenc.c > @@ -653,8 +653,12 @@ AVCodec ff_libvpx_vp9_encoder = { > .close = vp8_free, > .capabilities = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS, > .pix_fmts = (const enum AVPixelFormat[]) { > - AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, > + AV_PIX_FMT_YUV420P, > +#if VPX_IMAGE_ABI_VERSION >= 3 > + AV_PIX_FMT_YUV422P, > + AV_PIX_FMT_YUV444P, > AV_PIX_FMT_YUV440P, > +#endif > AV_PIX_FMT_NONE, > }, > .profiles = NULL_IF_CONFIG_SMALL(profiles), > -- > 2.3.2 > > _______________________________________________ > libav-devel mailing list > libav-devel@libav.org > https://lists.libav.org/mailman/listinfo/libav-devel > _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel