Opened 13 years ago
Closed 13 years ago
#1428 closed defect (fixed)
Several missing dependencies in the build system
Reported by: | jamal | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | build system |
Version: | git-master | Keywords: | amv latm jacosub dirac dwt iac |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
Here are some more missing dependencies i found thanks to Mans' --enable-random option.
./configure --disable-everything --enable-encoder=amv
fails with
LD ffmpeg_g.exe libavcodec/libavcodec.a(utils.o): In function `avcodec_get_name': D:\msys\1.0\home\jamal\ffmpeg/./libavcodec/codec_names.h:221: undefined reference to `ff_amv_encoder' libavcodec/libavcodec.a(allcodecs.o): In function `avcodec_register_all': D:\msys\1.0\home\jamal\ffmpeg/libavcodec/allcodecs.c:75: undefined reference to `ff_amv_encoder' collect2: ld returned 1 exit status make: *** [ffmpeg_g.exe] Error 1
The amv encoder has no entry in libavcodec/Makefile.
It uses the same files as the mjpeg encoder so it's a matter of duplicating the mjpeg entry for it:
OBJS-$(CONFIG_AMV_ENCODER) += mjpegenc.o mjpeg.o \ mpegvideo_enc.o motion_est.o \ ratecontrol.o mpeg12data.o \ mpegvideo.o
Also, like the mjpeg encoder it needs to enable aandct in the configure script:
amv_encoder_select="aandct"
./configure --disable-everything --enable-muxer=jacosub ./configure --disable-everything --enable-muxer=latm
Fail with
LD ffmpeg_g.exe libavformat/libavformat.a(jacosubenc.o):jacosubenc.c:(.data+0x34): undefined reference to `ff_raw_write_packet' collect2: ld returned 1 exit status make: *** [ffmpeg_g.exe] Error 1
and
LD ffmpeg_g.exe libavformat/libavformat.a(latmenc.o): In function `latm_write_packet': D:\msys\1.0\home\jamal\ffmpeg/libavformat/latmenc.c:153: undefined reference to `ff_raw_write_packet' collect2: ld returned 1 exit status make: *** [ffmpeg_g.exe] Error 1
Both the latm and jacosub muxers need rawenc.c to be compiled.
On libavformat/Makefile
OBJS-$(CONFIG_JACOSUB_MUXER) += jacosubenc.o ... OBJS-$(CONFIG_LATM_MUXER) += latmenc.o
Should be
OBJS-$(CONFIG_JACOSUB_MUXER) += jacosubenc.o rawenc.o ... OBJS-$(CONFIG_LATM_MUXER) += latmenc.o rawenc.o
./configure --disable-everything --enable-decoder=dirac
fails with
LD ffmpeg_g.exe libavcodec/libavcodec.a(diracdec.o): In function `svq3_get_ue_golomb': D:\msys\1.0\home\jamal\ffmpeg/libavcodec/golomb.h:132: undefined reference to `ff_interleaved_dirac_golomb_vlc_code' D:\msys\1.0\home\jamal\ffmpeg/libavcodec/golomb.h:128: undefined reference to `ff_interleaved_golomb_vlc_len' D:\msys\1.0\home\jamal\ffmpeg/libavcodec/golomb.h:135: undefined reference to `ff_interleaved_dirac_golomb_vlc_code' D:\msys\1.0\home\jamal\ffmpeg/libavcodec/golomb.h:119: undefined reference to `ff_interleaved_golomb_vlc_len' D:\msys\1.0\home\jamal\ffmpeg/libavcodec/golomb.h:122: undefined reference to `ff_interleaved_ue_golomb_vlc_code' ... [Another few dozen golomb errors here from different functions] ... libavcodec/libavcodec.a(dwt.o): In function `ff_dwt_init': D:\msys\1.0\home\jamal\ffmpeg/libavcodec/dwt.c:994: undefined reference to `ff_snow_inner_add_yblock' libavcodec/libavcodec.a(dwt.o): In function `ff_spatial_idwt_init2': D:\msys\1.0\home\jamal\ffmpeg/libavcodec/dwt.c:1504: undefined referenceto `ff_spatial_idwt_init_mmx' libavcodec/libavcodec.a(dwt.o): In function `ff_dwt_init': D:\msys\1.0\home\jamal\ffmpeg/libavcodec/dwt.c:997: undefined reference to `ff_dwt_init_x86'
This shows that the Dirac decoder depends on dwt and golomb, and that dwt needs snow.c
Adding
dirac_decoder_select="dwt golomb"
To the configure script, and making
OBJS-$(CONFIG_DWT) += dwt.o
be
OBJS-$(CONFIG_DWT) += dwt.o snow.o
in libavcodec/Makefile fixes this.
Also, you can remove dwt.o from the dirac decoder dependencies in libavcodec/Makefile now that dwt will be enabled with the configure addition.
./configure --disable-everything --enable-decoder=iac
fails with
LD ffmpeg_g.exe libavcodec/libavcodec.a(imc.o): In function `imc_decode_close': D:\msys\1.0\home\jamal\ffmpeg/libavcodec/imc.c:933: undefined reference to `ff_fft_end' libavcodec/libavcodec.a(imc.o): In function `imc_decode_init': D:\msys\1.0\home\jamal\ffmpeg/libavcodec/imc.c:140: undefined reference to `ff_sine_window_init' D:\msys\1.0\home\jamal\ffmpeg/libavcodec/imc.c:188: undefined reference to `ff_fft_init' collect2: ld returned 1 exit status make: *** [ffmpeg_g.exe] Error 1
This is the new Indeo Audio decoder added a few days ago. It simply needs a line in the configure script:
iac_decoder_select="fft mdct sinewin"
Which is a copy of the imc decoder one, given that both share the same functions.
I'm not sure why mdct is in there, though, since it doesn't seem to be used by these decoders.
Sorry for taking a few days reporting these, since now they wont make it to ffmpeg 0.11.1
I had this ready but got sidetracked with the dirac crash from the other ticket.
All issues should be fixed, iac works fine here with only "sinewin" enabled.
Thank you for the report!