]> git.sesse.net Git - ffmpeg/commitdiff
Merge commit 'a70eac7a9b193e8434b5bed90bd72aa4cb688363'
authorJames Almer <jamrial@gmail.com>
Thu, 14 Mar 2019 17:04:55 +0000 (14:04 -0300)
committerJames Almer <jamrial@gmail.com>
Thu, 14 Mar 2019 17:15:46 +0000 (14:15 -0300)
* commit 'a70eac7a9b193e8434b5bed90bd72aa4cb688363':
  tests: Convert image2pipe tests to non-legacy test scripts

Merged-by: James Almer <jamrial@gmail.com>
1  2 
tests/Makefile
tests/fate-run.sh
tests/fate/avformat.mak
tests/lavf-regression.sh
tests/ref/lavf/pbmpipe
tests/ref/lavf/pgmpipe

diff --combined tests/Makefile
index ae658693db8a40923b9b76244c86574a9fa28ef4,1884f5e437b7a6bcf6296d77726d3c80947d5d18..0def7e0dae0893ac67d17c8c8cbe85afa1f5ab7d
@@@ -2,15 -2,7 +2,15 @@@ THREADS = 
  VREF = tests/vsynth1/00.pgm
  AREF = tests/data/asynth1.sw
  
 -FATE_OUTDIRS = tests/data tests/data/fate tests/data/filtergraphs tests/data/lavf tests/data/pixfmt tests/vsynth1
 +FATEW = 34
 +FATEH = 34
 +
 +FFMPEG=ffmpeg$(PROGSSUF)$(EXESUF)
 +
 +$(AREF): CMP=
 +
 +APITESTSDIR := tests/api
 +FATE_OUTDIRS = tests/data tests/data/fate tests/data/filtergraphs tests/data/lavf tests/data/lavf-fate tests/data/pixfmt tests/vsynth1 $(APITESTSDIR)
  OUTDIRS += $(FATE_OUTDIRS)
  
  $(VREF): tests/videogen$(HOSTEXESUF) | tests/vsynth1
@@@ -28,26 -20,7 +28,26 @@@ tests/data/vsynth1.yuv: tests/videogen$
  tests/data/vsynth2.yuv: tests/rotozoom$(HOSTEXESUF) | tests/data
        $(M)$< $(SRC_PATH)/tests/reference.pnm $@
  
 -tests/data/asynth% tests/data/vsynth%.yuv tests/vsynth%/00.pgm: TAG = GEN
 +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
@@@ -84,12 -57,11 +84,13 @@@ FILTERDEMDECENCMUX = $(call ALLYES, $(1
  
  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/lavf-image2pipe.mak
  include $(SRC_PATH)/tests/fate/seek.mak
  
  include $(SRC_PATH)/tests/fate/aac.mak
@@@ -99,8 -71,6 +100,8 @@@ include $(SRC_PATH)/tests/fate/alac.ma
  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
@@@ -109,32 -79,17 +110,32 @@@ include $(SRC_PATH)/tests/fate/canopus.
  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/hap.mak
  include $(SRC_PATH)/tests/fate/hevc.mak
 +include $(SRC_PATH)/tests/fate/hlsenc.mak
 +include $(SRC_PATH)/tests/fate/hw.mak
 +include $(SRC_PATH)/tests/fate/id3v2.mak
  include $(SRC_PATH)/tests/fate/image.mak
  include $(SRC_PATH)/tests/fate/indeo.mak
  include $(SRC_PATH)/tests/fate/libavcodec.mak
@@@ -142,32 -97,22 +143,32 @@@ include $(SRC_PATH)/tests/fate/libavdev
  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/mpegps.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
@@@ -178,66 -123,46 +179,66 @@@ include $(SRC_PATH)/tests/fate/wavpack.
  include $(SRC_PATH)/tests/fate/wma.mak
  include $(SRC_PATH)/tests/fate/xvid.mak
  
 -FATE_AVCONV += $(FATE_AVCONV-yes)
 -FATE-$(CONFIG_AVCONV) += $(FATE_AVCONV)
 +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-$(CONFIG_AVCONV) += $(FATE_SAMPLES_AVCONV)
 -FATE_SAMPLES += $(FATE_SAMPLES-yes)
 +FATE_SAMPLES_FFMPEG           += $(FATE_SAMPLES_FFMPEG-yes)
 +FATE_EXTERN-$(CONFIG_FFMPEG)  += $(FATE_SAMPLES_AVCONV) $(FATE_SAMPLES_FFMPEG) $(FATE_SAMPLES_FFPROBE) $(FATE_SAMPLES_FASTSTART)
 +FATE_EXTERN += $(FATE_EXTERN-yes)
  
  FATE += $(FATE-yes)
  
 -$(FATE_AVCONV) $(FATE_SAMPLES_AVCONV): avconv$(EXESUF)
 +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)
 +
 +$(FATE_SAMPLES_FASTSTART): tools/qt-faststart$(EXESUF)
  
  ifdef SAMPLES
 -FATE += $(FATE_SAMPLES)
 +FATE += $(FATE_FULL) $(FATE_FULL-yes)
 +FATE += $(FATE_EXTERN)
  fate-rsync:
 -      rsync -vaLW rsync://fate-suite.libav.org/fate-suite/ $(SAMPLES)
 +      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_SAMPLES):
 +$(FATE_EXTERN):
        @echo "$@ requires external samples and SAMPLES not specified"; false
  endif
  
 -FATE_UTILS = base64 tiny_psnr
 +FATE_UTILS = base64 tiny_psnr tiny_ssim audiomatch
 +
 +TOOL = ffmpeg
  
  $(addprefix fate-, $(IGNORE_TESTS)): REPORT=ignore
  
 -fate: $(FATE)
 +fate:: $(FATE)
 +
 +# Tests requiring hardware support are not included in a default fate run.
 +fate-hw: $(FATE_HW-yes)
 +FATE += $(FATE_HW-yes)
  
 -$(FATE): $(FATE_UTILS:%=tests/%$(HOSTEXESUF)) | $(FATE_OUTDIRS)
 +$(FATE) $(FATE_TESTS-no): export PROGSUF = $(PROGSSUF)
 +$(FATE) $(FATE_TESTS-no): $(FATE_UTILS:%=tests/%$(HOSTEXESUF)) | $(FATE_OUTDIRS)
        @echo "TEST    $(@:fate-%=%)"
 -      $(Q)$(SRC_PATH)/tests/fate-run.sh $@ "$(SAMPLES)" "$(TARGET_EXEC)" "$(TARGET_PATH)" '$(CMD)' '$(CMP)' '$(REF)' '$(FUZZ)' '$(THREADS)' '$(THREAD_TYPE)' '$(CPUFLAGS)' '$(CMP_SHIFT)' '$(CMP_TARGET)' '$(SIZE_TOLERANCE)' '$(CMP_UNIT)' '$(GEN)' '$(HWACCEL)' '$(REPORT)'
 +      $(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)' '$(KEEP)'
  
  fate-list:
        @printf '%s\n' $(sort $(FATE))
  
  coverage.info: TAG = LCOV
  coverage.info:
 -      $(M)lcov -q -d $(CURDIR) -b $(SRC_PATH) --capture | \
 -          sed "s,$(CURDIR)/\./,$(CURDIR)/," > $@
 -      $(M)lcov -q --remove $@ "/usr/include*" -o $@
 +      $(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
@@@ -250,11 -175,11 +251,11 @@@ lcov-reset
  
  clean:: testclean
  
 -testclean:
 -      $(RM) -r tests/vsynth1 tests/data
 +testclean::
 +      $(RM) -r tests/vsynth1 tests/data tools/lavfi-showfiltfmts$(PROGSSUF)$(EXESUF)
        $(RM) $(CLEANSUFFIXES:%=tests/%)
        $(RM) $(TESTTOOLS:%=tests/%$(HOSTEXESUF))
 -      $(RM) tests/pixfmts.mak
 +      $(RM) tests/pixfmts.mak tests/test_copy.ffmeta
  
  -include $(wildcard tests/*.d)
  
diff --combined tests/fate-run.sh
index f1a1e34c367cf8770f77f48295947222d7678979,0221e5c1dce0eb7c7c1b1c8ce41ae0565b7515b8..2d5dbf2f47d67aca725a0576ac2cae2dd8ad5ff0
@@@ -8,7 -8,7 +8,7 @@@ base=$(dirname $0
  base64=tests/base64
  
  test="${1#fate-}"
 -samples=$2
 +target_samples=$2
  target_exec=$3
  target_path=$4
  command=$5
@@@ -25,7 -25,6 +25,7 @@@ cmp_unit=${15:-2
  gen=${16:-no}
  hwaccel=${17:-none}
  report_type=${18:-standard}
 +keep=${19:-0}
  
  outdir="tests/data/fate"
  outfile="${outdir}/${test}"
@@@ -45,7 -44,7 +45,7 @@@ compare()
  }
  
  do_tiny_psnr(){
 -    psnr=$(tests/tiny_psnr "$1" "$2" $cmp_unit $cmp_shift 0)
 +    psnr=$(tests/tiny_psnr "$1" "$2" $cmp_unit $cmp_shift 0) || return 1
      val=$(expr "$psnr" : ".*$3: *\([0-9.]*\)")
      size1=$(expr "$psnr" : '.*bytes: *\([0-9]*\)')
      size2=$(expr "$psnr" : '.*bytes:[ 0-9]*/ *\([0-9]*\)')
      size_cmp=$(compare $size1 $size2 $size_tolerance)
      if [ "$val_cmp" != 0 ] || [ "$size_cmp" != 0 ]; then
          echo "$psnr"
 +        if [ "$val_cmp" != 0 ]; then
 +            echo "$3: |$val - $cmp_target| >= $fuzz"
 +        fi
 +        if [ "$size_cmp" != 0 ]; then
 +            echo "size: |$size1 - $size2| >= $size_tolerance"
 +        fi
          return 1
      fi
  }
@@@ -80,92 -73,42 +80,92 @@@ run()
      $target_exec $target_path/"$@"
  }
  
 +runecho(){
 +    test "${V:-0}" -gt 0 && echo "$target_exec" $target_path/"$@" >&3
 +    $target_exec $target_path/"$@" >&3
 +}
 +
  probefmt(){
 -    run avprobe -show_format_entry format_name -v 0 "$@"
 +    run ffprobe${PROGSUF} -show_entries format=format_name -print_format default=nw=1:nk=1 -v 0 "$@"
 +}
 +
 +probetags(){
 +    run ffprobe${PROGSUF} -show_entries format_tags -v 0 "$@"
 +}
 +
 +runlocal(){
 +    test "${V:-0}" -gt 0 && echo ${base}/"$@" ${base} >&3
 +    ${base}/"$@" ${base}
 +}
 +
 +probeframes(){
 +    run ffprobe${PROGSUF} -show_frames -v 0 "$@"
  }
  
 -probestream(){
 -    run avprobe -show_stream_entry "$1" -v 0 "$2"
 +probechapters(){
 +    run ffprobe${PROGSUF} -show_chapters -v 0 "$@"
  }
  
 -avconv(){
 +probegaplessinfo(){
 +    filename="$1"
 +    shift
 +    run ffprobe${PROGSUF} -bitexact -select_streams a -show_entries format=start_time,duration:stream=index,start_pts,duration_ts -v 0 "$filename" "$@"
 +    pktfile1="${outdir}/${test}.pkts"
 +    framefile1="${outdir}/${test}.frames"
 +    cleanfiles="$cleanfiles $pktfile1 $framefile1"
 +    run ffprobe${PROGSUF} -bitexact -select_streams a -of compact -count_packets -show_entries packet=pts,dts,duration,flags:stream=nb_read_packets -v 0 "$filename" "$@" > "$pktfile1"
 +    head -n 8 "$pktfile1"
 +    tail -n 9 "$pktfile1"
 +    run ffprobe${PROGSUF} -bitexact -select_streams a -of compact -count_frames -show_entries frame=pkt_pts,pkt_dts,best_effort_timestamp,pkt_duration,nb_samples:stream=nb_read_frames -v 0 "$filename" "$@" > "$framefile1"
 +    head -n 8 "$framefile1"
 +    tail -n 9 "$framefile1"
 +}
 +
 +ffmpeg(){
      dec_opts="-hwaccel $hwaccel -threads $threads -thread_type $thread_type"
 -    avconv_args="-nostats -cpuflags $cpuflags"
 +    ffmpeg_args="-nostdin -nostats -cpuflags $cpuflags"
      for arg in $@; do
 -        [ x${arg} = x-i ] && avconv_args="${avconv_args} ${dec_opts}"
 -        avconv_args="${avconv_args} ${arg}"
 +        [ x${arg} = x-i ] && ffmpeg_args="${ffmpeg_args} ${dec_opts}"
 +        ffmpeg_args="${ffmpeg_args} ${arg}"
      done
 -    run avconv ${avconv_args}
 +    run ffmpeg${PROGSUF} ${ffmpeg_args}
  }
  
  framecrc(){
 -    avconv "$@" -f framecrc -
 +    ffmpeg "$@" -bitexact -f framecrc -
 +}
 +
 +ffmetadata(){
 +    ffmpeg "$@" -bitexact -f ffmetadata -
  }
  
  framemd5(){
 -    avconv "$@" -f framemd5 -
 +    ffmpeg "$@" -bitexact -f framemd5 -
  }
  
  crc(){
 -    avconv "$@" -f crc -
 +    ffmpeg "$@" -f crc -
 +}
 +
 +md5pipe(){
 +    ffmpeg "$@" md5:
  }
  
  md5(){
 -    avconv "$@" md5:
 +    encfile="${outdir}/${test}.out"
 +    cleanfiles="$cleanfiles $encfile"
 +    ffmpeg "$@" $encfile
 +    do_md5sum $encfile | awk '{print $1}'
  }
  
  pcm(){
 -    avconv "$@" -vn -f s16le -
 +    ffmpeg "$@" -vn -f s16le -
 +}
 +
 +fmtstdout(){
 +    fmt=$1
 +    shift 1
 +    ffmpeg -bitexact "$@" -f $fmt -
  }
  
  enc_dec_pcm(){
      encfile="${outdir}/${test}.${out_fmt}"
      cleanfiles=$encfile
      encfile=$(target_path ${encfile})
 -    avconv -i $src_file "$@" -f $out_fmt -y ${encfile} || return
 -    avconv -f $out_fmt -i ${encfile} -c:a pcm_${pcm_fmt} -f ${dec_fmt} -
 +    ffmpeg -i $src_file "$@" -f $out_fmt -y ${encfile} || return
 +    ffmpeg -bitexact -i ${encfile} -c:a pcm_${pcm_fmt} -fflags +bitexact -f ${dec_fmt} -
  }
  
  FLAGS="-flags +bitexact -sws_flags +accurate_rnd+bitexact -fflags +bitexact"
@@@ -199,188 -142,104 +199,235 @@@ enc_dec()
      tsrcfile=$(target_path $srcfile)
      tencfile=$(target_path $encfile)
      tdecfile=$(target_path $decfile)
 -    avconv -f $src_fmt $DEC_OPTS -i $tsrcfile $ENC_OPTS $enc_opt $FLAGS \
 +    ffmpeg -f $src_fmt $DEC_OPTS -i $tsrcfile $ENC_OPTS $enc_opt $FLAGS \
          -f $enc_fmt -y $tencfile || return
      do_md5sum $encfile
      echo $(wc -c $encfile)
 -    avconv $DEC_OPTS -i $tencfile $ENC_OPTS $dec_opt $FLAGS \
 +    ffmpeg $8 $DEC_OPTS -i $tencfile $ENC_OPTS $dec_opt $FLAGS \
          -f $dec_fmt -y $tdecfile || return
      do_md5sum $decfile
      tests/tiny_psnr $srcfile $decfile $cmp_unit $cmp_shift
  }
  
 -avconv2="$target_exec ${target_path}/avconv"
 +transcode(){
 +    src_fmt=$1
 +    srcfile=$2
 +    enc_fmt=$3
 +    enc_opt=$4
 +    final_decode=$5
 +    encfile="${outdir}/${test}.${enc_fmt}"
 +    test "$7" = -keep || cleanfiles="$cleanfiles $encfile"
 +    tsrcfile=$(target_path $srcfile)
 +    tencfile=$(target_path $encfile)
 +    ffmpeg -f $src_fmt $DEC_OPTS -i $tsrcfile $ENC_OPTS $enc_opt $FLAGS \
 +        -f $enc_fmt -y $tencfile || return
 +    do_md5sum $encfile
 +    echo $(wc -c $encfile)
 +    ffmpeg $DEC_OPTS -i $encfile $ENC_OPTS $FLAGS $final_decode \
 +        -f framecrc - || return
 +}
 +
 +stream_remux(){
 +    src_fmt=$1
 +    srcfile=$2
 +    enc_fmt=$3
 +    stream_maps=$4
 +    final_decode=$5
 +    encfile="${outdir}/${test}.${enc_fmt}"
 +    test "$7" = -keep || cleanfiles="$cleanfiles $encfile"
 +    tsrcfile=$(target_path $srcfile)
 +    tencfile=$(target_path $encfile)
 +    ffmpeg -f $src_fmt -i $tsrcfile $stream_maps -codec copy $FLAGS \
 +        -f $enc_fmt -y $tencfile || return
 +    ffmpeg $DEC_OPTS -i $encfile $ENC_OPTS $FLAGS $final_decode \
 +        -f framecrc - || return
 +}
 +
+ # FIXME: There is a certain duplication between the avconv-related helper
+ # functions above and below that should be refactored.
 -AVCONV_OPTS="-nostats -y -cpuflags $cpuflags -threads $threads"
++ffmpeg2="$target_exec ${target_path}/ffmpeg"
+ raw_src="${target_path}/tests/vsynth1/%02d.pgm"
+ crcfile="tests/data/$test.lavf.crc"
+ target_crcfile="${target_path}/$crcfile"
++[ "${V-0}" -gt 0 ] && echov=echov || echov=:
++
+ echov(){
+     echo "$@" >&3
+ }
 -ENC_OPTS="$DEC_OPTS -threads 1 -dct fastint"
++AVCONV_OPTS="-nostdin -nostats -y -cpuflags $cpuflags -threads $threads"
+ DEC_OPTS="-flags +bitexact -idct simple -sws_flags +accurate_rnd+bitexact -fflags +bitexact"
 -    $echov $avconv2 $AVCONV_OPTS $*
 -    $avconv2 $AVCONV_OPTS $*
++ENC_OPTS="$DEC_OPTS -threads $threads -dct fastint"
+ run_avconv(){
 -    do_avconv $file $DEC_OPTS -f image2 -c:v pgmyuv -i $raw_src -f image2pipe $ENC_OPTS -t 1 -qscale 10
++    $echov $ffmpeg2 $AVCONV_OPTS $*
++    $ffmpeg2 $AVCONV_OPTS $*
+ }
+ do_avconv(){
+     f="$1"
+     shift
+     set -- $* ${target_path}/$f
+     run_avconv $*
+     do_md5sum $f
+     echo $(wc -c $f)
+ }
+ do_avconv_crc(){
+     f="$1"
+     shift
+     run_avconv $* -f crc "$target_crcfile"
+     echo "$f $(cat $crcfile)"
+ }
+ lavf_image2pipe(){
+     t="${test#lavf-}"
+     t="${t%pipe}"
+     outdir="tests/data/lavf"
+     file=${outdir}/${t}pipe.$t
++    do_avconv $file $DEC_OPTS -f image2 -c:v pgmyuv -i $raw_src -f image2pipe "$ENC_OPTS -metadata title=lavftest" -t 1 -qscale 10
+     do_avconv_crc $file $DEC_OPTS -f image2pipe -i $target_path/$file
+ }
 +lavffatetest(){
 +    t="${test#lavf-fate-}"
 +    ref=${base}/ref/lavf-fate/$t
 +    ${base}/lavf-regression.sh $t lavf-fate tests/vsynth1 "$target_exec" "$target_path" "$threads" "$thread_type" "$cpuflags" "$target_samples"
 +}
 +
  lavftest(){
      t="${test#lavf-}"
      ref=${base}/ref/lavf/$t
 -    ${base}/lavf-regression.sh $t lavf tests/vsynth1 "$target_exec" "$target_path" "$threads" "$thread_type" "$cpuflags"
 +    ${base}/lavf-regression.sh $t lavf tests/vsynth1 "$target_exec" "$target_path" "$threads" "$thread_type" "$cpuflags" "$target_samples"
 +}
 +
 +refcmp_metadata(){
 +    refcmp=$1
 +    pixfmt=$2
 +    fuzz=${3:-0.001}
 +    ffmpeg $FLAGS $ENC_OPTS \
 +        -lavfi "testsrc2=size=300x200:rate=1:duration=5,format=${pixfmt},split[ref][tmp];[tmp]avgblur=4[enc];[enc][ref]${refcmp},metadata=print:file=-" \
 +        -f null /dev/null | awk -v ref=${ref} -v fuzz=${fuzz} -f ${base}/refcmp-metadata.awk -
  }
  
  video_filter(){
      filters=$1
      shift
      label=${test#filter-}
 +    raw_src="${target_path}/tests/vsynth1/%02d.pgm"
      printf '%-20s' $label
 -    avconv $DEC_OPTS -f image2 -c:v pgmyuv -i $raw_src \
 -        $FLAGS $ENC_OPTS -vf "$filters" -c:v rawvideo -frames:v 5 $* -f nut md5:
 +    ffmpeg $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src \
 +        $FLAGS $ENC_OPTS -vf "$filters" -vcodec rawvideo -frames:v 5 $* -f nut md5:
  }
  
  pixfmts(){
      filter=${test#filter-pixfmts-}
 +    filter=${filter%_*}
      filter_args=$1
 +    prefilter_chain=$2
 +    nframes=${3:-1}
  
      showfiltfmts="$target_exec $target_path/libavfilter/tests/filtfmts"
 -    exclude_fmts=${outfile}${filter}_exclude_fmts
 -    out_fmts=${outfile}${filter}_out_fmts
 +    scale_exclude_fmts=${outfile}_scale_exclude_fmts
 +    scale_in_fmts=${outfile}_scale_in_fmts
 +    scale_out_fmts=${outfile}_scale_out_fmts
 +    in_fmts=${outfile}_in_fmts
  
      # exclude pixel formats which are not supported as input
 -    avconv -pix_fmts list 2>/dev/null | awk 'NR > 8 && /^\..\./ { print $2 }' | sort >$exclude_fmts
 -    $showfiltfmts scale | awk -F '[ \r]' '/^OUTPUT/{ print $3 }' | sort | comm -23 - $exclude_fmts >$out_fmts
 +    $showfiltfmts scale | awk -F '[ \r]' '/^INPUT/{ fmt=substr($3, 5); print fmt }' | sort >$scale_in_fmts
 +    $showfiltfmts scale | awk -F '[ \r]' '/^OUTPUT/{ fmt=substr($3, 5); print fmt }' | sort >$scale_out_fmts
 +    comm -12 $scale_in_fmts $scale_out_fmts >$scale_exclude_fmts
  
 -    pix_fmts=$($showfiltfmts $filter | awk -F '[ \r]' '/^INPUT/{ print $3 }' | sort | comm -12 - $out_fmts)
 +    $showfiltfmts $filter | awk -F '[ \r]' '/^INPUT/{ fmt=substr($3, 5); print fmt }' | sort >$in_fmts
 +    pix_fmts=$(comm -12 $scale_exclude_fmts $in_fmts)
  
      outertest=$test
      for pix_fmt in $pix_fmts; do
          test=$pix_fmt
 -        video_filter "format=$pix_fmt,$filter=$filter_args" -pix_fmt $pix_fmt -frames:v 1
 +        video_filter "${prefilter_chain}format=$pix_fmt,$filter=$filter_args" -pix_fmt $pix_fmt -frames:v $nframes
      done
  
 -    rm $exclude_fmts $out_fmts
 +    rm $in_fmts $scale_in_fmts $scale_out_fmts $scale_exclude_fmts
      test=$outertest
  }
  
 +gapless(){
 +    sample=$(target_path $1)
 +    extra_args=$2
 +
 +    decfile1="${outdir}/${test}.out-1"
 +    decfile2="${outdir}/${test}.out-2"
 +    decfile3="${outdir}/${test}.out-3"
 +    cleanfiles="$cleanfiles $decfile1 $decfile2 $decfile3"
 +
 +    # test packet data
 +    ffmpeg $extra_args -i "$sample" -bitexact -c:a copy -f framecrc -y $decfile1
 +    do_md5sum $decfile1
 +    # test decoded (and cut) data
 +    ffmpeg $extra_args -i "$sample" -bitexact -f wav md5:
 +    # the same as above again, with seeking to the start
 +    ffmpeg $extra_args -ss 0 -seek_timestamp 1 -i "$sample" -bitexact -c:a copy -f framecrc -y $decfile2
 +    do_md5sum $decfile2
 +    ffmpeg $extra_args -ss 0 -seek_timestamp 1 -i "$sample" -bitexact -f wav md5:
 +    # test packet data, with seeking to a specific position
 +    ffmpeg $extra_args -ss 5 -seek_timestamp 1 -i "$sample" -bitexact -c:a copy -f framecrc -y $decfile3
 +    do_md5sum $decfile3
 +}
 +
 +gaplessenc(){
 +    sample=$(target_path $1)
 +    format=$2
 +    codec=$3
 +
 +    file1="${outdir}/${test}.out-1"
 +    cleanfiles="$cleanfiles $file1"
 +
 +    # test data after reencoding
 +    ffmpeg -i "$sample" -bitexact -map 0:a -c:a $codec -f $format -y "$file1"
 +    probegaplessinfo "$file1"
 +}
 +
 +audio_match(){
 +    sample=$(target_path $1)
 +    trefile=$(target_path $2)
 +    extra_args=$3
 +
 +    decfile="${outdir}/${test}.wav"
 +    cleanfiles="$cleanfiles $decfile"
 +
 +    ffmpeg -i "$sample" -bitexact $extra_args -y $decfile
 +    tests/audiomatch $decfile $trefile
 +}
 +
 +concat(){
 +    template=$1
 +    sample=$2
 +    mode=$3
 +    extra_args=$4
 +
 +    concatfile="${outdir}/${test}.ffconcat"
 +    packetfile="${outdir}/${test}.ffprobe"
 +    cleanfiles="$concatfile $packetfile"
 +
 +    awk "{gsub(/%SRCFILE%/, \"$sample\"); print}" $template > $concatfile
 +
 +    if [ "$mode" = "md5" ]; then
 +        run ffprobe${PROGSUF} -bitexact -show_streams -show_packets -v 0 -fflags keepside -safe 0 $extra_args $concatfile | tr -d '\r' > $packetfile
 +        do_md5sum $packetfile
 +    else
 +        run ffprobe${PROGSUF} -bitexact -show_streams -show_packets -v 0 -of compact=p=0:nk=1 -fflags keepside -safe 0 $extra_args $concatfile
 +    fi
 +}
 +
  null(){
      :
  }
  
 +# Disable globbing: command arguments may contain globbing characters and
 +# must be kept verbatim
 +set -f
 +
  exec 3>&2
  eval $command >"$outfile" 2>$errfile
  err=$?
@@@ -390,14 -249,12 +437,14 @@@ if [ $err -gt 128 ]; the
      test "${sig}" = "${sig%[!A-Za-z]*}" || unset sig
  fi
  
 -if test -e "$ref" || test $cmp = "oneline" || test $cmp = "null" ; then
 +if test -e "$ref" || test $cmp = "oneline" || test $cmp = "null" || test $cmp = "grep" ; then
      case $cmp in
          diff)   diff -u -b "$ref" "$outfile"            >$cmpfile ;;
 +        rawdiff)diff -u    "$ref" "$outfile"            >$cmpfile ;;
          oneoff) oneoff     "$ref" "$outfile"            >$cmpfile ;;
          stddev) stddev     "$ref" "$outfile"            >$cmpfile ;;
          oneline)oneline    "$ref" "$outfile"            >$cmpfile ;;
 +        grep)   grep       "$ref" "$errfile"            >$cmpfile ;;
          null)   cat               "$outfile"            >$cmpfile ;;
      esac
      cmperr=$?
@@@ -426,14 -283,5 +473,14 @@@ if test $err != 0 && test $gen != "no" 
      err=$?
  fi
  
 -test $err = 0 && rm -f $outfile $errfile $cmpfile $cleanfiles
 +if test $err = 0; then
 +    if test $keep = 0; then
 +        rm -f $outfile $errfile $cmpfile $cleanfiles
 +    fi
 +elif test $gen = "no"; then
 +    echo "Test $test failed. Look at $errfile for details."
 +    test "${V:-0}" -gt 0 && cat $errfile
 +else
 +    echo "Updating reference failed, possibly no output file was generated."
 +fi
  exit $err
diff --combined tests/fate/avformat.mak
index a12f9ccc7116986929f97047df05e6b3ebc51930,a4a0988bb241c7e0b6781ef9b8daf09b4821fa98..a0eaeefbe01cbe9a261d4d4b345ede6021f2108f
  FATE_LAVF-$(call ENCDEC,  PCM_S16BE,             AIFF)               += aiff
  FATE_LAVF-$(call ENCDEC,  PCM_ALAW,              PCM_ALAW)           += alaw
 +FATE_LAVF-$(call ENCDEC,  APNG,                  APNG)               += apng
  FATE_LAVF-$(call ENCDEC2, MSMPEG4V3,  MP2,       ASF)                += asf
 +FATE_LAVF-$(call ENCDEC,  PCM_S16BE_PLANAR,      AST)                += ast
  FATE_LAVF-$(call ENCDEC,  PCM_S16BE,             AU)                 += au
  FATE_LAVF-$(call ENCDEC2, MPEG4,      MP2,       AVI)                += avi
  FATE_LAVF-$(call ENCDEC,  BMP,                   IMAGE2)             += bmp
 +FATE_LAVF-$(call ENCDEC,  PCM_S16BE,             CAF)                += caf
  FATE_LAVF-$(call ENCDEC,  DPX,                   IMAGE2)             += dpx
  FATE_LAVF-$(call ENCDEC2, DVVIDEO,    PCM_S16LE, AVI)                += dv_fmt
 +FATE_LAVF-$(call ENCDEC,  FITS,                  FITS)               += fits
 +FATE_LAVF-$(call ENCDEC,  RAWVIDEO,              FILMSTRIP)          += flm
  FATE_LAVF-$(call ENCDEC,  FLV,                   FLV)                += flv_fmt
  FATE_LAVF-$(call ENCDEC,  GIF,                   IMAGE2)             += gif
  FATE_LAVF-$(call ENCDEC2, MPEG2VIDEO, PCM_S16LE, GXF)                += gxf
 +FATE_LAVF-$(call ENCDEC,  PCM_S16LE,             IRCAM)              += ircam
  FATE_LAVF-$(call ENCDEC,  MJPEG,                 IMAGE2)             += jpg
 +FATE_LAVF-$(call ENCMUX,  TTA,                   MATROSKA_AUDIO)     += mka
  FATE_LAVF-$(call ENCDEC2, MPEG4,      MP2,       MATROSKA)           += mkv
  FATE_LAVF-$(call ENCDEC,  ADPCM_YAMAHA,          MMF)                += mmf
 -FATE_LAVF-$(call ENCDEC2, MPEG4,      PCM_ALAW,  MOV)                += mov
 +FATE_LAVF-$(call ENCDEC2, MPEG4,      PCM_ALAW,  MOV)                += mov ismv
  FATE_LAVF-$(call ENCDEC2, MPEG1VIDEO, MP2,       MPEG1SYSTEM MPEGPS) += mpg
  FATE_LAVF-$(call ENCDEC,  PCM_MULAW,             PCM_MULAW)          += mulaw
  FATE_LAVF-$(call ENCDEC2, MPEG2VIDEO, PCM_S16LE, MXF)                += mxf
  FATE_LAVF-$(call ENCDEC2, MPEG2VIDEO, PCM_S16LE, MXF_D10 MXF)        += mxf_d10
 +FATE_LAVF-$(call ENCDEC2, DVVIDEO,    PCM_S16LE, MXF)                += mxf_dv25
 +FATE_LAVF-$(call ENCDEC2, DVVIDEO,    PCM_S16LE, MXF)                += mxf_dvcpro50
 +FATE_LAVF-$(call ENCDEC2, DNXHD,      PCM_S16LE, MXF_OPATOM MXF)     += mxf_opatom
 +FATE_LAVF-$(call ENCDEC2, DNXHD,      PCM_S16LE, MXF_OPATOM MXF)     += mxf_opatom_audio
  FATE_LAVF-$(call ENCDEC2, MPEG4,      MP2,       NUT)                += nut
  FATE_LAVF-$(call ENCDEC,  FLAC,                  OGG)                += ogg
  FATE_LAVF-$(call ENCDEC,  PAM,                   IMAGE2)             += pam
- FATE_LAVF-$(call ENCDEC,  PBM,                   IMAGE2PIPE)         += pbmpipe
  FATE_LAVF-$(call ENCDEC,  PCX,                   IMAGE2)             += pcx
  FATE_LAVF-$(call ENCDEC,  PGM,                   IMAGE2)             += pgm
- FATE_LAVF-$(call ENCDEC,  PGM,                   IMAGE2PIPE)         += pgmpipe
  FATE_LAVF-$(call ENCDEC,  PNG,                   IMAGE2)             += png
  FATE_LAVF-$(call ENCDEC,  PPM,                   IMAGE2)             += ppm
- FATE_LAVF-$(call ENCDEC,  PPM,                   IMAGE2PIPE)         += ppmpipe
  FATE_LAVF-$(call ENCMUX,  RV10 AC3_FIXED,        RM)                 += rm
  FATE_LAVF-$(call ENCDEC,  PCM_U8,                RSO)                += rso
  FATE_LAVF-$(call ENCDEC,  SGI,                   IMAGE2)             += sgi
 +FATE_LAVF-$(call ENCMUX,  MJPEG PCM_S16LE,       SMJPEG)             += smjpeg
  FATE_LAVF-$(call ENCDEC,  PCM_S16LE,             SOX)                += sox
  FATE_LAVF-$(call ENCDEC,  SUNRAST,               IMAGE2)             += sunrast
  FATE_LAVF-$(call ENCDEC,  FLV,                   SWF)                += swf
  FATE_LAVF-$(call ENCDEC,  TARGA,                 IMAGE2)             += tga
  FATE_LAVF-$(call ENCDEC,  TIFF,                  IMAGE2)             += tiff
  FATE_LAVF-$(call ENCDEC2, MPEG2VIDEO, MP2,       MPEGTS)             += ts
 +FATE_LAVF-$(call ENCDEC,  TTA,                   TTA)                += tta
  FATE_LAVF-$(call ENCDEC,  PCM_U8,                VOC)                += voc
  FATE_LAVF-$(call ENCDEC,  PCM_S16LE,             VOC)                += voc_s16
  FATE_LAVF-$(call ENCDEC,  PCM_S16LE,             WAV)                += wav
 +FATE_LAVF-$(call ENCDEC,  PCM_S16LE,             WAV)                += wav_peak
 +FATE_LAVF-$(call ENCDEC,  PCM_S16LE,             WAV)                += wav_peak_only
 +FATE_LAVF-$(call ENCMUX,  PCM_S16LE,             W64)                += w64
 +FATE_LAVF-$(call ENCDEC,  MP2,                   WTV)                += wtv
 +FATE_LAVF-$(call ENCDEC,  WAVPACK,               WV)                 += wv
 +FATE_LAVF-$(call ENCDEC,  XBM,                   IMAGE2)             += xbm
  FATE_LAVF-$(call ENCDEC,  XWD,                   IMAGE2)             += xwd
  FATE_LAVF-$(CONFIG_YUV4MPEGPIPE_MUXER)                               += yuv4mpeg
  
  FATE_LAVF += $(FATE_LAVF-yes:%=fate-lavf-%)
 -FATE_LAVF += fate-lavf-pixfmt
 +FATE_LAVF_PIXFMT-$(CONFIG_SCALE_FILTER) += fate-lavf-pixfmt
 +FATE_LAVF += $(FATE_LAVF_PIXFMT-yes)
  
  $(FATE_LAVF): $(AREF) $(VREF)
  $(FATE_LAVF): CMD = lavftest
 +$(FATE_LAVF): CMP =
  
  FATE_AVCONV += $(FATE_LAVF)
  fate-lavf:     $(FATE_LAVF)
 +
 +FATE_LAVF_FATE-$(call ALLYES, MATROSKA_DEMUXER   OGG_MUXER)          += ogg_vp3
 +FATE_LAVF_FATE-$(call ALLYES, MATROSKA_DEMUXER   OGV_MUXER)          += ogg_vp8
 +FATE_LAVF_FATE-$(call ALLYES, MOV_DEMUXER        LATM_MUXER)         += latm
 +FATE_LAVF_FATE-$(call ALLYES, MP3_DEMUXER        MP3_MUXER)          += mp3
 +FATE_LAVF_FATE-$(call ALLYES, MOV_DEMUXER        MOV_MUXER)          += mov_qtrle_mace6
 +FATE_LAVF_FATE-$(call ALLYES, AVI_DEMUXER        AVI_MUXER)          += avi_cram
 +
 +FATE_LAVF_FATE +=  $(FATE_LAVF_FATE-yes:%=fate-lavf-fate-%)
 +$(FATE_LAVF_FATE): CMD = lavffatetest
 +
 +FATE_SAMPLES_FFMPEG += $(FATE_LAVF_FATE)
 +fate-lavf-fate:        $(FATE_LAVF_FATE)
 +
 +tests/data/mp4-to-ts.m3u8: TAG = GEN
 +tests/data/mp4-to-ts.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
 +      $(M)$(TARGET_EXEC) $(TARGET_PATH)/$< \
 +        -i $(TARGET_SAMPLES)/h264/interlaced_crop.mp4 \
 +        -f ssegment -segment_time 1 -map 0 -flags +bitexact -codec copy \
 +        -segment_list $(TARGET_PATH)/$@ -y $(TARGET_PATH)/tests/data/mp4-to-ts-%03d.ts 2>/dev/null
 +
 +tests/data/adts-to-mkv.m3u8: TAG = GEN
 +tests/data/adts-to-mkv.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
 +      $(M)$(TARGET_EXEC) $(TARGET_PATH)/$< \
 +        -i $(TARGET_SAMPLES)/audiomatch/tones_afconvert_16000_mono_aac_lc.m4a \
 +        -f segment -segment_time 1 -map 0 -flags +bitexact -codec copy -segment_format_options live=1 \
 +        -segment_list $(TARGET_PATH)/$@ -y $(TARGET_PATH)/tests/data/adts-to-mkv-%03d.mkv 2>/dev/null
 +
 +tests/data/adts-to-mkv-header.mkv: TAG = GEN
 +tests/data/adts-to-mkv-header.mkv: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
 +      $(M)$(TARGET_EXEC) $(TARGET_PATH)/$< \
 +        -i $(TARGET_SAMPLES)/audiomatch/tones_afconvert_16000_mono_aac_lc.m4a \
 +        -f segment -segment_time 1 -map 0 -flags +bitexact -codec copy -segment_format_options live=1 \
 +        -segment_header_filename $(TARGET_PATH)/tests/data/adts-to-mkv-header.mkv \
 +        -y $(TARGET_PATH)/tests/data/adts-to-mkv-header-%03d.mkv 2>/dev/null
 +
 +tests/data/adts-to-mkv-header-%.mkv: tests/data/adts-to-mkv-header.mkv ;
 +
 +FATE_SEGMENT_PARTS += 000 001 002
 +
 +tests/data/adts-to-mkv-cated-all.mkv: TAG = GEN
 +tests/data/adts-to-mkv-cated-all.mkv: tests/data/adts-to-mkv-header.mkv $(FATE_SEGMENT_PARTS:%=tests/data/adts-to-mkv-header-%.mkv) | tests/data
 +      $(M)cat $^ >$@
 +
 +tests/data/adts-to-mkv-cated-%.mkv: TAG = GEN
 +tests/data/adts-to-mkv-cated-%.mkv: tests/data/adts-to-mkv-header.mkv tests/data/adts-to-mkv-header-%.mkv | tests/data
 +      $(M)cat $^ >$@
 +
 +FATE_SEGMENT += fate-segment-mp4-to-ts
 +fate-segment-mp4-to-ts: tests/data/mp4-to-ts.m3u8
 +fate-segment-mp4-to-ts: CMD = framecrc -flags +bitexact -i $(TARGET_PATH)/tests/data/mp4-to-ts.m3u8 -c copy
 +FATE_SEGMENT-$(call ALLYES, MOV_DEMUXER H264_MP4TOANNEXB_BSF MPEGTS_MUXER MATROSKA_DEMUXER SEGMENT_MUXER HLS_DEMUXER) += fate-segment-mp4-to-ts
 +
 +FATE_SEGMENT += fate-segment-adts-to-mkv
 +fate-segment-adts-to-mkv: tests/data/adts-to-mkv.m3u8
 +fate-segment-adts-to-mkv: CMD = framecrc -flags +bitexact -i $(TARGET_PATH)/tests/data/adts-to-mkv.m3u8 -c copy
 +fate-segment-adts-to-mkv: REF = $(SRC_PATH)/tests/ref/fate/segment-adts-to-mkv-header-all
 +FATE_SEGMENT-$(call ALLYES, AAC_DEMUXER AAC_ADTSTOASC_BSF MATROSKA_MUXER MATROSKA_DEMUXER SEGMENT_MUXER HLS_DEMUXER) += fate-segment-adts-to-mkv
 +
 +FATE_SEGMENT_ALLPARTS = $(FATE_SEGMENT_PARTS)
 +FATE_SEGMENT_ALLPARTS += all
 +FATE_SEGMENT_SPLIT += $(FATE_SEGMENT_ALLPARTS:%=fate-segment-adts-to-mkv-header-%)
 +$(foreach N,$(FATE_SEGMENT_ALLPARTS),$(eval $(N:%=fate-segment-adts-to-mkv-header-%): tests/data/adts-to-mkv-cated-$(N).mkv))
 +fate-segment-adts-to-mkv-header-%: CMD = framecrc -flags +bitexact -i $(TARGET_PATH)/tests/data/$(@:fate-segment-adts-to-mkv-header-%=adts-to-mkv-cated-%).mkv -c copy
 +FATE_SEGMENT-$(call ALLYES, AAC_DEMUXER AAC_ADTSTOASC_BSF MATROSKA_MUXER MATROSKA_DEMUXER SEGMENT_MUXER HLS_DEMUXER) += $(FATE_SEGMENT_SPLIT)
 +
 +FATE_SAMPLES_FFMPEG += $(FATE_SEGMENT-yes)
 +
 +fate-segment: $(FATE_SEGMENT-yes)
diff --combined tests/lavf-regression.sh
index c5b6734815b219102ca7202e89d3931471832303,fecc36c0fdf5a25fd31b4c92f40a7d8d11afda3e..baf2dc76a52f4c8d6575f9a7bc62160f6fd6ccb8
@@@ -11,16 -11,6 +11,16 @@@ set -
  
  eval do_$test=y
  
 +ENC_OPTS="$ENC_OPTS -metadata title=lavftest"
 +
 +do_lavf_fate()
 +{
 +    file=${outfile}lavf.$1
 +    input="${target_samples}/$2"
 +    do_avconv $file $DEC_OPTS -i "$input" $ENC_OPTS -vcodec copy -acodec copy
 +    do_avconv_crc $file $DEC_OPTS -i $target_path/$file $3
 +}
 +
  do_lavf()
  {
      file=${outfile}lavf.$1
          do_avconv_crc $file $DEC_OPTS -i $target_path/$file $4
  }
  
- do_streamed_images()
- {
-     file=${outfile}${1}pipe.$1
-     do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src -f image2pipe $ENC_OPTS -t 1 -qscale 10
-     do_avconv_crc $file $DEC_OPTS -f image2pipe -i $target_path/$file
- }
 +do_lavf_timecode_nodrop() { do_lavf $1 "" "$2 -timecode 02:56:14:13"; }
 +do_lavf_timecode_drop()   { do_lavf $1 "" "$2 -timecode 02:56:14.13 -r 30000/1001"; }
 +
 +do_lavf_timecode()
 +{
 +    do_lavf_timecode_nodrop "$@"
 +    do_lavf_timecode_drop "$@"
 +    do_lavf $1 "" "$2"
 +}
 +
  do_image_formats()
  {
      outfile="$datadir/images/$1/"
      mkdir -p "$outfile"
      file=${outfile}%02d.$1
 -    run_avconv $DEC_OPTS -f image2 -c:v pgmyuv -i $raw_src $2 $ENC_OPTS $3 -frames 12 -y -qscale 10 $target_path/$file
 +    run_avconv $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $2 $ENC_OPTS -frames 13 -y -qscale 10 $target_path/$file
      do_md5sum ${outfile}02.$1
 -    do_avconv_crc $file $DEC_OPTS $3 -i $target_path/$file
 +    do_avconv_crc $file $DEC_OPTS -i $target_path/$file $3
      echo $(wc -c ${outfile}02.$1)
  }
  
@@@ -65,11 -38,11 +58,11 @@@ do_audio_only(
  }
  
  if [ -n "$do_avi" ] ; then
 -do_lavf avi "" "-c:a mp2 -ar 44100"
 +do_lavf avi "" "-acodec mp2 -ar 44100 -ab 64k -threads 1"
  fi
  
  if [ -n "$do_asf" ] ; then
 -do_lavf asf "" "-c:a mp2 -ar 44100" "-r 25"
 +do_lavf asf "" "-acodec mp2 -ar 44100 -ab 64k" "-r 25"
  fi
  
  if [ -n "$do_rm" ] ; then
@@@ -79,174 -52,68 +72,162 @@@ do_lavf rm "" "-c:a ac3_fixed" "" disab
  fi
  
  if [ -n "$do_mpg" ] ; then
 -do_lavf mpg "" "-ar 44100"
 +do_lavf_timecode mpg "-ab 64k -ar 44100 -threads 1"
  fi
  
  if [ -n "$do_mxf" ] ; then
 -do_lavf mxf "-ar 48000" "-bf 2 -timecode_frame_start 264363"
 +do_lavf_timecode mxf "-ar 48000 -bf 2 -threads 1"
  fi
  
  if [ -n "$do_mxf_d10" ]; then
 -do_lavf mxf_d10 "-ar 48000 -ac 2" "-r 25 -vf scale=720:576,pad=720:608:0:32 -c:v mpeg2video -g 0 -flags +ildct+low_delay -dc 10 -non_linear_quant 1 -intra_vlc 1 -qscale 1 -ps 1 -qmin 1 -rc_max_vbv_use 1 -rc_min_vbv_use 1 -pix_fmt yuv422p -minrate 30000k -maxrate 30000k -b 30000k -bufsize 1200000 -top 1 -rc_init_occupancy 1200000 -qmax 12 -f mxf_d10"
 +do_lavf mxf_d10 "-ar 48000 -ac 2" "-r 25 -vf scale=720:576,pad=720:608:0:32 -vcodec mpeg2video -g 0 -flags +ildct+low_delay -dc 10 -non_linear_quant 1 -intra_vlc 1 -qscale 1 -ps 1 -qmin 1 -rc_max_vbv_use 1 -rc_min_vbv_use 1 -pix_fmt yuv422p -minrate 30000k -maxrate 30000k -b 30000k -bufsize 1200000 -top 1 -rc_init_occupancy 1200000 -qmax 12 -f mxf_d10"
 +fi
 +
 +if [ -n "$do_mxf_dv25" ]; then
 +do_lavf mxf_dv25 "-ar 48000 -ac 2" "-r 25 -vf scale=720:576,setdar=4/3 -vcodec dvvideo -pix_fmt yuv420p -b 25000k -top 0 -f mxf"
 +fi
 +
 +if [ -n "$do_mxf_dvcpro50" ]; then
 +do_lavf mxf_dvcpro50 "-ar 48000 -ac 2" "-r 25 -vf scale=720:576,setdar=16/9 -vcodec dvvideo -pix_fmt yuv422p -b 50000k -top 0 -f mxf"
 +fi
 +
 +if [ -n "$do_mxf_opatom" ]; then
 +do_lavf mxf_opatom "" "-s 1920x1080 -vcodec dnxhd -pix_fmt yuv422p -vb 36M -f mxf_opatom -map 0"
 +fi
 +
 +if [ -n "$do_mxf_opatom_audio" ]; then
 +do_lavf mxf_opatom_audio "-ar 48000 -ac 1" "-f mxf_opatom -mxf_audio_edit_rate 25 -map 1"
  fi
  
  if [ -n "$do_ts" ] ; then
 -do_lavf ts "" "-mpegts_transport_stream_id 42 -ar 44100"
 +do_lavf ts "" "-ab 64k -mpegts_transport_stream_id 42 -ar 44100 -threads 1"
  fi
  
  if [ -n "$do_swf" ] ; then
  do_lavf swf "" "-an"
  fi
  
 +if [ -n "$do_ffm" ] ; then
 +do_lavf ffm "" "-ar 44100 -threads 1"
 +fi
 +
 +if [ -n "$do_flm" ] ; then
 +do_lavf flm "" "-pix_fmt rgba"
 +fi
 +
  if [ -n "$do_flv_fmt" ] ; then
  do_lavf flv "" "-an"
  fi
  
  if [ -n "$do_mov" ] ; then
 -do_lavf mov "" "-c:a pcm_alaw -c:v mpeg4"
 +mov_common_opt="-acodec pcm_alaw -vcodec mpeg4 -threads 1"
 +do_lavf mov "" "-movflags +rtphint $mov_common_opt"
 +do_lavf_timecode mov "-movflags +faststart $mov_common_opt"
 +do_lavf_timecode mp4 "-vcodec mpeg4 -an -threads 1"
 +fi
 +
 +if [ -n "$do_ismv" ] ; then
 +do_lavf_timecode ismv "-an -vcodec mpeg4 -threads 1"
  fi
  
  if [ -n "$do_dv_fmt" ] ; then
 +do_lavf_timecode_nodrop dv "-ar 48000 -r 25 -s pal -ac 2"
 +do_lavf_timecode_drop   dv "-ar 48000 -pix_fmt yuv411p -s ntsc -ac 2"
  do_lavf dv "-ar 48000 -channel_layout stereo" "-r 25 -s pal"
  fi
  
  if [ -n "$do_gxf" ] ; then
 -do_lavf gxf "-ar 48000" "-r 25 -s pal -ac 1"
 +do_lavf_timecode_nodrop gxf "-ar 48000 -r 25 -s pal -ac 1 -threads 1"
 +do_lavf_timecode_drop   gxf "-ar 48000 -s ntsc -ac 1 -threads 1"
 +do_lavf gxf "-ar 48000" "-r 25 -s pal -ac 1 -threads 1"
  fi
  
  if [ -n "$do_nut" ] ; then
 -do_lavf nut "" "-c:a mp2 -ar 44100"
 +do_lavf nut "" "-acodec mp2 -ab 64k -ar 44100 -threads 1"
 +fi
 +
 +if [ -n "$do_mka" ] ; then
 +do_audio_only mka "" "-c:a tta"
  fi
  
  if [ -n "$do_mkv" ] ; then
 -do_lavf mkv "" "-c:a mp2 -c:v mpeg4 -ar 44100"
 +do_lavf mkv "" "-acodec mp2 -ab 64k -vcodec mpeg4 \
 + -attach ${raw_src%/*}/00.pgm -metadata:s:t mimetype=image/x-portable-greymap -threads 1"
 +do_lavf mkv "" "-acodec mp2 -ab 64k -vcodec mpeg4 -ar 44100 -threads 1"
 +fi
 +
 +if [ -n "$do_mp3" ] ; then
 +do_lavf_fate mp3 "mp3-conformance/he_32khz.bit" "-acodec copy"
 +fi
 +
 +if [ -n "$do_latm" ] ; then
 +do_lavf_fate latm "aac/al04_44.mp4" "-acodec copy"
 +fi
 +
 +if [ -n "$do_ogg_vp3" ] ; then
 +# -idct simple causes different results on different systems
 +DEC_OPTS="$DEC_OPTS -idct auto"
 +do_lavf_fate ogg "vp3/coeff_level64.mkv"
 +fi
 +
 +if [ -n "$do_ogg_vp8" ] ; then
 +do_lavf_fate ogv "vp8/RRSF49-short.webm" "-acodec copy"
 +fi
 +
 +if [ -n "$do_mov_qtrle_mace6" ] ; then
 +DEC_OPTS="$DEC_OPTS -idct auto"
 +do_lavf_fate mov "qtrle/Animation-16Greys.mov"
 +fi
 +
 +if [ -n "$do_avi_cram" ] ; then
 +DEC_OPTS="$DEC_OPTS -idct auto"
 +do_lavf_fate avi "cram/toon.avi"
 +fi
 +
 +if [ -n "$do_wtv" ] ; then
 +do_lavf wtv "" "-acodec mp2 -threads 1"
  fi
  
  
  # streamed images
  # mjpeg
  #file=${outfile}lavf.mjpeg
 -#do_avconv $file -t 1 -qscale 10 -f image2 -c:v pgmyuv -i $raw_src
 +#do_avconv $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src
  #do_avconv_crc $file -i $target_path/$file
  
- if [ -n "$do_pbmpipe" ] ; then
- do_streamed_images pbm
- fi
- if [ -n "$do_pgmpipe" ] ; then
- do_streamed_images pgm
- fi
- if [ -n "$do_ppmpipe" ] ; then
- do_streamed_images ppm
- fi
  if [ -n "$do_gif" ] ; then
  file=${outfile}lavf.gif
 -do_avconv $file $DEC_OPTS -f image2 -c:v pgmyuv -i $raw_src $ENC_OPTS -t 1 -qscale 10 -pix_fmt rgb24
 +do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $ENC_OPTS -t 1 -qscale 10 -pix_fmt rgb24
 +do_avconv_crc $file $DEC_OPTS -i $target_path/$file -pix_fmt rgb24
 +fi
 +
 +if [ -n "$do_apng" ] ; then
 +file=${outfile}lavf.apng
 +do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $ENC_OPTS -t 1 -pix_fmt rgb24
 +do_avconv_crc $file $DEC_OPTS -i $target_path/$file -pix_fmt rgb24
 +file_copy=${outfile}lavf.copy.apng
 +do_avconv $file_copy $DEC_OPTS -i $file $ENC_OPTS -c copy
 +do_avconv_crc $file_copy $DEC_OPTS -i $target_path/$file_copy
 +file=${outfile}lavf.png
 +do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $ENC_OPTS -pix_fmt rgb24 -frames:v 1 -f apng
  do_avconv_crc $file $DEC_OPTS -i $target_path/$file -pix_fmt rgb24
  fi
  
  if [ -n "$do_yuv4mpeg" ] ; then
  file=${outfile}lavf.y4m
 -do_avconv $file $DEC_OPTS -f image2 -c:v pgmyuv -i $raw_src $ENC_OPTS -t 1 -qscale 10
 +do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $ENC_OPTS -t 1 -qscale 10
  do_avconv_crc $file -i $target_path/$file
  fi
  
 +if [ -n "$do_fits" ] ; then
 +pix_fmts="gray gray16be gbrp gbrap gbrp16be gbrap16be"
 +for pix_fmt in $pix_fmts ; do
 +    file=${outfile}${pix_fmt}lavf.fits
 +    do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $ENC_OPTS -pix_fmt $pix_fmt
 +    do_avconv_crc $file $DEC_OPTS -i $target_path/$file -pix_fmt $pix_fmt
 +done
 +fi
 +
  # image formats
  
  if [ -n "$do_pgm" ] ; then
  
  if [ -n "$do_png" ] ; then
  do_image_formats png
 +do_image_formats png "-pix_fmt gray16be"
 +do_image_formats png "-pix_fmt rgb48be"
 +fi
 +
 +if [ -n "$do_xbm" ] ; then
 +do_image_formats xbm
  fi
  
  if [ -n "$do_bmp" ] ; then
@@@ -284,40 -145,23 +265,40 @@@ do_image_formats sg
  fi
  
  if [ -n "$do_jpg" ] ; then
 -do_image_formats jpg "-pix_fmt yuvj420p" "-f image2"
 +do_image_formats jpg "-pix_fmt yuvj420p"
  fi
  
  if [ -n "$do_pam" ] ; then
  do_image_formats pam
 +do_image_formats pam "-pix_fmt rgba"
 +do_image_formats pam "-pix_fmt gray"
 +do_image_formats pam "-pix_fmt gray16be" "-pix_fmt gray16be"
 +do_image_formats pam "-pix_fmt rgb48be" "-pix_fmt rgb48be"
 +do_image_formats pam "-pix_fmt monob"
  fi
  
  if [ -n "$do_pcx" ] ; then
  do_image_formats pcx
  fi
  
 -if [ -n "$do_xwd" ] ; then
 -do_image_formats xwd
 -fi
 -
  if [ -n "$do_dpx" ] ; then
  do_image_formats dpx
 +do_image_formats dpx "-pix_fmt gbrp10le" "-pix_fmt gbrp10le"
 +do_image_formats dpx "-pix_fmt gbrp12le" "-pix_fmt gbrp12le"
 +do_image_formats dpx "-pix_fmt rgb48le"
 +do_image_formats dpx "-pix_fmt rgb48le -bits_per_raw_sample 10" "-pix_fmt rgb48le"
 +do_image_formats dpx "-pix_fmt rgba64le"
 +fi
 +
 +if [ -n "$do_xwd" ] ; then
 +do_image_formats xwd
 +do_image_formats xwd "-pix_fmt rgba"
 +do_image_formats xwd "-pix_fmt rgb565be"
 +do_image_formats xwd "-pix_fmt rgb555be"
 +do_image_formats xwd "-pix_fmt rgb8"
 +do_image_formats xwd "-pix_fmt rgb4_byte"
 +do_image_formats xwd "-pix_fmt gray"
 +do_image_formats xwd "-pix_fmt monow"
  fi
  
  if [ -n "$do_sunrast" ] ; then
@@@ -330,15 -174,6 +311,15 @@@ if [ -n "$do_wav" ] ; the
  do_audio_only wav
  fi
  
 +if [ -n "$do_wav_peak" ] ; then
 +do_audio_only peak.wav "" "-write_peak on"
 +fi
 +
 +if [ -n "$do_wav_peak_only" ] ; then
 +file=${outfile}lavf.peak_only.wav
 +do_avconv $file $DEC_OPTS -ar 44100 -f s16le -i $pcm_src $ENC_OPTS -t 1 -qscale 10 -write_peak only
 +fi
 +
  if [ -n "$do_alaw" ] ; then
  do_audio_only al "" "" "-ar 44100"
  fi
@@@ -360,11 -195,11 +341,11 @@@ do_audio_only ai
  fi
  
  if [ -n "$do_voc" ] ; then
 -do_audio_only voc
 +do_audio_only voc "" "-acodec pcm_u8"
  fi
  
  if [ -n "$do_voc_s16" ] ; then
 -do_audio_only s16.voc "-ac 2" "-c:a pcm_s16le"
 +do_audio_only s16.voc "-ac 2" "-acodec pcm_s16le"
  fi
  
  if [ -n "$do_ogg" ] ; then
@@@ -375,38 -210,10 +356,38 @@@ if [ -n "$do_rso" ] ; the
  do_audio_only rso
  fi
  
 +if [ -n "$do_smjpeg" ] ; then
 +do_lavf smjpeg "" "-f smjpeg"
 +fi
 +
  if [ -n "$do_sox" ] ; then
  do_audio_only sox
  fi
  
 +if [ -n "$do_tta" ] ; then
 +do_audio_only tta
 +fi
 +
 +if [ -n "$do_caf" ] ; then
 +do_audio_only caf
 +fi
 +
 +if [ -n "$do_ast" ] ; then
 +do_audio_only ast "-ac 2" "-loopstart 1 -loopend 10"
 +fi
 +
 +if [ -n "$do_ircam" ] ; then
 +do_audio_only ircam
 +fi
 +
 +if [ -n "$do_w64" ] ; then
 +do_audio_only w64
 +fi
 +
 +if [ -n "$do_wv" ] ; then
 +do_audio_only wv
 +fi
 +
  # pix_fmt conversions
  
  if [ -n "$do_pixfmt" ] ; then
@@@ -416,7 -223,7 +397,7 @@@ conversions="yuv420p yuv422p yuv444p yu
               monob yuv440p yuvj440p"
  for pix_fmt in $conversions ; do
      file=${outfile}${pix_fmt}.yuv
 -    run_avconv $DEC_OPTS -r 1 -f image2 -c:v pgmyuv -i $raw_src \
 +    run_avconv $DEC_OPTS -r 1 -f image2 -vcodec pgmyuv -i $raw_src \
                 $ENC_OPTS -f rawvideo -t 1 -s 352x288 -pix_fmt $pix_fmt $target_path/$raw_dst
      do_avconv $file $DEC_OPTS -f rawvideo -s 352x288 -pix_fmt $pix_fmt -i $target_path/$raw_dst \
                      $ENC_OPTS -f rawvideo -s 352x288 -pix_fmt yuv444p
diff --combined tests/ref/lavf/pbmpipe
index 284f90b16b6da266dff70fff37f744262e92423a,ab7d302b4da1ee56c8feed2f99cef4e3168693c4..5cfb9b5e77ede2d2a89e5a3cbec90e3c4608fc21
@@@ -1,3 -1,3 +1,3 @@@
- 8b974da7f48f9e6d5ae327b4444a71fb *./tests/data/lavf/pbmpipe.pbm
- 317075 ./tests/data/lavf/pbmpipe.pbm
- ./tests/data/lavf/pbmpipe.pbm CRC=0xfc010c66
 -8ced96f5b6b7362358199ae993b4ceb7 *tests/data/lavf/pbmpipe.pbm
++8b974da7f48f9e6d5ae327b4444a71fb *tests/data/lavf/pbmpipe.pbm
+ 317075 tests/data/lavf/pbmpipe.pbm
 -tests/data/lavf/pbmpipe.pbm CRC=0xfae0a1ba
++tests/data/lavf/pbmpipe.pbm CRC=0xfc010c66
diff --combined tests/ref/lavf/pgmpipe
index da6f9a6d3a928d75ba297ade78955e50f84495fb,d854897492e9480ce85e6b0e7df519716f68d1ef..1077a9514accf60e15f44ded84ac3dc6fe589f72
@@@ -1,3 -1,3 +1,3 @@@
- c34e37ea49237c2d1ea81a5944328e59 *./tests/data/lavf/pgmpipe.pgm
- 2534775 ./tests/data/lavf/pgmpipe.pgm
- ./tests/data/lavf/pgmpipe.pgm CRC=0x7aa0122f
 -04e66c8e9e064c8310bd657ee559bd70 *tests/data/lavf/pgmpipe.pgm
++c34e37ea49237c2d1ea81a5944328e59 *tests/data/lavf/pgmpipe.pgm
+ 2534775 tests/data/lavf/pgmpipe.pgm
 -tests/data/lavf/pgmpipe.pgm CRC=0xadf48ba9
++tests/data/lavf/pgmpipe.pgm CRC=0x7aa0122f