Commit Graph
100 Commits
Author SHA1 Message Date
Rostislav Pehlivanov e1120b1c54 mdct15: add assembly optimizations for the 15-point FFT
c:    1802 decicycles in fft15,16774635 runs,   2581 skips
avx:   865 decicycles in fft15,16776378 runs,    838 skips

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-06-23 23:45:37 +01:00
Rostislav Pehlivanov 7e98da9c4f opus_celt: do not use double precision exp2
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-06-22 22:37:53 +01:00
Rostislav Pehlivanov 18f09524f7 configure: use -x instead of -wN ..@ to strip assembly files
Reduces the amount of debugging information of external asm from
uselessly verbose to informative enough.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
Reviewed-by: James Darnley <james.darnley@gmail.com>
2017-06-16 15:25:31 +01:00
Rostislav Pehlivanov b52b398c30 vc2enc: decrease default strictness level
Given how incredibly limited the official specifications are (limiting all use
to only the most common broadcasting formats), permit all supported inputs
by default. This makes the encoder more useful.
2017-06-15 18:30:08 +01:00
Rostislav Pehlivanov 7fc1be9a01 vorbisenc: signal samples to skip
The encoder never actually signalled how many samples to skip.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-06-05 16:51:08 +01:00
Rostislav Pehlivanov 10b7adf79d fate: add test for the Dirac low delay profile
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-06-05 06:10:40 +01:00
Rostislav Pehlivanov 220b24c7c9 lavc: remove libschroedinger encoding and decoding wrappers
The library has stopped being developed and Debian has removed it
from its repositories citing security issues.
The native Dirac decoder supports everything the library has and basic
encoding support is still provided via the native vc2 (Dirac Pro, intra
only version of Dirac) encoder. Hence, there's no reason to still support
linking to the library and potentially leading users into security issues.
2017-05-29 20:15:58 +01:00
Rostislav Pehlivanov a3deeaade3 lavf: remove the libnut library wrapper
libnut is outdated and not developed anymore, all nut developments
happens in this repo, so users are getting mislead
2017-05-29 20:15:58 +01:00
Rostislav Pehlivanov 3fefaeaa0b img2dec: use standard way to probe for svg/svgz files 2017-05-16 12:45:14 +01:00
Rostislav Pehlivanov 5fd4cffe32 lavc: add a librsvg rasterization library wrapper
Enables rendering of SVG images. This is possible since SVG images
still contain and specify the dimensions in pixels to which they've
been drawn to and thus enable browsers to display them without any
external data. Users can still override and generate images with
arbitrary resolutions.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-05-16 11:40:44 +01:00
Rostislav Pehlivanov f68ea92833 img2dec: add support for piped SVG demuxing
Only checks the extension and MIME type, since determining whether
a file is SVG is difficult since they're just XML files.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-05-16 11:27:00 +01:00
Rostislav Pehlivanov a13eac5a99 lavc: add codec ID and description for SVG
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-05-16 11:26:50 +01:00
Rostislav Pehlivanov 8e7e74df93 opus_pvq: port to allow for SIMD functions
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-05-16 11:22:07 +01:00
Rostislav Pehlivanov e6ec482b42 opusenc: initialize PVQ prng seed
Fixes valgrind warnings, didn't affect anything since it was only used
for resynthesis.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-05-16 11:22:07 +01:00
Rostislav Pehlivanov f7542d7e35 opus_pvq: use function pointers for recursion
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-27 05:50:39 +01:00
Rostislav Pehlivanov f16180f448 opus_pvq: merge band encoding and decoding into one function
Most code between the 2 functions was duplicated which made keeping
both in sync difficult.

This also fixes some discovered issues with encoding (incorrect
TF switching buffers) and reduces stack usage (reuse the already
allocated CeltFrame->scratch buffer for the quantized coefficients).

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-27 02:18:32 +01:00
Rostislav Pehlivanov 18a0d9d7ad opus_pvq: remove outdated/incorrect comments and redundant variables
Removes the last style issues with opus_pvq.c

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-26 23:54:21 +01:00
Rostislav Pehlivanov 4d59de3991 opus_pvq: minor cleanups
Removes unneeded variables, renames confusing and innacurate variables
and rewrites and slightly optimizes hadamard interleave/deinterleave
functions.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-26 23:22:25 +01:00
Rostislav Pehlivanov 3f1c527bf5 opus_pvq: add resynth support and band encoding cost function
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-14 12:12:43 +01:00
Rostislav PehlivanovandMichael Niedermayer 03eb0515c1 mpegvideo_enc: disable optimized huffman coding with AMV or slice threads
Doesn't work yet with slice threading and won't work with AMV.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-04-09 21:53:31 +02:00
Rostislav Pehlivanov 45eeb1f785 mjpegenc: enable optimal huffman coding by default
As it gives excellent encoding gains at an insignificant speed increase
and passes fate without problems, it should now be safe to enable by
default.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-09 00:00:39 +01:00
Rostislav Pehlivanov 7f9b492d54 mjpegenc: disable huffman coding with AMV
Isn't supported.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-09 00:00:32 +01:00
Rostislav Pehlivanov 2c9be3882a mjpegenc_common: check for codec ID before using avctx->priv_data
When coding lossless jpeg the priv context will be pointing to LJpegEncContext
rather than MpegEncContext, which the function expects.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-08 23:57:39 +01:00
Rostislav Pehlivanov d0a3143193 opusenc: switch between intra/inter mode for coarse energy
Saves around 5kbps.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-08 00:54:56 +01:00
Rostislav Pehlivanov c39fba703b opusenc: do not signal digital silence
Apparently its only use is to enable comfort noise/error recovery.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-08 00:48:28 +01:00
Rostislav Pehlivanov 42ffc67208 opusenc: minor style changes
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-08 00:40:33 +01:00
Rostislav Pehlivanov 63744d8afd opusenc: remove unused header entries and simplify normalization
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-08 00:27:33 +01:00
Rostislav Pehlivanov a66121d964 opus_rc: add macros for checkpoint rollback
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-08 00:27:33 +01:00
Rostislav Pehlivanov 6d0b62a12b opus_celt: fix some style issues
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-08 00:27:33 +01:00
Rostislav Pehlivanov db788de8ec mdct15: use existing complex multiplication macros
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-08 00:27:33 +01:00
Rostislav Pehlivanov c901ae9440 bitpacked: fix potential overflow
Fixes: CID1404842

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-04-05 20:51:13 +01:00
Rostislav Pehlivanov 487ca38e8b Changelog: reorder last entry
Entries are organized in descending chronological order.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-03-27 18:34:15 +01:00
Rostislav PehlivanovandRostislav Pehlivanov a8fe8d6b4a lavfi: remove af_asynts filter
Long overdue for removal, af_aresample should be used instead.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-03-27 14:06:16 +01:00
Rostislav Pehlivanov 38d7cc22f7 mdct15: fix left shift of a negative value
Should fix Chromium issue 704064.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-03-22 17:21:34 +00:00
Rostislav Pehlivanov 3796fb2692 lavfi: deprecate AVFilterGraph->resample_lavr_opts
Not used by anything at all since we don't auto insert lavr filters.

Reviewed-by: wm4 <nfxjfg@googlemail.com>
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-03-18 07:37:35 +00:00
Rostislav Pehlivanov 911417f0b3 ffmpeg: don't use resample_lavr_opts
That pointer isn't used by absolutely anything.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
2017-03-16 06:58:50 +00:00
Rostislav Pehlivanov 70259737cb opus_pvq: prevent division by 0
res was 0 and divided K which made it infinity which caused K to
overflow.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-24 19:14:55 +00:00
Rostislav Pehlivanov f19442c069 opus_pvq: remove unneeded assert
Since the PVQ search has been well fuzzed and is guaranteed to never
break SUM(abs(y[])) == K, the assert is no longer needed.
Also the assert only prevented coding the wrong vector index but didn't
prevent crashes during searching for it, which made the assert rather
informational than practical.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-24 07:06:59 +00:00
Rostislav Pehlivanov 22b8ada7b5 opus_pvq: improve PVQ search for low Ks
Since the probelm mentioned only happened when the phase was negative
(e.g. the sum had to be decreased), only discarding dimensions with a
zero pulse in that case restored the search's previously low distortion
at low Ks when the phase is never negative.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-24 07:03:12 +00:00
Rostislav Pehlivanov 42959044ac lavfi/buffersrc: fix directly setting channel layout
When setting the channel layout directly using AVBufferSrcParameters
the channel layout was correctly set however the init function still
expected the old string format to set the number of channels (when it
hadn't already been specified).

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-21 16:25:47 +00:00
Rostislav Pehlivanov 67fa02ed79 opus_pvq: fix PVQ search for K < 5 and low Ns
If the PVQ search picked a place to increment/decrement on the y[]
vector which had no pulse then it would cause a desync since it would
change the sum in the wrong direction. Fix this by not considering
places without pulses as viable.

This makes the PVQ search slightly worse at K < 5 which isn't all that
common. Still, this is a workaround to prevent making broken files until
I can think of a better way of fixing it.

Also add an assertion, which can be removed or moved to assert1/2 once
the PVQ search is stable.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-19 19:13:14 +00:00
Rostislav Pehlivanov b71f62a9c8 opusenc: initialize the emphasis coefficients on init
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-18 01:13:13 +00:00
Rostislav Pehlivanov ada281dbe2 Changelog: add entry for the native Opus encoder
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-16 16:28:10 +00:00
Rostislav Pehlivanov 3fc86f0d69 opusenc: fix coarse energy quantization with 2 bits left
Fixes CID1400584

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-15 22:51:37 +00:00
Rostislav Pehlivanov 1b90e2414d opus_pvq: fix uninitialized variable usage
Fixes CID1400586

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-15 21:11:41 +00:00
Rostislav Pehlivanov 965503d354 MAINTAINERS: add myself as mdct/opus maintainer
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-14 06:15:36 +00:00
Rostislav Pehlivanov 3a7f0055b4 doc/encoders: add documentation for the Opus encoder
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-14 06:15:36 +00:00
Rostislav Pehlivanov 5f47c85e5c opus: add a native Opus encoder
This marks the first time anyone has written an Opus encoder without
using any libopus code. The aim of the encoder is to prove how far
the format can go by writing the craziest encoder for it.

Right now the encoder's basic, it only supports CBR encoding, however
internally every single feature the CELT layer has is implemented
(except the pitch pre-filter which needs to work well with the rest of
whatever gets implemented). Psychoacoustic and rate control systems are
under development.

The encoder takes in frames of 120 samples and depending on the value of
opus_delay the plan is to use the extra buffered frames as lookahead.
Right now the encoder will pick the nearest largest legal frame size and
won't use the lookahead, but that'll change once there's a
psychoacoustic system.

Even though its a pretty basic encoder its already outperforming
any other native encoder FFmpeg has by a huge amount.

The PVQ search algorithm is faster and more accurate than libopus's
algorithm so the encoder's performance is close to that of libopus
at zero complexity (libopus has more SIMD).
The algorithm might be ported to libopus or other codecs using PVQ in
the future.

The encoder still has a few minor bugs, like desyncs at ultra low
bitrates (below 9kbps with 20ms frames).

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-14 06:15:36 +00:00
Rostislav Pehlivanov 07b78340dd opus_celt: rename structures to better names and reorganize them
This is meant to be applied on top of my previous patch which
split PVQ into celt_pvq.c and made opus_celt.h

Essentially nothing has been changed other than renaming CeltFrame
to CeltBlock (CeltFrame had absolutely nothing at all to do with
a frame) and CeltContext to CeltFrame.
3 variables have been put in CeltFrame as they make more sense
there rather than being passed around as arguments.
The coefficients have been moved to the CeltBlock structure
(why the hell were they in CeltContext and not in CeltFrame??).

Now the encoder would be able to use the exact context the decoder
uses (plus a couple of extra fields in there).

FATE passes, no slowdowns, etc.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-14 06:15:36 +00:00
Rostislav Pehlivanov e538108c21 opus_celt: move quantization and band decoding to opus_pvq.c
A huge amount can be reused by the encoder, as the only thing
which needs to be done would be to add a 10 line celt_icwrsi,
a wrapper around it (celt_alg_quant) and templating the
ff_celt_decode_band to replace entropy decoding functions
with entropy encoding.

There is no performance loss but in fact a performance gain of
around 6% which is caused by the compiler being able to optimize
the decoding more efficiently.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-14 06:15:36 +00:00
Rostislav Pehlivanov d2119f624d imdct15: rename to mdct15 and add a forward transform
Handles strides (needed for Opus transients), does pre-reindexing and folding
without needing a copy.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-14 06:15:36 +00:00
Rostislav Pehlivanov 373ee2c618 opus_rc: add entropy encoding functions
Mostly used the RFC document, the decoding functions and
the reference encoder's implmenentation as a reference.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-14 06:15:36 +00:00
Rostislav Pehlivanov 53234b9ba5 tests/mjpegenc_huffman: align static tables
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-09 03:08:50 +00:00
Rostislav Pehlivanov a70f0927ea mjpegenc: use s->avctx as a context for av_log rather than NULL
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-09 03:01:58 +00:00
Rostislav Pehlivanov 20614e868b tests/mjpegenc_huffman: replace assert() with av_assert0()
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-09 02:59:22 +00:00
Rostislav Pehlivanov d164ef6589 mjpegenc_common: add missing ff_ prefix to init_uni_ac_vlc
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-09 02:56:13 +00:00
Rostislav Pehlivanov 084f3addda opus_rc: rename total_bits_used to total_bits and #define some constants
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-02-04 12:07:52 +00:00
Rostislav Pehlivanov e05d2dd86a doc/examples/decoder_targeted: move to tools/target_dec_fuzzer.c
Name and purpose are more appropriate there since the code isn't
an ideal example.

Reviewed-by: wm4 <nfxjfg@googlemail.com>
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-01-29 16:14:18 +00:00
Rostislav Pehlivanov e7dec52d4d matroskaenc: remove unofficial compliance on color information
When support for this was added the details weren't yet finalized.
This is no longer the case.
Fixes writing of mkv/webm files with HDR.

Reported-by: Kagami Hiiragi <kagami@genshiken.org>
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
Reviewed-by: James Almer <jamrial@gmail.com>
2017-01-15 17:49:21 +00:00
Rostislav Pehlivanov 2d208aaabe imdct15: replace the FFT with a faster PFA FFT algorithm
This commit replaces the current inefficient non-power-of-two FFT with a
much faster FFT based on the Prime Factor Algorithm.
Although it is already much faster than the old algorithm without SIMD,
the new algorithm makes use of the already very throughouly SIMD'd power
of two FFT, which improves performance even more across all platforms
which we have SIMD support for.

Most of the work was done by Peter Barfuss, who passed the code to me to
implement into the iMDCT and the current codebase. The code for a
5-point and 15-point FFT was derived from the previous implementation,
although it was optimized and simplified, which will make its future
SIMD easier. The 15-point FFT is currently using 6% of the current
overall decoder overhead.

The FFT can now easily be used as a forward transform by simply not
multiplying the 5-point FFT's imaginary component by -1 (which comes
from the fact that changing the complex exponential's angle by -1 also
changes the output by that) and by multiplying the "theta" angle of the
main exptab by -1. Hence the deliberately left multiplication by -1 at
the end.

FATE passes, and performance reports on other platforms/CPUs are
welcome.

Performance comparisons:

iMDCT, PFA:
101127 decicycles in speed,   32765 runs,      3 skips
iMDCT, Old:
211022 decicycles in speed,   32768 runs,      0 skips

Standalone FFT, 300000 transforms of size 960:
    PFA        Old FFT     kiss_fft    libfftw3f
    3.659695s, 15.726912s, 13.300789s, 1.182222s

Being only 3x slower than libfftw3f is a big achievement by itself.

There appears to be something capping the performance in the iMDCT side
of things, possibly during the pre-stage reindexing. However, it is
certainly fast enough for now.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-01-05 22:32:02 +00:00
Rostislav Pehlivanov 4fdacf4cdb imdct15: remove the AArch64 assembly
Prep work for the next commit, which will add a new FFT algorithm
which makes the iMDCT over 3x faster than it is currently (standalone,
the FFT is with some framesizes over 10x faster).

The new FFT algorithm uses the already thouroughly SIMD'd power of two
FFT which already has SIMD for AArch64, so users of that platform will
still see an improvement.

The previous FFT+SIMD was barely 2.5x faster than the C versions on these
platforms.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-01-05 22:32:02 +00:00
Rostislav Pehlivanov 38a1315582 opus: remove redundant ff_celt_window2 declaration
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-12-18 07:11:27 +00:00
Rostislav Pehlivanov 317be31eaf opus: move the entropy decoding functions to opus_rc.c
The intention is to have both encoding and decoding functions
in opus_rc.c.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-11-08 14:18:59 +00:00
Rostislav Pehlivanov 0660a09dd1 opus: move all tables to a separate file
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-11-08 14:18:59 +00:00
Rostislav Pehlivanov 0cf6853804 aacenc: quit when the audio queue reaches 0 rather than keeping track of empty frames
The libopus encoder does the same thing and its better than
keeping track of when the empty flush frames appear.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-11-08 00:50:51 +00:00
Rostislav Pehlivanov d2ae5f77c6 aacenc: add SIMD optimizations for abs_pow34 and quantization
Performance improvements:

quant_bands:
with:     681 decicycles in quant_bands, 8388453 runs,    155 skips
without: 1190 decicycles in quant_bands, 8388386 runs,    222 skips
Around 42% for the function

Twoloop coder:

abs_pow34:
with/without: 7.82s/8.17s
Around 4% for the entire encoder

Both:
with/without: 7.15s/8.17s
Around 12% for the entire encoder

Fast coder:

abs_pow34:
with/without: 3.40s/3.77s
Around 10% for the entire encoder

Both:
with/without: 3.02s/3.77s
Around 20% faster for the entire encoder

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
Tested-by: Michael Niedermayer <michael@niedermayer.cc>
Reviewed-by: James Almer <jamrial@gmail.com>
2016-10-18 21:41:18 +01:00
Rostislav Pehlivanov 230178dfe2 aacenc: use the decoder's lcg PRNG
Using lfg was an overkill in this case where the random numbers
were only used for encoder descisions. Should increase result
uniformity between different FPUs and gives a slight speedup.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-10-12 11:15:49 +01:00
Rostislav Pehlivanov 38c3fc9404 lavc: bump minor (after adding TrueHD and MLP encoders)
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-09-17 15:36:13 +01:00
Rostislav Pehlivanov d4b36be122 Changelog: update with TrueHD and MLP encoders
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-09-17 13:41:39 +01:00
Rostislav Pehlivanov 6612d04933 aacenc: fix various typos and an error message
Too much copy and pasting.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-08-13 17:34:58 +01:00
Rostislav Pehlivanov fb0abb34cb aacenc: unmark the fast coder as experimental
This version has had much testing so there's little point in keeping it
maked as experimental.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-08-13 17:00:03 +01:00
Rostislav Pehlivanov c92cc2d559 aacenc: add a faster version of twoloop as the "fast" coder
Does nothing fancy but still sounds very decent at 128kbps.
Still room to improve by bringing in the low pass and PNS management
from the main big twoloop which should improve its quality but not
sacrifice that much speed.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-08-13 17:00:03 +01:00
Rostislav Pehlivanov f41e37b84f dirac_vlc: prevent shifting a 0 by 64 bits when zeroing residue
Adding a check for bits == 0 would still make Coverity misdetect this,
so just revert to the normal way of setting the residue to 0.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-07-14 01:29:34 +01:00
Rostislav Pehlivanov c4adcff976 dirac_vlc: add a SET_RESIDUE macro and fix recent regression
Can also be used in future cleanups since 99% of the time the leftover
appending will just append to an already empty residue.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-07-14 01:00:59 +01:00
Rostislav Pehlivanov 000eb01a7d diracdec: fix unchecked byte length
Also drops the start variable since it's redundant.
Found by Coverity, fixes CID1363964

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-07-13 23:53:05 +01:00
Rostislav Pehlivanov b2b12b2d4a diracdec: fix maximum quantization index checks
Found by Coverity, fixes CID1363961 and CID1363962

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-07-13 23:40:06 +01:00
Rostislav Pehlivanov 9c0aba434e dirac_vlc: remove redundant macro declaration
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-07-13 23:38:10 +01:00
Rostislav Pehlivanov e24c31b656 dirac_vlc: fix undefined shifts
Shifting by more than 63 bits is undefined behavior, athough any
compiler not returning 0 after shifting by any amount would be insane.

Found by Coverity, fixes CID1363959 and CID1363960

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-07-13 23:35:03 +01:00
Rostislav Pehlivanov a337cb7361 diracdec: fix #coeffs -> byte conversion
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-07-12 10:44:24 +01:00
Rostislav Pehlivanov df1dc52195 diracdsp_init: add missing ARCH_X86_64 check
That SIMD is still x86_64 only for now.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-07-12 00:39:12 +01:00
Rostislav Pehlivanov a04ae469e7 aacsbr: reduce element type mismatch warning severity
All HE-AAC samples with an LFE channel make this warning get spammed on
every frame. Turning off SBR for LFE channels makes sense (since it has
much less coefficients than normal channels do), so this error print is
of no value in this case.
It makes sense to keep the error in other cases, hence why it's still
around, degraded to warning severity since the decoder will still
attempt to decode without SBR.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-06-08 21:01:04 +01:00
Rostislav Pehlivanov a1953d4cec aacpsy: remove dead code
This code wasn't removed when the functionality was moved inside
aacenc.c with commit 8005b6de4f

Fixes CID1361962

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-05-31 01:08:25 +01:00
Rostislav Pehlivanov b6c207f535 vc2enc_dwt: use 32 bit coefficients by default
The problem is that with particularly complex images and especially at
high bit depths and 5-level transforms the coefficients would overflow,
causing huge artifacts to appear. This was discovered thanks to the fate
tests, which will have to be redone as this fixes a multitude of
problems and increases PSNR.

There is a slight performance drop associated with this change, making
the encoder slower by 1.15 times, however this is necessary in order to
avoid undefined behavior and overflows.

It would be worth to template the transforms to keep the performance for
8 bit images as 32 bit coefficients are unnecessary for that case, but
the primary use of the encoder is to encode video at 10 bits.

Reviewed-by: Christophe Gisquet <christophe.gisquet@gmail.com>
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-05-08 19:09:42 +01:00
Rostislav Pehlivanov 770d3c85af vc2enc: do not print the lavc version if the bitexact flag is enabled
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-05-05 00:20:11 +01:00
Rostislav Pehlivanov 9e138c4813 vc2enc: use 32x16 slices by default
Approximately 1.25 times faster than 64x32, visually and
statistically improves quality.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-04-16 23:59:36 +01:00
Rostislav Pehlivanov 77fb7177af vc2enc: don't require interlacing for 1080p50/60 base video formats
Typo

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-04-16 23:59:36 +01:00
Rostislav Pehlivanov 02172d93f6 Revert "aacenc: use av_clip() instead of av_clip() during quantization"
This reverts commit c0918613a0, since it
triggered a new assertion with gcc.
This bug definitely needs a true proper fix.
2016-03-30 02:31:22 +01:00
Rostislav Pehlivanov 7cda7683a5 Revert "doc/filters: remove false claim in sofalizer description"
This reverts commit bf1495d9a9.
2016-03-30 02:30:19 +01:00
Rostislav Pehlivanov c0918613a0 aacenc: use av_clip() instead of av_clip() during quantization
Seems like clang might be miscompiling it and causing a signed integer overflow,
making a FATE test fail.
Doesn't seem to affect performance, it only runs on the ESC codebook.

Reviewed-by: Claudio Freire <klaussfreire@gmail.com>
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-30 01:04:43 +01:00
Rostislav Pehlivanov 72e1360007 vc2enc: optimize and simplify quantization
Everything except ORing the sign is now done in the LUT.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-24 13:04:59 +00:00
Rostislav Pehlivanov a14d4c076d vc2enc: simplify calc_slice_sizes()
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-23 18:04:05 +00:00
Rostislav Pehlivanov a010e36f23 vc2enc: correctly zero out the slice size cache
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-23 17:52:53 +00:00
Rostislav Pehlivanov 14b41e061d vc2enc: macro out slice size rounding
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-23 17:52:53 +00:00
Rostislav Pehlivanov 2aebdfb451 vc2enc: add non-experimental support for all video formats from spec
Until now, for formats which were in the spec but not in the encoder's
list of supported formats required the -strict -1 flag. This enables
support for all video formats which are specified, all the way from
QSIF525 to 8K.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-22 14:07:56 +00:00
Rostislav Pehlivanov d4773c94a6 vc2enc: simplify count_hq_slice() and caching
The count_hq_slice() function is always used with a SliceArgs struct

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-21 11:04:49 +00:00
Rostislav Pehlivanov 500dc20dee vc2enc: fix segfault
Fixes trac bug #5353

Uninitialized memory for the initial quantization index

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-21 11:01:01 +00:00
Rostislav Pehlivanov d6e76dd132 vc2enc_dwt: remove outdated comment
Support for Haar was added a month or so ago.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-18 14:42:33 +00:00
Rostislav Pehlivanov f4b30beac0 vc2enc: increase the starting value of the size scaler
In some cases this caused the slice size rounding to generate invalid
slice sizes and overwrite some slices.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-18 11:55:48 +00:00
Rostislav Pehlivanov c45b1aa824 vc2enc: minor cosmetic changes
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-04 22:41:20 +00:00
Rostislav Pehlivanov f21cf2b383 vc2enc: remove useless alignment on slice encoding
This was a leftover from before the slices were encoded in parallel.
Since the put_bits context is initialized per slice aligning it
aferwards is pointless.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2016-03-04 22:41:15 +00:00