mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-02 03:06:28 +02:00
809b0402dc
Use the appropriate metadata filter for each codec - in the absence of any options to modify the stream, the output bitstream should be identical to the input (though the output file may differ in padding). All tests use conformance bitstreams, the MPEG-2 streams are newly added from the conformance test streams <http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_IEC_13818-4_2004_Conformance_Testing/Video/> (cherry picked from commit3cae7f8b9b
) (cherry picked from commitfbd63170bc
)
263 lines
9.6 KiB
Makefile
263 lines
9.6 KiB
Makefile
FFSERVER_REFFILE = $(SRC_PATH)/tests/ffserver.regression.ref
|
|
|
|
THREADS = 1
|
|
VREF = tests/vsynth1/00.pgm
|
|
AREF = tests/data/asynth1.sw
|
|
|
|
FATEW = 34
|
|
FATEH = 34
|
|
|
|
FFMPEG=ffmpeg$(PROGSSUF)$(EXESUF)
|
|
|
|
$(AREF): CMP=
|
|
|
|
ffservertest: export PROGSUF = $(PROGSSUF)
|
|
ffservertest: ffserver$(PROGSSUF)$(EXESUF) ffmpeg$(PROGSSUF)$(EXESUF) tests/vsynth1/00.pgm tests/data/asynth1.sw
|
|
@echo
|
|
@echo "Unfortunately ffserver is broken and therefore its regression"
|
|
@echo "test fails randomly. Treat the results accordingly."
|
|
@echo
|
|
$(SRC_PATH)/tests/ffserver-regression.sh $(FFSERVER_REFFILE) $(SRC_PATH)/tests/ffserver.conf "$(TARGET_SAMPLES)" "$(TARGET_EXEC)" "$(TARGET_PATH)"
|
|
|
|
APITESTSDIR := tests/api
|
|
OBJDIRS += tests/data tests/vsynth1 tests/data/filtergraphs $(APITESTSDIR)/
|
|
|
|
$(VREF): tests/videogen$(HOSTEXESUF) | tests/vsynth1
|
|
$(M)./$< 'tests/vsynth1/'
|
|
|
|
$(AREF): tests/audiogen$(HOSTEXESUF) | tests/data
|
|
$(M)./$< $@
|
|
|
|
tests/data/asynth-%.wav: tests/audiogen$(HOSTEXESUF) | tests/data
|
|
$(M)./$< $@ $(subst -, ,$*)
|
|
|
|
tests/data/vsynth1.yuv: tests/videogen$(HOSTEXESUF) | tests/data
|
|
$(M)$< $@
|
|
|
|
tests/data/vsynth2.yuv: tests/rotozoom$(HOSTEXESUF) | tests/data
|
|
$(M)$< $(SRC_PATH)/tests/reference.pnm $@
|
|
|
|
tests/data/vsynth_lena.yuv: tests/rotozoom$(HOSTEXESUF) | tests/data
|
|
$(M)$< $(SAMPLES)/lena.pnm $@
|
|
|
|
tests/data/vsynth3.yuv: tests/videogen$(HOSTEXESUF) | tests/data
|
|
$(M)$< $@ $(FATEW) $(FATEH)
|
|
|
|
tests/test_copy.ffmeta: TAG = COPY
|
|
tests/test_copy.ffmeta: tests/data
|
|
$(M)cp -f $(SRC_PATH)/tests/test.ffmeta tests/test_copy.ffmeta
|
|
|
|
tests/data/ffprobe-test.nut: ffmpeg$(PROGSSUF)$(EXESUF) tests/test_copy.ffmeta
|
|
$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< \
|
|
-f lavfi -i "aevalsrc=sin(400*PI*2*t):d=0.125[out0]; testsrc=d=0.125[out1]; testsrc=s=100x100:d=0.125[out2]" \
|
|
-f ffmetadata -i $(TARGET_PATH)/tests/test_copy.ffmeta \
|
|
-flags +bitexact -fflags +bitexact -map 0:0 -map 0:1 -map 0:2 -map_metadata 1 \
|
|
-map_metadata:s:0 1:s:0 -map_metadata:s:1 1:s:1 \
|
|
-vcodec rawvideo -acodec pcm_s16le \
|
|
-y $(TARGET_PATH)/$@ 2>/dev/null
|
|
|
|
tests/data/%.sw tests/data/asynth% tests/data/vsynth%.yuv tests/vsynth%/00.pgm tests/data/%.nut: TAG = GEN
|
|
|
|
tests/data/filtergraphs/%: TAG = COPY
|
|
tests/data/filtergraphs/%: $(SRC_PATH)/tests/filtergraphs/% | tests/data/filtergraphs
|
|
$(M)cp $< $@
|
|
|
|
RUNNING_FATE := $(filter check fate%,$(filter-out fate-rsync,$(MAKECMDGOALS)))
|
|
|
|
# Check sanity of dependencies when running FATE tests.
|
|
ifneq (,$(RUNNING_FATE))
|
|
CHKCFG = $(if $($(1))$(!$(1)),$($(1)), $(error No such config: $(1)))
|
|
endif
|
|
|
|
ALLYES = $(strip $(call XYES, $(1)))
|
|
XYES = $(if $(strip $(1)), \
|
|
$(if $(call CHKCFG,CONFIG_$(firstword $(1))), \
|
|
$(call XYES, $(wordlist 2, $(words $(1)), $(1)))), \
|
|
yes)
|
|
|
|
ENCDEC = $(call ALLYES, $(firstword $(1))_ENCODER $(lastword $(1))_DECODER \
|
|
$(firstword $(2))_MUXER $(lastword $(2))_DEMUXER)
|
|
|
|
ENCDEC2 = $(call ALLYES, $(firstword $(1))_ENCODER $(lastword $(1))_DECODER \
|
|
$(firstword $(2))_ENCODER $(lastword $(2))_DECODER \
|
|
$(firstword $(3))_MUXER $(lastword $(3))_DEMUXER)
|
|
|
|
DEMDEC = $(call ALLYES, $(1)_DEMUXER $(2:%=%_DECODER))
|
|
ENCMUX = $(call ALLYES, $(1:%=%_ENCODER) $(2)_MUXER)
|
|
|
|
DEMMUX = $(call ALLYES, $(1)_DEMUXER $(2)_MUXER)
|
|
|
|
FILTERDEMDEC = $(call ALLYES, $(1:%=%_FILTER) $(2)_DEMUXER $(3)_DECODER)
|
|
FILTERDEMDECMUX = $(call ALLYES, $(1:%=%_FILTER) $(2)_DEMUXER $(3)_DECODER $(4)_MUXER)
|
|
FILTERDEMDECENCMUX = $(call ALLYES, $(1:%=%_FILTER) $(2)_DEMUXER $(3)_DECODER $(4)_ENCODER $(5)_MUXER)
|
|
|
|
PARSERDEMDEC = $(call ALLYES, $(1)_PARSER $(2)_DEMUXER $(3)_DECODER)
|
|
|
|
include $(SRC_PATH)/$(APITESTSDIR)/Makefile
|
|
|
|
include $(SRC_PATH)/tests/fate/acodec.mak
|
|
include $(SRC_PATH)/tests/fate/vcodec.mak
|
|
|
|
include $(SRC_PATH)/tests/fate/avformat.mak
|
|
include $(SRC_PATH)/tests/fate/seek.mak
|
|
|
|
include $(SRC_PATH)/tests/fate/aac.mak
|
|
include $(SRC_PATH)/tests/fate/ac3.mak
|
|
include $(SRC_PATH)/tests/fate/adpcm.mak
|
|
include $(SRC_PATH)/tests/fate/alac.mak
|
|
include $(SRC_PATH)/tests/fate/als.mak
|
|
include $(SRC_PATH)/tests/fate/amrnb.mak
|
|
include $(SRC_PATH)/tests/fate/amrwb.mak
|
|
include $(SRC_PATH)/tests/fate/api.mak
|
|
include $(SRC_PATH)/tests/fate/apng.mak
|
|
include $(SRC_PATH)/tests/fate/atrac.mak
|
|
include $(SRC_PATH)/tests/fate/audio.mak
|
|
include $(SRC_PATH)/tests/fate/bmp.mak
|
|
include $(SRC_PATH)/tests/fate/build.mak
|
|
include $(SRC_PATH)/tests/fate/canopus.mak
|
|
include $(SRC_PATH)/tests/fate/cbs.mak
|
|
include $(SRC_PATH)/tests/fate/cdxl.mak
|
|
include $(SRC_PATH)/tests/fate/checkasm.mak
|
|
include $(SRC_PATH)/tests/fate/concatdec.mak
|
|
include $(SRC_PATH)/tests/fate/cover-art.mak
|
|
include $(SRC_PATH)/tests/fate/dca.mak
|
|
include $(SRC_PATH)/tests/fate/demux.mak
|
|
include $(SRC_PATH)/tests/fate/dfa.mak
|
|
include $(SRC_PATH)/tests/fate/dnxhd.mak
|
|
include $(SRC_PATH)/tests/fate/dpcm.mak
|
|
include $(SRC_PATH)/tests/fate/ea.mak
|
|
include $(SRC_PATH)/tests/fate/exif.mak
|
|
include $(SRC_PATH)/tests/fate/ffmpeg.mak
|
|
include $(SRC_PATH)/tests/fate/ffprobe.mak
|
|
include $(SRC_PATH)/tests/fate/fft.mak
|
|
include $(SRC_PATH)/tests/fate/fifo-muxer.mak
|
|
include $(SRC_PATH)/tests/fate/filter-audio.mak
|
|
include $(SRC_PATH)/tests/fate/filter-video.mak
|
|
include $(SRC_PATH)/tests/fate/fits.mak
|
|
include $(SRC_PATH)/tests/fate/flac.mak
|
|
include $(SRC_PATH)/tests/fate/flvenc.mak
|
|
include $(SRC_PATH)/tests/fate/gapless.mak
|
|
include $(SRC_PATH)/tests/fate/gif.mak
|
|
include $(SRC_PATH)/tests/fate/h264.mak
|
|
include $(SRC_PATH)/tests/fate/hevc.mak
|
|
include $(SRC_PATH)/tests/fate/image.mak
|
|
include $(SRC_PATH)/tests/fate/indeo.mak
|
|
include $(SRC_PATH)/tests/fate/libavcodec.mak
|
|
include $(SRC_PATH)/tests/fate/libavdevice.mak
|
|
include $(SRC_PATH)/tests/fate/libavformat.mak
|
|
include $(SRC_PATH)/tests/fate/libavresample.mak
|
|
include $(SRC_PATH)/tests/fate/libavutil.mak
|
|
include $(SRC_PATH)/tests/fate/libswresample.mak
|
|
include $(SRC_PATH)/tests/fate/libswscale.mak
|
|
include $(SRC_PATH)/tests/fate/lossless-audio.mak
|
|
include $(SRC_PATH)/tests/fate/lossless-video.mak
|
|
include $(SRC_PATH)/tests/fate/matroska.mak
|
|
include $(SRC_PATH)/tests/fate/microsoft.mak
|
|
include $(SRC_PATH)/tests/fate/monkeysaudio.mak
|
|
include $(SRC_PATH)/tests/fate/mov.mak
|
|
include $(SRC_PATH)/tests/fate/mp3.mak
|
|
include $(SRC_PATH)/tests/fate/mpc.mak
|
|
include $(SRC_PATH)/tests/fate/mpeg4.mak
|
|
include $(SRC_PATH)/tests/fate/mpegts.mak
|
|
include $(SRC_PATH)/tests/fate/mxf.mak
|
|
include $(SRC_PATH)/tests/fate/opus.mak
|
|
include $(SRC_PATH)/tests/fate/pcm.mak
|
|
include $(SRC_PATH)/tests/fate/pixlet.mak
|
|
include $(SRC_PATH)/tests/fate/probe.mak
|
|
include $(SRC_PATH)/tests/fate/prores.mak
|
|
include $(SRC_PATH)/tests/fate/qt.mak
|
|
include $(SRC_PATH)/tests/fate/qtrle.mak
|
|
include $(SRC_PATH)/tests/fate/real.mak
|
|
include $(SRC_PATH)/tests/fate/screen.mak
|
|
include $(SRC_PATH)/tests/fate/source.mak
|
|
include $(SRC_PATH)/tests/fate/speedhq.mak
|
|
include $(SRC_PATH)/tests/fate/subtitles.mak
|
|
include $(SRC_PATH)/tests/fate/utvideo.mak
|
|
include $(SRC_PATH)/tests/fate/video.mak
|
|
include $(SRC_PATH)/tests/fate/voice.mak
|
|
include $(SRC_PATH)/tests/fate/vorbis.mak
|
|
include $(SRC_PATH)/tests/fate/vpx.mak
|
|
include $(SRC_PATH)/tests/fate/vqf.mak
|
|
include $(SRC_PATH)/tests/fate/wavpack.mak
|
|
include $(SRC_PATH)/tests/fate/wma.mak
|
|
include $(SRC_PATH)/tests/fate/xvid.mak
|
|
|
|
FATE_FFMPEG += $(FATE_FFMPEG-yes) $(FATE_AVCONV) $(FATE_AVCONV-yes)
|
|
FATE-$(CONFIG_FFMPEG) += $(FATE_FFMPEG)
|
|
FATE-$(CONFIG_FFPROBE) += $(FATE_FFPROBE)
|
|
|
|
FATE_SAMPLES_AVCONV += $(FATE_SAMPLES_AVCONV-yes)
|
|
FATE_SAMPLES_FFMPEG += $(FATE_SAMPLES_FFMPEG-yes)
|
|
FATE_EXTERN-$(CONFIG_FFMPEG) += $(FATE_SAMPLES_AVCONV) $(FATE_SAMPLES_FFMPEG) $(FATE_SAMPLES_FFPROBE)
|
|
FATE_EXTERN += $(FATE_EXTERN-yes)
|
|
|
|
FATE += $(FATE-yes)
|
|
|
|
RSYNC_OPTIONS-$(HAVE_RSYNC_CONTIMEOUT) += --contimeout=60
|
|
RSYNC_OPTIONS = -vrltLW --timeout=60 $(RSYNC_OPTIONS-yes)
|
|
|
|
$(FATE_FFMPEG) $(FATE_SAMPLES_AVCONV) $(FATE_SAMPLES_FFMPEG): ffmpeg$(PROGSSUF)$(EXESUF)
|
|
|
|
$(FATE_FFPROBE) $(FATE_SAMPLES_FFPROBE): ffprobe$(PROGSSUF)$(EXESUF)
|
|
|
|
ifdef SAMPLES
|
|
FATE += $(FATE_FULL) $(FATE_FULL-yes)
|
|
FATE += $(FATE_EXTERN)
|
|
fate-rsync:
|
|
rsync $(RSYNC_OPTIONS) rsync://fate-suite.ffmpeg.org/fate-suite/ $(SAMPLES)
|
|
else
|
|
fate::
|
|
@echo "warning: only a subset of the fate tests will be run because SAMPLES is not specified"
|
|
fate-rsync:
|
|
@echo "use 'make fate-rsync SAMPLES=/path/to/samples' to sync the fate suite"
|
|
$(FATE_EXTERN):
|
|
@echo "$@ requires external samples and SAMPLES not specified"; false
|
|
endif
|
|
|
|
FATE_UTILS = base64 tiny_psnr tiny_ssim audiomatch
|
|
|
|
TOOL = ffmpeg
|
|
|
|
$(addprefix fate-, $(IGNORE_TESTS)): REPORT=ignore
|
|
|
|
fate:: $(FATE)
|
|
|
|
$(FATE) $(FATE_TESTS-no): export PROGSUF = $(PROGSSUF)
|
|
$(FATE) $(FATE_TESTS-no): $(FATE_UTILS:%=tests/%$(HOSTEXESUF))
|
|
@echo "TEST $(@:fate-%=%)"
|
|
$(Q)$(SRC_PATH)/tests/fate-run.sh $@ "$(TARGET_SAMPLES)" "$(TARGET_EXEC)" "$(TARGET_PATH)" '$(CMD)' '$(CMP)' '$(REF)' '$(FUZZ)' '$(THREADS)' '$(THREAD_TYPE)' '$(CPUFLAGS)' '$(CMP_SHIFT)' '$(CMP_TARGET)' '$(SIZE_TOLERANCE)' '$(CMP_UNIT)' '$(GEN)' '$(HWACCEL)' '$(REPORT)'
|
|
|
|
fate-list:
|
|
@printf '%s\n' $(sort $(FATE))
|
|
|
|
coverage.info: TAG = LCOV
|
|
coverage.info:
|
|
$(M)lcov -q -d $(CURDIR) -b $(patsubst src%,./,$(SRC_LINK)) --capture | \
|
|
sed "s,$(CURDIR)/\./,$(CURDIR)/," > $@.in
|
|
$(M)lcov -q --remove $@.in "/usr*" > $@
|
|
$(Q)$(RM) $@.in
|
|
|
|
lcov: TAG = GENHTML
|
|
lcov: coverage.info
|
|
$(M)genhtml -q -o $(CURDIR)/lcov $<
|
|
|
|
lcov-reset: TAG = LCOV
|
|
lcov-reset:
|
|
$(M)lcov -q -d $(CURDIR) --zerocounters
|
|
$(Q)$(RM) -f coverage.info
|
|
|
|
clean:: testclean
|
|
|
|
testclean::
|
|
$(RM) -r tests/vsynth1 tests/data tools/lavfi-showfiltfmts$(PROGSSUF)$(EXESUF)
|
|
$(RM) $(CLEANSUFFIXES:%=tests/%)
|
|
$(RM) $(TESTTOOLS:%=tests/%$(HOSTEXESUF))
|
|
$(RM) tests/pixfmts.mak tests/test_copy.ffmeta
|
|
|
|
-include $(wildcard tests/*.d)
|
|
|
|
include $(SRC_PATH)/tests/checkasm/Makefile
|
|
|
|
.PHONY: fate* lcov lcov-reset
|
|
.INTERMEDIATE: coverage.info
|