Opened 12 years ago
Closed 12 years ago
#3958 closed defect (fixed)
libvpx symbol check missing in configure, build-time error
| Reported by: | Stefano Sabatini | Owned by: | |
|---|---|---|---|
| Priority: | important | Component: | avcodec |
| Version: | git-master | Keywords: | libvpx regression |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | yes | |
| Analyzed by developer: | yes |
Description
I'm compiling FFmpeg with --enable-libvpx on Linux Mint, with libvpx version 1.2.0-2. Configuration succeds, but since commit
commit 04b0dda853198980a14158809e560ea9ca9d7e33
Author: Deb Mukherjee <debargha@google.com>
Date: Sun Sep 14 07:43:27 2014 -0700
avcodec/libvpxdec: Adds decode support for formats other than 420
Handles decoding of new VP9 profiles 1-3 with different color sampling
and bit-depths.
For high bitdepth (profiles 2 and 3) support, we currently need to link
with the highbitdepth branch of libvpx with --enable-experimental
and --enable-vp9-high config options on. But eventually this branch will
be merged into master, whereafter to enable high bitdepth
support you will need to link with libvpx with configure option
--enable-vp9-highbitdepth on.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
I got the following building time failure:
CC libavcodec/libvpxdec.o
libavcodec/libvpxdec.c: In function ‘set_pix_fmt’:
libavcodec/libvpxdec.c:71:14: error: ‘VPX_IMG_FMT_I422’ undeclared (first use in this function)
case VPX_IMG_FMT_I422:
^
libavcodec/libvpxdec.c:71:14: note: each undeclared identifier is reported only once for each function it appears in
libavcodec/libvpxdec.c:74:14: error: ‘VPX_IMG_FMT_I444’ undeclared (first use in this function)
case VPX_IMG_FMT_I444:
^
make: *** [libavcodec/libvpxdec.o] Error 1
This seems due to the reference to newly added symbols which are not included in my libvpx version. Adding a check in the FFmpeg configure script (ideally relying on some version check against the libvpx headers) should allow to fix the build failure.
Change History (5)
comment:1 by , 12 years ago
| Keywords: | configure removed |
|---|---|
| Status: | new → open |
follow-up: 4 comment:2 by , 12 years ago
I don't know how this could be checked without using the configure script.
Here is an attempt to do it by adding an 'experimental' libvpx configuration:
diff --git a/configure b/configure
index 9b294f8..388e36a 100755
--- a/configure
+++ b/configure
@@ -1845,6 +1845,7 @@ CONFIG_EXTRA="
iirfilter
intrax8
lgplv3
+ libvpx_experimental
llauddsp
llviddsp
lpc
@@ -4863,7 +4864,9 @@ enabled libvpx && {
enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
die "ERROR: libvpx encoder version must be >=0.9.7"; }
enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
- enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx || disable libvpx_vp9_encoder; } }
+ enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx || disable libvpx_vp9_encoder; }
+ check_lib2 vpx/vpx_image.h "VPX_IMG_FMT_I422 VPX_IMG_FMT_I444" && enable libvpx_experimental;
+}
enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
enabled libwebp && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
diff --git a/libavcodec/libvpxdec.c b/libavcodec/libvpxdec.c
index 8312460..cbb6d0d 100644
--- a/libavcodec/libvpxdec.c
+++ b/libavcodec/libvpxdec.c
@@ -68,12 +68,14 @@ static int set_pix_fmt(AVCodecContext *avctx, struct vpx_image *img) {
case VPX_IMG_FMT_I420:
avctx->pix_fmt = AV_PIX_FMT_YUV420P;
return 0;
+#if CONFIG_LIBVPX_EXPERIMENTAL
case VPX_IMG_FMT_I422:
avctx->pix_fmt = AV_PIX_FMT_YUV422P;
return 0;
case VPX_IMG_FMT_I444:
avctx->pix_fmt = AV_PIX_FMT_YUV444P;
return 0;
+#endif
#ifdef VPX_IMG_FMT_HIGHBITDEPTH
case VPX_IMG_FMT_I42016:
if (img->bit_depth == 10) {
comment:3 by , 12 years ago
Sorry, I thought that there must be a define to check if the header contains the necessary definitions but this is apparently not the case;-(
I don't know if your patch isn't too invasive for this issue but since distributions exist with older headers (see mplayer-dev-eng today), I suggest this should be discussed on the mailing list.
comment:4 by , 12 years ago
Replying to benoit:
I don't know how this could be checked without using the configure script.
Here is an attempt to do it by adding an 'experimental' libvpx configuration:
libvpx 1.2.0 is vp8 only.
Both VPX_IMG_FMT_I422 and VPX_IMG_FMT_I444 are available exclusively for vp9 starting with libvpx 1.3.0, the latest stable release, so it's not really "experimental".
A preprocessor check in libvpxdec.c should be enough to fix this. No need for extra configure checks.
comment:5 by , 12 years ago
| Resolution: | → fixed |
|---|---|
| Status: | open → closed |
Should be fixed in 789274dca8e5c53bec5f32bb5df88f1323d85e11



This should be fixed in libavcodec imo, no need to break compilation with existing library installations for an experimental feature.