Commit Graph

42 Commits

Author SHA1 Message Date
Lynne
4cee7ebd75
ac3: convert to lavu/tx 2022-11-06 14:39:27 +01:00
Vittorio Giovara
111ed1b16b ac3: convert to new channel layout API
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: James Almer <jamrial@gmail.com>
2022-03-15 09:42:39 -03:00
Andreas Rheinhardt
1cc64146e3 avcodec/options_table: Treat (request_)channel_layout as channel layout
Also adapt some FATE tests to already cover this.

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2021-08-15 23:19:35 +02:00
Lynne
2d85e6e723
ac3enc_fixed: convert to 32-bit sample format
The AC3 encoder used to be a separate library called "Aften", which
got merged into libavcodec (literally, SVN commits and all).
The merge preserved as much features from the library as possible.

The code had two versions - a fixed point version and a floating
point version. FFmpeg had floating point DSP code used by other
codecs, the AC3 decoder including, so the floating-point DSP was
simply replaced with FFmpeg's own functions.
However, FFmpeg had no fixed-point audio code at that point. So
the encoder brought along its own fixed-point DSP functions,
including a fixed-point MDCT.

The fixed-point MDCT itself is trivially just a float MDCT with a
different type and each multiply being a fixed-point multiply.
So over time, it got refactored, and the FFT used for all other codecs
was templated.

Due to design decisions at the time, the fixed-point version of the
encoder operates at 16-bits of precision. Although convenient, this,
even at the time, was inadequate and inefficient. The encoder is noisy,
does not produce output comparable to the float encoder, and even
rings at higher frequencies due to the badly approximated winow function.

Enter MIPS (owned by Imagination Technologies at the time). They wanted
quick fixed-point decoding on their FPUless cores. So they contributed
patches to template the AC3 decoder so it had both a fixed-point
and a floating-point version. They also did the same for the AAC decoder.
They however, used 32-bit samples. Not 16-bits. And we did not have
32-bit fixed-point DSP functions, including an MDCT. But instead of
templating our MDCT to output 3 versions (float, 32-bit fixed and 16-bit fixed),
they simply copy-pasted their own MDCT into ours, and completely
ifdeffed our own MDCT code out if a 32-bit fixed point MDCT was selected.

This is also the status quo nowadays - 2 separate MDCTs, one which
produces floating point and 16-bit fixed point versions, and one
sort-of integrated which produces 32-bit MDCT.

MIPS weren't all that interested in encoding, so they left the encoder
as-is, and they didn't care much about the ifdeffery, mess or quality - it's
not their problem.

So the MDCT/FFT code has always been a thorn in anyone looking to clean up
code's eye.

Backstory over. Internally AC3 operates on 25-bit fixed-point coefficients.
So for the floating point version, the encoder simply runs the float MDCT,
and converts the resulting coefficients to 25-bit fixed-point, as AC3 is inherently
a fixed-point codec. For the fixed-point version, the input is 16-bit samples,
so to maximize precision the frame samples are analyzed and the highest set
bit is detected via ac3_max_msb_abs_int16(), and the coefficients are then
scaled up via ac3_lshift_int16(), so the input for the FFT is always at least 14 bits,
computed in normalize_samples(). After FFT, the coefficients are scaled up to 25 bits.

This patch simply changes the encoder to accept 32-bit samples, reusing
the already well-optimized 32-bit MDCT code, allowing us to clean up and drop
a large part of a very messy code of ours, as well as prepare for the future lavu/tx
conversion. The coefficients are simply scaled down to 25 bits during windowing,
skipping 2 separate scalings, as the hacks to extend precision are simply no longer
necessary. There's no point in running the MDCT always at 32 bits when you're
going to drop 6 bits off anyway, the headroom is plenty, and the MDCT rounds
properly.

This also makes the encoder even slightly more accurate over the float version,
as there's no coefficient conversion step necessary.

SIZE SAVINGS:
ARM32:
HARDCODED TABLES:
BASE           - 10709590
DROP  DSP      - 10702872 - diff:   -6.56KiB
DROP  MDCT     - 10667932 - diff:  -34.12KiB - both:   -40.68KiB
DROP  FFT      - 10336652 - diff: -323.52KiB - all:   -364.20KiB
SOFTCODED TABLES:
BASE           -  9685096
DROP  DSP      -  9678378 - diff:   -6.56KiB
DROP  MDCT     -  9643466 - diff:  -34.09KiB - both:   -40.65KiB
DROP  FFT      -  9573918 - diff:  -67.92KiB - all:   -108.57KiB

ARM64:
HARDCODED TABLES:
BASE           - 14641112
DROP  DSP      - 14633806 - diff:   -7.13KiB
DROP  MDCT     - 14604812 - diff:  -28.31KiB - both:   -35.45KiB
DROP  FFT      - 14286826 - diff: -310.53KiB - all:   -345.98KiB
SOFTCODED TABLES:
BASE           - 13636238
DROP  DSP      - 13628932 - diff:   -7.13KiB
DROP  MDCT     - 13599866 - diff:  -28.38KiB - both:   -35.52KiB
DROP  FFT      - 13542080 - diff:  -56.43KiB - all:    -91.95KiB

x86:
HARDCODED TABLES:
BASE           - 12367336
DROP  DSP      - 12354698 - diff:  -12.34KiB
DROP  MDCT     - 12331024 - diff:  -23.12KiB - both:   -35.46KiB
DROP  FFT      - 12029788 - diff: -294.18KiB - all:   -329.64KiB
SOFTCODED TABLES:
BASE           - 11358094
DROP  DSP      - 11345456 - diff:  -12.34KiB
DROP  MDCT     - 11321742 - diff:  -23.16KiB - both:   -35.50KiB
DROP  FFT      - 11276946 - diff:  -43.75KiB - all:    -79.25KiB

PERFORMANCE (10min random s32le):
ARM32 - before -  39.9x - 0m15.046s
ARM32 - after  -  28.2x - 0m21.525s
                       Speed:  -30%

ARM64 - before -  36.1x - 0m16.637s
ARM64 - after  -  36.0x - 0m16.727s
                       Speed: -0.5%

x86   - before - 184x -    0m3.277s
x86   - after  - 190x -    0m3.187s
                       Speed:   +3%
2021-01-14 01:44:12 +01:00
Nicolas George
f08e024ac7 fate: disable automatic conversions on many tests.
Explicitly insert the scale or aresample filter where it would
have been inserted by the negotiation.
Re-enable conversions if it cannot be done easily.

If a conversion is needed in a test, we want to know about it.
If the negotiation changes and makes new conversion necessary,
we want to know about it even more.
2020-09-08 14:16:08 +02:00
James Almer
53937c4371 fate: add test for eac3 dependant stream
Signed-off-by: James Almer <jamrial@gmail.com>
2018-03-30 14:05:10 -03:00
Paul B Mahol
9b22417de6 fate: add eac3_core bitstream filter test
Signed-off-by: Paul B Mahol <onemda@gmail.com>
2018-03-30 10:18:45 +02:00
James Almer
53f1d6a8ee fate: add tests for ac3_fixed 5.1 downmix
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: James Almer <jamrial@gmail.com>
2017-03-28 23:08:17 -03:00
Andreas Cadhalpun
805f38b4d6 fate: replace deprecated request_channels with request_channel_layout
This fixes fate with FF_API_REQUEST_CHANNELS disabled.

Reviewed-by: wm4 <nfxjfg@googlemail.com>
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
2015-08-22 19:16:13 +02:00
Michael Niedermayer
a9aed08fa4 Merge commit '3ad678a85b96fc5fecd60e3d3a31ca5ffc89d67f'
* commit '3ad678a85b96fc5fecd60e3d3a31ca5ffc89d67f':
  fate: Update ac3 test to the new request_channel_layout option

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-06-30 20:55:38 +02:00
Vittorio Giovara
3ad678a85b fate: Update ac3 test to the new request_channel_layout option 2015-06-30 15:34:37 +02:00
Timothy Gu
591d9a072d tests: Add ac3_fixed decoder test
Signed-off-by: Timothy Gu <timothygu99@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-06-05 12:20:44 +02:00
Michael Niedermayer
1f5e5d2205 Merge commit 'ba13606ca6adbc74b4db4a72b0769397d6408791'
* commit 'ba13606ca6adbc74b4db4a72b0769397d6408791':
  fate: Add a --target-samples path parameter

Conflicts:
	configure
	tests/fate/audio.mak
	tests/fate/cover-art.mak
	tests/fate/demux.mak
	tests/fate/ea.mak
	tests/fate/filter-video.mak
	tests/fate/h264.mak
	tests/fate/image.mak
	tests/fate/lossless-audio.mak
	tests/fate/lossless-video.mak
	tests/fate/microsoft.mak
	tests/fate/pcm.mak
	tests/fate/prores.mak
	tests/fate/qt.mak
	tests/fate/real.mak
	tests/fate/screen.mak
	tests/fate/video.mak
	tests/fate/voice.mak
	tests/fate/vpx.mak
	tests/fate/vqf.mak

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2013-05-29 04:25:37 +02:00
Martin Storsjö
ba13606ca6 fate: Add a --target-samples path parameter
This allows having the samples accessible via different paths
on the target and on the host.

Signed-off-by: Martin Storsjö <martin@martin.st>
2013-05-28 17:16:54 +03:00
Michael Niedermayer
3fa6c992d9 Merge remote-tracking branch 'qatar/master'
* qatar/master:
  x86: ac3dsp: Remove 3dnow version of ff_ac3_extract_exponents

Conflicts:
	tests/fate/ac3.mak

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2013-04-27 11:35:03 +02:00
Diego Biurrun
7c00e9d8ae x86: ac3dsp: Remove 3dnow version of ff_ac3_extract_exponents
The function requires increasing the fuzz factor for the ac3/eac3 encode
tests and even so makes fate fail. It only provides a slight encoding
speedup for legacy CPUs that do not support SS2. Thus its benefit is not
worth the trouble it creates and fixing it would be a waste of time.
2013-04-26 21:06:52 +02:00
Michael Niedermayer
fbdb0313f5 ac3dec: fix non-optimal dithering of zero bit mantissas
Use a noise range of -0.707 to 0.707 instead of -0.5 to 0.5

Based on patch by: Mathias Rauen <madshi@gmail.com> and commit by Justin Ruggles (04ea5491)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2013-01-21 14:22:04 +01:00
Mathias Rauen
04ea5491a8 ac3dec: fix non-optimal dithering of zero bit mantissas
Use a noise range of -0.707 to 0.707 instead of -0.5 to 0.5

Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
2013-01-20 14:20:47 -05:00
Janne Grunau
6b07830a77 fate: add ac3/eac3 tests to FATE_SAMPLES_AVCONV
Fixes typo in 2cbdd7c929.
2012-10-31 20:01:08 +01:00
Michael Niedermayer
2f84f13806 fate: remove typo, reenable AC3 tests
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-10-30 20:53:30 +01:00
Michael Niedermayer
e79c3858b3 Merge commit '14f031d7ecfabba0ef02776d4516aa3dcb7c40d8'
* commit '14f031d7ecfabba0ef02776d4516aa3dcb7c40d8':
  dv: use AVStream.index instead of abusing AVStream.id
  lavfi: add ashowinfo filter
  avcodec: Add a RFC 3389 comfort noise codec
  lpc: Add a function for calculating reflection coefficients from samples
  lpc: Add a function for calculating reflection coefficients from autocorrelation coefficients
  lavr: document upper bound on number of output samples.
  lavr: add general API usage doxy
  indeo3: remove duplicate capabilities line.
  fate: ac3: Add dependencies

Conflicts:
	Changelog
	doc/filters.texi
	libavcodec/Makefile
	libavcodec/allcodecs.c
	libavcodec/avcodec.h
	libavcodec/codec_desc.c
	libavcodec/version.h
	libavfilter/Makefile
	libavfilter/af_ashowinfo.c
	libavfilter/allfilters.c
	libavfilter/version.h
	libavutil/avutil.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-10-30 14:40:22 +01:00
Michael Niedermayer
cd37963684 Merge commit '381dc1a5ec0925b281c573457c413ae643567086'
* commit '381dc1a5ec0925b281c573457c413ae643567086':
  fate: ac3: Place E-AC-3 tests and AC-3 tests in different groups
  fate: Add shorthands for acodec PCM and ADPCM tests
  avconv: Drop unused function argument from do_video_stats()
  cmdutils: Conditionally compile libswscale-related bits
  aacenc: Drop some unused function arguments
  rtsp: Avoid a cast when calling strtol
  nut: support textual data
  nutenc: verbosely report unsupported negative pts

Conflicts:
	cmdutils.c
	ffmpeg.c
	libavformat/nut.c
	libavformat/nutenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-10-30 13:52:03 +01:00
Diego Biurrun
381dc1a5ec fate: ac3: Place E-AC-3 tests and AC-3 tests in different groups 2012-10-29 19:07:58 +01:00
Diego Biurrun
2cbdd7c929 fate: ac3: Add dependencies 2012-10-29 19:07:58 +01:00
Michael Niedermayer
c6d39fb3c5 Merge remote-tracking branch 'qatar/master'
* qatar/master:
  build: sanitize linking of tools and test programs
  fate: Refactor setting of environment variables for groups of tests

Conflicts:
	tests/fate/audio.mak
	tests/fate/real.mak
	tests/fate/voice.mak

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-10-10 14:13:51 +02:00
Diego Biurrun
096a5d76a5 fate: Refactor setting of environment variables for groups of tests 2012-10-10 10:49:51 +02:00
Michael Niedermayer
f1ca40ee00 Merge remote-tracking branch 'qatar/master'
* qatar/master:
  riff: Add SVQ3 fourcc
  fate: ac3: add 4.0 and downmix tests
  configure: x86: improve ebp availability check
  vorbisdec: ensure FASTDIV denominator is never 1
  avformat: refactor avformat_close_input
  avformat: simplify avformat_close_input

Conflicts:
	configure
	libavcodec/vorbisdec.c
	libavformat/utils.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-15 10:35:26 +02:00
Mans Rullgard
07e87858d4 fate: ac3: add 4.0 and downmix tests
Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-09-14 15:26:05 +01:00
Michael Niedermayer
636dbe2678 fate: increase fuzzyness for ac3 encode for 3dnow
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-07-06 02:25:29 +02:00
Michael Niedermayer
0fcf3013c4 fate: Fix fate-ac3-fixed-encode for pre-ssse3 x86 machines
The default mmxext and sse implementations of apply_window_int16
aren't bitexact.

Signed-off-by: Martin Storsjö <martin@martin.st>
2012-05-31 00:01:04 +03:00
Michael Niedermayer
a1fc1d2e1b Merge remote-tracking branch 'qatar/master'
* qatar/master:
  pcm-mpeg: improve log message wording
  fate: add missing $(TARGET_PATH) to ac3-fixed-encode
  fate: fix md5sum replacement on some systems
  avprobe: correctly set the default formatter
  lavr: add x86-optimized function for mixing 2 to 1 s16p with q8 coeffs
  lavr: add x86-optimized functions for mixing 2 to 1 s16p with float coeffs
  lavr: add C functions for mixing 2 to 1 channels with s16p format
  avprobe: move formatter functions in the context

Conflicts:
	ffprobe.c
	libavcodec/pcm-mpeg.c
	tests/fate/ac3.mak

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-05-30 19:32:06 +02:00
Michael Niedermayer
607461e50d fate: add bitexact flag to ac3-fixed
cant hurt, and should be there for all tests

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-05-30 13:10:22 +02:00
Mans Rullgard
0857e46dd5 fate: add missing $(TARGET_PATH) to ac3-fixed-encode
Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-05-30 07:55:13 +01:00
Michael Niedermayer
b0387edd5e Merge commit 'f919cc7df6ab844bc12f89fe7bef4fb915a47725'
* commit 'f919cc7df6ab844bc12f89fe7bef4fb915a47725':
  fate: fix acodec/vsynth tests for make 3.81
  pcm_mpeg: fix number of consumed bytes to include the header.
  avfilter: include required header file avfilter.h in video.h
  x86: Avoid movs on BUTTERFLYPS when in AVX mode
  x86: use new schema for ASM macros
  fate: convert codec-regression.sh to makefile rules
  fate: allow tests to specify unit size for psnr comparison
  fate: teach videogen/rotozoom to output a single raw video stream
  http: Add support for reusing the http socket for subsequent requests
  http: Add support for using persistent connections

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-05-30 01:40:54 +02:00
Mans Rullgard
7263cd5544 fate: convert codec-regression.sh to makefile rules
Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-05-29 08:35:41 +01:00
Mans Rullgard
63dcd16d56 fate: fix dependencies on SAMPLES being set
This allows fate to run without errors with or without SAMPLES
being set.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-05-19 14:30:41 +01:00
Diego Biurrun
4cc8e15371 fate: Set FUZZ factor of (e)ac3-encode test to 3.
This is necessary to account for different rounding done in the 3DNow!
Assembly optimizations.
2012-05-18 16:08:40 +02:00
Mans Rullgard
f7c2dca0d9 fate: improve dependencies
This makes only tests actually using avconv depend on it.
The remaining tests already depend on what they need.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-05-09 14:13:34 +01:00
Justin Ruggles
9cc338b1de FATE: pass the decoded output format and audio source file to enc_dec_pcm
This will allow decoding to md5 and doing a diff comparison to a reference
checksum instead of a fuzzy stddev or oneoff comparison.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-04-18 22:26:56 -04:00
Justin Ruggles
a4cf4ef256 FATE: add AC-3 and E-AC-3 encode/decode tests with fuzzy comparison 2012-03-17 11:33:35 -04:00
Diego Biurrun
e5903e2972 fate: add some shorthands to run groups of tests 2012-01-19 00:45:21 +01:00
Diego Biurrun
bf6923577e fate: split off AC-3 codec FATE tests into their own file 2011-12-14 19:09:48 +01:00