Commit graph

46540 commits

Author SHA1 Message Date
J. Dekker
2e832be322 lavc/aarch64: add hevc sao edge 8x8
bench on AWS Graviton:

hevc_sao_edge_8x8_8_c: 516.0
hevc_sao_edge_8x8_8_neon: 81.0

Signed-off-by: J. Dekker <jdek@itanimul.li>
2022-05-25 08:04:46 +02:00
J. Dekker
92f67e4017 lavc/aarch64: add hevc sao edge 16x16
bench on AWS Graviton:

hevc_sao_edge_16x16_8_c: 1857.0
hevc_sao_edge_16x16_8_neon: 211.0
hevc_sao_edge_32x32_8_c: 7802.2
hevc_sao_edge_32x32_8_neon: 808.2
hevc_sao_edge_48x48_8_c: 16764.2
hevc_sao_edge_48x48_8_neon: 1796.5
hevc_sao_edge_64x64_8_c: 32647.5
hevc_sao_edge_64x64_8_neon: 3118.5

Signed-off-by: J. Dekker <jdek@itanimul.li>
2022-05-25 08:04:39 +02:00
J. Dekker
d957ee34a6 lavc/aarch64: fix hevc sao band filter
The SAO band filter can be called with non-multiples of 8, we round up
to the nearest multiple of 8 to account for this.

Signed-off-by: J. Dekker <jdek@itanimul.li>
2022-05-25 08:04:35 +02:00
Andreas Rheinhardt
8d788c567a avcodec/mjpegenc: Remove ineffective pred option
Never did anything, so it is removed immediately.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-24 21:38:16 +02:00
Andreas Rheinhardt
d587b1c323 avcodec/mpegvideoenc: Remove ineffective options
This commit removes the ineffective FF_MPV_DEPRECATED_ options,
namely mpeg_quant (this is only an option for MPEG-4), a53cc
(this is only an option for MPEG-2), force_duplicated_matrix
(applies only to MJPEG) and b_strategy, b_sensitivity and brd_scale
(these options only make sense for encoders supporting B-frames,
which currently means the MPEG-1/2 and MPEG-4 encoders).
Given that these options never changed the outcome of encoding,
they are removed at once.

Notice that the options for the encoders for which it made sense
are not affected by this.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-24 21:37:17 +02:00
Andreas Rheinhardt
de640d2b53 avcodec/mjpegenc: Remove pointless motion-estimation options
(M)JPEG does not use motion estimation/motion vectors at all.
These options therefore don't affect the output at all.
So remove them.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-24 21:36:45 +02:00
Andreas Rheinhardt
3fba5d4f3c avcodec/mpegvideoenc: Remove ineffective [pb]bias options
The user-provided value is overwritten in ff_mpv_encode_init()
without having ever been read.
(This has been broken when making these options mpegvideo-specific
in commits 910247f172 and
cf7d2f2d21. No one has ever complained,
so this commit removes these fields.)

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-24 21:31:26 +02:00
Andreas Rheinhardt
49838705a4 avcodec/pthread_frame: Don't update the first thread ctx before freeing
Currently, ff_frame_thread_free() uses the last worker thread
to updates the first worker thread via update_context_from_thread()
immediately before freeing all these worker threads. This is
a remnant of the time in which the first worker was special.
(E.g. the first worker shared its AVCodecInternal with the public
AVCodecContext.)

But these times are over (none of the uses of is_copy matter
for ff_frame_thread_free()); nowadays the only thing that
update_context_from_thread() does is referencing a few
buffers/frames and replacing them with other references instead.
These new references will then be freed immediately thereafter
when the first worker thread is freed. Ensuring that the code is
free of double-frees is achieved by using reference-counted structures
(or in case of AVChannelLayouts: by giving each worker its own copy).

Some archaeology:
a) Updating the first worker thread from the last one used
has been done since frame-threading was added in
37b00b47cb.
b) The precursor to ff_mpv_common_end() checked for is_copy
before freeing pictures (i.e. it only freed them for the first
worker thread).
c) Commits c2dfb1e37c and
e33811bd26 modified the
update_thread_context function of the H.264 decoder
so that it could fail before calling ff_mpeg_update_thread_context().
d) This led to a double free/an assert violation with a H.264
sample for which ff_mpeg_update_thread_context() is not reached
for the final update_context_from_thread(). Commit
a6e4796fbf added code to fix this
sample.
e) This issue was fixed (even with the last mentioned commit reverted)
when the H.264 decoder was deMpegEncContextized in commit
b7fe35c9e5 (merging commit
2c54155407).
f) mpegvideo.c stopped using is_copy when it was switched to refcounted
frames in 759001c534.
g) 1f4cf92cfb removed the init_thread_copy
callbacks; now no FFCodec.close callback checks for is_copy at all
any more.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-24 21:31:08 +02:00
Zhao Zhili
5a7a33f6f2 avcodec/libdavs2: export has_b_frames info
More precisely, we should use picture_reorder_delay, but it's
unavailable yet.

Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
2022-05-24 18:03:12 +08:00
Zhao Zhili
8379e454e0 avcodec/libuavs3d: use output_reorder_delay as has_b_frames
has_b_frames is more than a bool, it's the size of the frame
reordering buffer in the decoder.

Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
2022-05-24 18:03:12 +08:00
Zhao Zhili
99d1279216 avcodec/avs3_parser: set has_b_frames properly
has_b_frames should be output_reorder_delay field in AVS3 sequence
header and larger than 1. The parser implementation doesn't parse
that field. Decoder can set has_b_frames properly, so use FFMAX
here to avoid resetting has_b_frames from output_reorder_delay to 1.

Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
2022-05-24 18:03:12 +08:00
softworkz
6b32ad59c8 avcodec/dvdsubdec: use avpriv_fopen_utf8() instead of plain fopen()
Unify file access operations by replacing usages of direct calls
to posix fopen() to prepare for long filename support on Windows.

Signed-off-by: softworkz <softworkz@hotmail.com>
Signed-off-by: Martin Storsjö <martin@martin.st>
2022-05-24 11:50:32 +03:00
Zhao Zhili
a12ebbbcaa avcodec/libuavs3d: fix access uninitialized variable when draining
buf_ptr is uninitialized and accessed when function return.
2022-05-23 10:19:23 +08:00
Andreas Rheinhardt
2c8f97831a avcodec/mpegvideo: Move float.h inclusion to mpegvideoenc.h
It is only needed for the options in mpegvideoenc.h.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-19 19:16:23 +02:00
Andreas Rheinhardt
9cc38cc636 avcodec/mss2: Remove write-only QpelDSPContext
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-19 19:16:23 +02:00
Andreas Rheinhardt
6e5acb6c88 avcodec/error_resilience: Only keep what is needed from MECmpContext
ERContext currently has an embedded MECmpContext, despite only
needing exactly one function from it. This is wasteful because
MECmpContext is pretty large (135 pointers, 1080 B for eight byte
pointers). So keep only what is needed.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-19 19:16:23 +02:00
Limin Wang
94968dbc11 avcodec/dvdsubenc: return error if canvas_size is too small for subtitle render
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2022-05-19 21:17:31 +08:00
Andreas Rheinhardt
d31a3af6a9 avcodec/wrapped_avframe: Don't attach FrameDecodeData unnecessarily
It is unneeded, as this decoder does not call ff_get_buffer().

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-15 19:08:43 +02:00
Andreas Rheinhardt
104abea646 avcodec/ac3: Move non-(de|en)coder-only parts out of ac3.h
Move AC3HeaderInfo into ac3_parser_internal.h and the rest
into a new header ac3defs.h.

This also breaks an include cycle of ac3.h and ac3tab.h
(the latter now only needs ac3defs.h).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-15 18:13:56 +02:00
Andreas Rheinhardt
cbd75ecc18 avcodec/ac3tab: Move some tables only used by ac3.c to it
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-15 18:13:55 +02:00
Andreas Rheinhardt
996ec1cbe8 avcodec/ac3: Remove declaration of inexistent function
Removed in 7b11eead1b.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-15 18:13:55 +02:00
Vignesh Venkatasubramanian
ab05e9a7f2 avcodec/libaomenc: Add parameter for avif single image encoding
Add a parameter to libaom-av1 encoder to enforce some of the single
image constraints in the AV1 encoder. Setting this flag will limit
the encoder to producing exactly one frame and the sequence header
that is produced by the encoder will be conformant to the AVIF
specification [1].

Part of Fixing Trac ticket #7621

[1] https://aomediacodec.github.io/av1-avif

Signed-off-by:: Vignesh Venkatasubramanian <vigneshv@google.com>
2022-05-13 12:45:00 +05:30
Semen Belozerov
e71d5156c8 avcodec/vp9: ipred_vl_16x16_16 avx2 implementation
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
2022-05-12 14:43:08 -04:00
Tomas Härdin
1cd8596ef4 libavcodec/cinepakenc: Mark no-skip frames as keyframes
Reset curframe whenever we generate a keyframe.
Use -g instead of -keyint_min.
2022-05-12 11:19:12 +02:00
Andreas Rheinhardt
c19797bf59 avcodec/internal: Hide stuff only used by the core decode API
The general decoding API uses bitstream filters and an AVFifo
and therefore AVCodecInternal contains pointers to an AVBSFContext
and to an AVFifo and lavc/internal.h includes lavc/bsf.h and
lavu/fifo.h.
Yet actually, only two files are supposed to use these, namely
avcodec.c and (mainly) decode.c. For all the other files,
it should be an opaque type that they should not touch and that
they need not know anything about. This can be achieved by not
including these headers and using the structs instead of the
corresponding typedefs.
This also forces translation units that really use the BSF
and the FIFO APIs themselves to include the relevant headers
directly instead of relying on indirect inclusions (up until now,
even avcodec.c and decode.c relied on fifo.h to be included
by internal.h).
Of course, it also avoids unnecessary rebuilds when bsf.h or fifo.h
change.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-12 08:52:59 +02:00
Andreas Rheinhardt
e92e74b897 avcodec/texturedspenc: Fix invalid shift
Left shifts of signed types are UB unless the results fit
into the type. (Furthermore the value to be shifted need to be
nonnegative.)

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-12 08:33:11 +02:00
Anton Khirnov
8016219472 lavc: drop a confusing message about "thread emulation"
There is no such thing.
2022-05-11 10:37:26 +02:00
Anton Khirnov
28b8b41e5a lavc/pthread_frame: do not copy AVCodecInternal contents
None of its fields have meaningful values at that point that would need
to be copied to frame thread workers.
2022-05-11 10:37:26 +02:00
Anton Khirnov
2cb86cd00c lavc/avcodec: only allocate decoding packets for decoders 2022-05-11 10:37:26 +02:00
Anton Khirnov
c954cf1e1b lavc/encode: add an encoder-specific get_buffer() variant
Several encoders (roqvideo, svq1, snow, and the mpegvideo family)
currently call ff_get_buffer(). However this function is written
assuming it is called by a decoder. Though nothing has been obviously
broken by this until now, that may change in the future.

To avoid potential future issues, introduce a simple encode-specific
wrapper around avcodec_default_get_buffer2() and enforce its use in
encoders.
2022-05-11 10:37:17 +02:00
Anton Khirnov
a4ce370659 lavc/snow: only allocate mconly_picture for decoding
It is not used in the encoder.
2022-05-11 10:33:55 +02:00
John Stebbins
326f9fd01b lavc/pgs_frame_merge_bsf: add bsf to merge PGS segments
Required to remux m2ts to mkv
Minor changes and porting to FFBitStreamFilter done by the committer.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-10 10:03:30 +02:00
Andreas Rheinhardt
f2b79c5b85 lib*/version: Move library version functions into files of their own
This avoids having to rebuild big files every time FFMPEG_VERSION
changes (which it does with every commit).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-10 06:49:32 +02:00
Jan Ekström
fe100bc556 avcodec/libsvtav1: signal CPB properties through side data
This way values such as maxrate/bufsize can be utilized further
down the chain.

First, syncs up the max_rate and buffer_size from SVT-AV1 back to
avctx, and then in case at least one of the utilized values is
nonzero, adds the CPB properties side data.
2022-05-09 23:08:42 +03:00
Jan Ekström
70887d44ff avcodec/libsvtav1: update avctx bit rate according to RC mode
This way we can filter out the default value for this member, which
is nonzero. Bases on the current affairs that bit rate based rate
control is nonzero in SVT-AV1.
2022-05-09 23:08:42 +03:00
Jun Zhao
68a7df5e9d lavc/cavsdec: Add profile check
Add profile check for cavs decoder, now cavs decoder only support
JiZhun(0x20) profile

Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
2022-05-08 10:38:54 +08:00
Jun Zhao
072a0daf5d lavc/libuavs3d: fix incorrect comments
fix incorrect comments

Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
2022-05-08 10:38:45 +08:00
Michael Niedermayer
f3b7ba21ba avcodec/libxavs2: Improve r redundancy in occured
Reviewed-by: "mypopy@gmail.com" <mypopy@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2022-05-06 15:57:45 +02:00
Andreas Rheinhardt
d496bbe105 avcodec/v210enc: Move ff_v210enc_init into a header
This removes a dependency of checkasm on lavc/v210_enc.o
and also allows to inline ff_v210enc_init() irrespectively of
interposing.
This dependency pulled basically all of libavcodec into checkasm,
in particular all codecs.
This also makes checkasm work when using shared Windows builds:
On Windows, it needs to be known to the compiler whether a data
symbol is external to the library/executable or not; hence the
need for av_export_avutil. checkasm needs access to the internals
of the libraries it tests and is therefore linked statically to all
the libraries. This means that the users of avpriv_cga_font and
avpriv_vga16_font in libavcodec (namely ansi.o, bintext.o, tmv.o)
end up in the same executable as the symbols, although they have
been compiled as if these symbols were external, leading to linker
errors. With this commit said files are discarded by the linker,
bypassing this problem.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-06 05:33:38 +02:00
Andreas Rheinhardt
0c2489fe29 avcodec/v210_dec: Move ff_v210dec_init into a header
This removes a dependency of checkasm on lavc/v210_dec.o
and also allows to inline ff_v210dec_init() irrespectively of
interposing.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-05-06 05:19:50 +02:00
Paul B Mahol
a84b95dc08 avcodec/pcm-blurayenc: fix flawed logic in previous change 2022-05-02 19:37:58 +02:00
Simone Karin Lehmann
b67572c7c7 lavc/videotoolboxenc: Speed/Quality prioriry setting
Add options to h264, hevc and prores encoders to prioritize speed.
Speeds up encoding by 50% - 70%

Signed-off-by: Simone Karin Lehmann <simone@lisanet.de>
Signed-off-by: Rick Kern <kernrj@gmail.com>
2022-05-02 08:10:22 -07:00
Felix LeClair
987d2c1083 avcodec/x86/hevc_mc: Fix AVX-512-VNNI_hevc_qpel_filters_avx512icl
Issue: On extremely new hardware using either IceLake or super sets of
Intel IceLakes avx512 instructions, commit
d4cd8830bd causes build issues.
Specifically a NASM macro expansion of qpel_filter_v is never properly
defined/initialized.

The issue is the definition was erroneously placed inside a conditional
which will not trigger unless the original definition failed (has to do
with if PIC is defined, becomes a bit of a catch 22)
Specifically the error is

X86ASM    libavcodec/x86/hevc_mc.o
libavcodec/x86/hevc_mc.asm:1854: error: symbol `..@88472.table' not defined
libavcodec/x86/hevc_mc.asm:1806: ... from macro
`HEVC_PUT_HEVC_QPEL_HV_AVX512ICL' defined here
libavcodec/x86/hevc_mc.asm:1730: ... from macro `QPEL_FILTER_V' defined here
...
repeats a few times...
...
make: *** [ffbuild/common.mak💯 libavcodec/x86/hevc_mc.o] Error 1
```
Specific error was discussed by kurosu and myself (fclc) on the
ffmpeg-devel irc.

This commit fixes the above by swapping lines 1796 and 1795, moving the
define out of the conditional

Side note: It seems fate didn't pick up on this, may merit looking into
(as mentioned by nevcairiel).

Reviewed-by: Wu Jianhua <toqsxw@outlook.com>
Signed-off-by: Felix LeClair (FCLC) <felix.leclair123@hotmail.com>
Signed-off-by: Marton Balint <cus@passwd.hu>
2022-05-01 12:42:07 +02:00
Martijn van Beurden
296d3bbe16 lavc/flacdec: Increase residual limit from INT_MAX to UINT_MAX
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2022-04-30 21:33:10 +02:00
Andreas Rheinhardt
2eb7e38cb8 avcodec/Makefile: Add libjxl.h to SKIPHEADERS if necessary
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-04-29 01:30:14 +02:00
Andreas Rheinhardt
56a062f53c avcodec/xfacedec: Add AV_CODEC_CAP_DR1
This decoder uses ff_get_buffer() and does nothing weird
(it does not even rely on any alignment of the frame's data/linesize).

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-04-28 01:28:18 +02:00
Andreas Rheinhardt
a655b0a506 avcodec/pgxdec: Use unsigned types for unsigned values
Both AV_PIX_FMT_GRAY8 and AV_PIX_FMT_GRAY16 use unsigned values,
not signed ones. The fact that the input might be signed
in some cases in the original format doesn't change this.

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-04-28 01:28:14 +02:00
Andreas Rheinhardt
84a80ac15d avcodec/pgxdec: Hoist branch out of loop
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-04-28 01:28:10 +02:00
Andreas Rheinhardt
e4a26a64a8 avcodec/pgxdec: Fix issue with negative linesizes
The PGX decoder accesses the lines via code like
(PIXEL*)frame->data[0] + i*frame->linesize[0]/sizeof(PIXEL)
where PIXEL is a macro parameter. This code has issues with negative
linesizes, because the type of sizeof(PIXEL) is size_t, so
that on common systems i*linesize/sizeof(PIXEL) will
always be an unsigned type that is very large in case linesize is
negative. This happens to work*, but it is undefined behaviour
and e.g. leads to "src/libavcodec/pgxdec.c:114:1: runtime error:
addition of unsigned offset to 0x7efe9c2b7040 overflowed to 0x7efe9c2b6040"
errors from UBSAN.
Fix this by using (PIXEL*)(frame->data[0] + i*frame->linesize[0]).
This is allowed because linesize has to be suitably aligned.

*: Converting a negative int to size_t works by adding SIZE_MAX + 1
to the number, so that the result is off by (SIZE_MAX + 1) /
sizeof(PIXEL). Converting the pointer arithmetic (performed on PIXELs)
back to ordinary pointers is tantamount to multiplying by sizeof(PIXEL),
so that the result is off by SIZE_MAX + 1; but SIZE_MAX + 1 == 0
for the underlying pointers.

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-04-28 01:28:03 +02:00
Andreas Rheinhardt
67f7960505 avcodec/pgxdec: Remove pointless checks
These checks were (most likely) added to check for overreads
as the bytestream2_get_* functions return 0 in this case.
Yet this is not necessary anymore as we now have an explicit check
for the size. Should the input contain a real \0, pgx_get_number()
will error out lateron.

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-04-28 01:27:57 +02:00