summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
...
* avcodec/ituh263enc: Make static initializations thread-safeAndreas Rheinhardt2021-04-27
| | | | | | | | | | | | This already makes several encoders (namely FLV, H.263, H.263+ and RealVideo 1.0 and 2.0 and SVQ1) that use this init-threadsafe. It also makes the Snow encoder init-threadsafe; it was already marked as such since commit d49210788b0836d56dd872d517fe73f83b080101, because it was thought to be harmless if one and the same object was initialized by multiple threads at the same time. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avcodec/encode: Zero padding in ff_get_encode_buffer()Andreas Rheinhardt2021-04-27
| | | | | | | | | | | | | The documentation of the get_encode_buffer() callback does not require to zero the padding; therefore we do it in ff_get_encode_buffer(). This also constitutes an implicit check for whether the buffer is actually allocated with padding. The memset in avcodec_default_get_encode_buffer() is now redundant and has been removed. Reviewed-by: James Almer <jamrial@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avcodec/svq3: Free array of frames in a loopAndreas Rheinhardt2021-04-26
| | | | | | Avoids code duplication Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avcodec/svq3: Remove unused function parameterAndreas Rheinhardt2021-04-26
| | | | Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avcodec/ivi: Fix indentationAndreas Rheinhardt2021-04-26
| | | | | | | Also improve readability by keeping a pointer to the IVIBandDesc that is currently freed. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avcodec/vc2enc: Actually zero paddingAndreas Rheinhardt2021-04-26
| | | | | | | | This encoder sets the min_size in ff_alloc_packet2(), so it can not rely on av_packet_make_refcounted() to zero the padding. Reviewed-by: Lynne <dev@lynne.ee> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avformat/westwood_audenc: Remove unused variableAndreas Rheinhardt2021-04-26
| | | | | Reviewed-by: Zane van Iperen <zane@zanevaniperen.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avformat/westwood_audenc: Check for, not assert on invalid dataAndreas Rheinhardt2021-04-26
| | | | | Reviewed-by: Zane van Iperen <zane@zanevaniperen.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* doc: update for adpcm_ima_ws encoder and wsaud muxerZane van Iperen2021-04-27
| | | | Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
* doc/muxers: add entry for ALP muxerGyan Doshi2021-04-26
|
* avcodec/ttmlenc: add support for region positioning and sizingJan Ekström2021-04-26
| | | | | | | | The ASS margins are utilized to generate percentual values, as the usage of cell-based sizing and offsetting seems to be not too well supported by renderers. Signed-off-by: Jan Ekström <jan.ekstrom@24i.com>
* avcodec/ttmlenc: add initial support for regions and stylesJan Ekström2021-04-26
| | | | | | | | | Attempts to utilize the TTML cell resolution as a mapping to the reference resolution, and maps font size to cell size. Additionally sets the display and text alignment according to the ASS alignment number. Signed-off-by: Jan Ekström <jan.ekstrom@24i.com>
* avformat/ttmlenc: enable writing out additional header valuesJan Ekström2021-04-26
| | | | | | | | | | This way the encoder may pass on the following values to the muxer: 1) Additional root "tt" element attributes, such as the subtitle canvas reference size. 2) Anything before the body element of the document, such as regions in the head element, which can configure styles. Signed-off-by: Jan Ekström <jan.ekstrom@24i.com>
* avcodec/ttmlenc: split header writing into its own functionJan Ekström2021-04-26
| | | | Signed-off-by: Jan Ekström <jan.ekstrom@24i.com>
* doc/muxers: add entry for ADTS muxerGyan Doshi2021-04-26
|
* fate: add adpcm_ima_ws testZane van Iperen2021-04-26
| | | | Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
* avformat/westwoodaudenc: Adds muxer for Westwood AUD format.Aidan Richmond2021-04-26
| | | | | | | | Format is still used by modders of these old games. Reviewed-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Signed-off-by: Aidan Richmond <aidan.is@hotmail.co.uk> Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
* avcodec/adpcmenc: Adds encoder for Westwood ADPCM.Aidan Richmond2021-04-26
| | | | | Signed-off-by: Aidan Richmond <aidan.is@hotmail.co.uk> Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
* avcodec/adpcm: Fixes output from Westwood ADPCM.Aidan Richmond2021-04-26
| | | | | | | | Fixes bug #9198 Reviewed-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Signed-off-by: Aidan Richmond <aidan.is@hotmail.co.uk> Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
* x86/tx_float: remove ff_ prefix from external constant tablesJames Almer2021-04-25
| | | | | | | Fixes compilation with some assemblers. Reviewed-by: Lynne Signed-off-by: James Almer <jamrial@gmail.com>
* libavformat/adtsenc: Increase ADTS_MAX_FRAME_BYTES from 8k to 16kChris Ribble2021-04-25
| | | | | | | ADTS frames may contain up to 768 bytes per channel. With 16 channels, this is 12k, which cannot fit into the maximum 8k buffer. Signed-off-by: Chris Ribble <chris.ribble@resi.io>
* avcodec/mjpegdec: postpone calling ff_get_buffer() until the SOS markerJames Almer2021-04-25
| | | | | | | | | | | | | | | With JPEG-LS PAL8 samples, the JPEG-LS extension parameters signaled with the LSE marker show up after SOF but before SOS. For those, the pixel format chosen by get_format() in SOF is GRAY8, and then replaced by PAL8 in LSE. This has not been an issue given both pixel formats allocate the second data plane for the palette, but after the upcoming soname bump, GRAY8 will no longer do that. This will result in segfauls when ff_jpegls_decode_lse() attempts to write the palette on a buffer originally allocated as a GRAY8 one. Work around this by calling ff_get_buffer() after the actual pixel format is known. Signed-off-by: James Almer <jamrial@gmail.com>
* avfilter/af_adelay: make per channel delay argument an int64_tJames Almer2021-04-25
| | | | | | Should fix ticket #9196 Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/adpcm: init from extradata before setting sample formatsZane van Iperen2021-04-25
| | | | | | | | | Fixes a crash when decoding VQA files. Regression since c012f9b265e172de9c240c9dfab8665936fa3e83. Reported-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
* lavfi/dnn_backend_openvino.c: Spelling Correction in OpenVino Backendshubhanshu022021-04-25
| | | | | | | Correct Spelling of the word `descibe` to `describe` in init_model_ov Signed-off-by: shubhanshu02 <shubhanshu.e01@gmail.com>
* x86/tx_float: fix forgotten 2-argument mulpsLynne2021-04-24
| | | | Yasm *really* cannot deal with any omitted arguments at all.
* x86/tx_float: use all arguments on vperm2f and vpermilps and reindent commentsLynne2021-04-24
| | | | Apparently even old nasm isn't required to accept incomplete instructions.
* x86/tx_float: Fixes compilation with old yasmJames Almer2021-04-24
| | | | | | | Use three operand format on some instructions, and lea to load effective addresses of tables. Signed-off-by: James Almer <jamrial@gmail.com>
* lavu/x86/tx_float: fix FMA3 implying AVX2 is availableLynne2021-04-24
| | | | It's the other way around - AVX2 implies FMA3 is available.
* fate: add tests for JPEG-LS PAL8James Almer2021-04-24
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* lavu/x86: add FFT assemblyLynne2021-04-24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds a pure x86 assembly SIMD version of the FFT in libavutil/tx. The design of this pure assembly FFT is pretty unconventional. On the lowest level, instead of splitting the complex numbers into real and imaginary parts, we keep complex numbers together but split them in terms of parity. This saves a number of shuffles in each transform, but more importantly, it splits each transform into two independent paths, which we process using separate registers in parallel. This allows us to keep all units saturated and lets us use all available registers to avoid dependencies. Moreover, it allows us to double the granularity of our per-load permutation, skipping many expensive lookups and allowing us to use just 4 loads per register, rather than 8, or in case FMA3 (and by extension, AVX2), use the vgatherdpd instruction, which is at least as fast as 4 separate loads on old hardware, and quite a bit faster on modern CPUs). Higher up, we go for a bottom-up construction of large transforms, foregoing the traditional per-transform call-return recursion chains. Instead, we always start at the bottom-most basis transform (in this case, a 32-point transform), and continue constructing larger and larger transforms until we return to the top-most transform. This way, we only touch the stack 3 times per a complete target transform: once for the 1/2 length transform and two times for the 1/4 length transform. The combination algorithm we use is a standard Split-Radix algorithm, as used in our C code. Although a version with less operations exists (Steven G. Johnson and Matteo Frigo's "A modified split-radix FFT with fewer arithmetic operations", IEEE Trans. Signal Process. 55 (1), 111–119 (2007), which is the one FFTW uses), it only has 2% less operations and requires at least 4x the binary code (due to it needing 4 different paths to do a single transform). That version also has other issues which prevent it from being implemented with SIMD code as efficiently, which makes it lose the marginal gains it offered, and cannot be performed bottom-up, requiring many recursive call-return chains, whose overhead adds up. We go through a lot of effort to minimize load/stores by keeping as much in registers in between construcring transforms. This saves us around 32 cycles, on paper, but in reality a lot more due to load/store aliasing (a load from a memory location cannot be issued while there's a store pending, and there are only so many (2 for Zen 3) load/store units in a CPU). Also, we interleave coefficients during the last stage to save on a store+load per register. Each of the smallest, basis transforms (4, 8 and 16-point in our case) has been extremely optimized. Our 8-point transform is barely 20 instructions in total, beating our old implementation 8-point transform by 1 instruction. Our 2x8-point transform is 23 instructions, beating our old implementation by 6 instruction and needing 50% less cycles. Our 16-point transform's combination code takes slightly more instructions than our old implementation, but makes up for it by requiring a lot less arithmetic operations. Overall, the transform was optimized for the timings of Zen 3, which at the time of writing has the most IPC from all documented CPUs. Shuffles were preferred over arithmetic operations due to their 1/0.5 latency/throughput. On average, this code is 30% faster than our old libavcodec implementation. It's able to trade blows with the previously-untouchable FFTW on small transforms, and due to its tiny size and better prediction, outdoes FFTW on larger transforms by 11% on the largest currently supported size.
* doc/transforms: add documentation for the FFT transformsLynne2021-04-24
| | | | | Makes the code far easier to follow, and makes creating new SIMD for the transforms far, far easier.
* checkasm: add av_tx FFT SIMD testing codeLynne2021-04-24
| | | | | | This sadly required making changes to the code itself, due to the same context needing to be reused for both versions. The lookup table had to be duplicated for both versions.
* lavu/tx: add parity revtab generator versionLynne2021-04-24
| | | | This will be used for SIMD support.
* lavu: bump minor and add APIchanges entry for the lavu/tx changesLynne2021-04-24
|
* lavu/tx: add full-sized iMDCT transform flagLynne2021-04-24
|
* lavu/tx: add unaligned flag to the APILynne2021-04-24
|
* lavu/tx: add a 9-point FFT and (i)MDCTLynne2021-04-24
|
* lavu/tx: add a 7-point FFT and (i)MDCTLynne2021-04-24
|
* lavu/tx: refactor power-of-two FFTLynne2021-04-24
| | | | | | | | | This commit refactors the power-of-two FFT, making it faster and halving the size of all tables, making the code much smaller on all systems. This removes the big/small pass split, because on modern systems the "big" pass is always faster, and even on older machines there is no measurable speed difference.
* lavu/tx: minor code style improvements and additional commentsLynne2021-04-24
|
* avcodec/exr: Return correct error code on allocation failureAndreas Rheinhardt2021-04-24
| | | | | Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avcodec/avcodec: Actually honour the documentation of subtitle_headerAndreas Rheinhardt2021-04-24
| | | | | | | | | | It is only supposed to be freed by libavcodec for decoders, yet avcodec_open2() always frees it on failure. Furthermore, avcodec_close() doesn't free it for decoders. Both of this has been changed. Reviewed-by: James Almer <jamrial@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* tests/fate: add a test for APNG_DISPOSE_OP_BACKGROUNDAnton Khirnov2021-04-24
|
* avformat/asfdec_o: Use ff_get_extradata()Michael Niedermayer2021-04-24
| | | | | | | | Fixes: OOM Fixes: 27240/clusterfuzz-testcase-minimized-ffmpeg_dem_ASF_O_fuzzer-5937469859823616 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/av1_metadata: don't store the inserted TD OBU in stackJames Almer2021-04-23
| | | | | | | | | Fixes: stack-use-after-return Fixes: clusterfuzz-testcase-minimized-ffmpeg_BSF_AV1_METADATA_fuzzer-5931515701755904 Fixes: clusterfuzz-testcase-minimized-ffmpeg_BSF_AV1_METADATA_fuzzer-6105676541722624 Reviewed-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/id3v2: Check end for overflow in id3v2_parse()Michael Niedermayer2021-04-23
| | | | | | | | Fixes: signed integer overflow: 9223372036840103978 + 67637280 cannot be represented in type 'long' Fixes: 33341/clusterfuzz-testcase-minimized-ffmpeg_dem_DSF_fuzzer-6408154041679872 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avformat/mxfdec: Fix file position additionMichael Niedermayer2021-04-22
| | | | | | | | Fixes: signed integer overflow: 9223372036854775805 + 4 cannot be represented in type 'long' Fixes: 29927/clusterfuzz-testcase-minimized-ffmpeg_dem_MXF_fuzzer-5579985228267520 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avformat/wtvdec: Improve size overflow checks in parse_chunks()Michael Niedermayer2021-04-22
| | | | | | | | | Fixes: signed integer overflow: 32 + 2147483647 cannot be represented in type 'int Fixes: 32967/clusterfuzz-testcase-minimized-ffmpeg_dem_WTV_fuzzer-5132856218222592 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Reviewed-by: Peter Ross <pross@xvid.org> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/faxcompr: Check remaining bits on error in decode_group3_1d_line()Michael Niedermayer2021-04-22
| | | | | | | | Fixes: Timeout Fixes: 32886/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_TIFF_fuzzer-4779761466474496 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>