Anton Khirnov
f2aeba56c4
lavc/ffv1dec: move slice_reset_contexts to per-slice context
2024-08-01 10:09:26 +02:00
Anton Khirnov
84dda32202
lavc/ffv1enc: stop using per-slice FFV1Context
...
All remaining accesses to them are for fields that have the same value
in the main encoder context.
2024-08-01 10:09:26 +02:00
Anton Khirnov
96e8af6c4d
lavc/ffv1: move ac_byte_count to per-slice context
2024-08-01 10:09:26 +02:00
Anton Khirnov
e7d0f44138
lavc/ffv1enc: store per-slice rc_stat(2?) in FFV1SliceContext
...
Instead of the per-slice FFV1Context, which will be removed in future
commits.
2024-08-01 10:09:26 +02:00
Anton Khirnov
7b2bfba55d
lavc/ffv1: move RangeCoder to per-slice context
2024-08-01 10:09:26 +02:00
Anton Khirnov
28769f6bc1
lavc/ffv1: move FFV1Context.plane to per-slice context
2024-08-01 10:09:26 +02:00
Anton Khirnov
9b86ba5a92
lavc/ffv1: always use the main context values of ac
...
It cannot change between slices.
2024-08-01 10:09:26 +02:00
Anton Khirnov
a57c88d67b
lavc/ffv1: move FFV1Context.slice_{coding_mode,rct_.y_coef} to per-slice context
2024-08-01 10:09:26 +02:00
Anton Khirnov
39486a2b29
lavc/ffv1: always use the main context values of plane_count/transparency
...
They cannot change between slices.
2024-08-01 10:09:26 +02:00
Anton Khirnov
492df65201
lavc/ffv1: drop write-only PlaneContext.interlace_bit_state
2024-08-01 10:09:26 +02:00
Anton Khirnov
a411fc5a84
lavc/ffv1: drop redundant PlaneContext.quant_table
...
It is a copy of FFV1Context.quant_tables[quant_table_index].
2024-08-01 10:09:26 +02:00
Anton Khirnov
4b9f7c7e3a
lavc/ffv1: drop redundant FFV1Context.quant_table
...
In all cases except decoding version 1 it's either not used, or contains
a copy of a table from quant_tables, which we can just as well use
directly.
When decoding version 1, we can just as well decode into
quant_tables[0], which would otherwise be unused.
2024-08-01 10:09:26 +02:00
Anton Khirnov
d2f507233a
lavc/ffv1enc: move bit writer to per-slice context
2024-08-01 10:09:26 +02:00
Anton Khirnov
889faedd26
lavc/ffv1dec: move the bitreader to stack
...
There is no reason to place it in persistent state.
2024-08-01 10:09:25 +02:00
Anton Khirnov
19e9f3d5f2
lavc/ffv1: move run_index to the per-slice context
2024-08-01 10:09:25 +02:00
Anton Khirnov
91d3c1ac47
lavc/ffv1: move sample_buffer to the per-slice context
2024-08-01 10:09:25 +02:00
Anton Khirnov
54aa33f116
lavc/ffv1: add a per-slice context
...
FFV1 decoder and encoder currently use the same struct - FFV1Context -
both as codec private data and per-slice context. For this purpose
FFV1Context contains an array of pointers to per-slice FFV1Context
instances.
This pattern is highly confusing, as it is not clear which fields are
per-slice and which per-codec.
Address this by adding a new struct storing only per-slice data. Start
by moving slice_{x,y,width,height} to it.
2024-08-01 10:09:25 +02:00
Anton Khirnov
d845ea49c5
lavc/ffv1dec: move copy_fields() under HAVE_THREADS
...
It is unused otherwise
2024-08-01 10:09:25 +02:00
Anton Khirnov
3a5c814b19
lavc/ffv1dec: drop a pointless variable in decode_slice()
...
fsdst is by construction always equal to fs, there is even an
av_assert1() checking that. Just use fs directly.
2024-08-01 10:09:25 +02:00
Anton Khirnov
4da146ba83
lavc/ffv1dec: drop FFV1Context.cur
...
It is merely a pointer to FFV1Context.picture.f, which can just as well
be used directly.
2024-08-01 10:09:25 +02:00
Anton Khirnov
e1fa107fd1
lavc/ffv1dec: simplify slice index calculation
2024-08-01 10:09:25 +02:00
Anton Khirnov
d776fa4e4d
lavc/ffv1dec: declare loop variables in the loop where possible
2024-08-01 10:09:25 +02:00
Anton Khirnov
8e19c24634
tests/fate/vcodec: add vsynth tests for FFV1 version 2
2024-08-01 10:09:25 +02:00
Michael Niedermayer
06f5ed40f8
avcodec/snow: Fix off by 1 error in run_buffer
...
Fixes: out of array access
Fixes: 70741/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_SNOW_fuzzer-5703668010647552
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc >
2024-08-01 00:18:02 +02:00
Michael Niedermayer
58fbeb59e7
avcodec/utils: apply the same alignment to YUV410 as we do to YUV420 for snow
...
The snow encoder uses block based motion estimation which can read out of array if
insufficient alignment is used
It may be better to only apply this for the encoder, as it would safe a few bytes of memory
for the decoder. Until then, this fixes the issue in a simple way.
Fixes: out of array access
Fixes: 68963/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_SNOW_fuzzer-4979988435632128
Fixes: 68969/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_SNOW_fuzzer-6239933667803136.fuzz
Fixed: 70497/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_SNOW_fuzzer-5751882631413760
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc >
2024-08-01 00:18:02 +02:00
Michael Niedermayer
ed96ac87a9
avformat/iamf_parse: Check for 0 samples
...
Fixes: division by zero
Fixes: 70561/clusterfuzz-testcase-minimized-ffmpeg_IO_DEMUXER_fuzzer-6199435013455872
Fixes: 70565/clusterfuzz-testcase-minimized-ffmpeg_dem_MOV_fuzzer-5783790316748800
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: James Almer <jamrial@gmail.com >
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc >
2024-08-01 00:18:02 +02:00
Nathan E. Egge
8280ec7a32
lavu/riscv: Revert d808070, removing AV_READ_TIME
...
The implementation of ff_read_time() for RISC-V uses rdtime which has
precision on existing hardware too low (!) for benchmarking purposes.
Deleting this implementation falls back on clock_gettime() which was
added as the default ff_read_time() implementation in 33e4cc9 .
Below are metrics gathered on SpacemiT K1, before and after this commit:
Before:
$ tests/checkasm/checkasm --bench
benchmarking with native FFmpeg timers
nop: 0.0
checkasm: using random seed 3473665261
checkasm: bench runs 1024 (1 << 10)
RVI:
- pixblockdsp.get_pixels [OK]
- vc1dsp.mspel_pixels [OK]
RVF:
- audiodsp.audiodsp [OK]
checkasm: all 4 tests passed
audiodsp.vector_clipf_c: 1388.7
audiodsp.vector_clipf_rvf: 261.5
get_pixels_c: 2.0
get_pixels_rvi: 1.5
vc1dsp.put_vc1_mspel_pixels_tab[0][0]_c: 8.0
vc1dsp.put_vc1_mspel_pixels_tab[0][0]_rvi: 1.0
vc1dsp.put_vc1_mspel_pixels_tab[1][0]_c: 2.0
vc1dsp.put_vc1_mspel_pixels_tab[1][0]_rvi: 0.5
After:
$ tests/checkasm/checkasm --bench
benchmarking with native FFmpeg timers
nop: 56.4
checkasm: using random seed 1021411603
checkasm: bench runs 1024 (1 << 10)
RVI:
- pixblockdsp.get_pixels [OK]
- vc1dsp.mspel_pixels [OK]
RVF:
- audiodsp.audiodsp [OK]
checkasm: all 4 tests passed
audiodsp.vector_clipf_c: 23236.4
audiodsp.vector_clipf_rvf: 11038.4
get_pixels_c: 79.6
get_pixels_rvi: 48.4
vc1dsp.put_vc1_mspel_pixels_tab[0][0]_c: 329.6
vc1dsp.put_vc1_mspel_pixels_tab[0][0]_rvi: 38.1
vc1dsp.put_vc1_mspel_pixels_tab[1][0]_c: 89.9
vc1dsp.put_vc1_mspel_pixels_tab[1][0]_rvi: 17.1
Signed-off-by: Rémi Denis-Courmont <remi@remlab.net >
2024-07-31 17:48:50 +03:00
James Almer
ab5c612137
avcodec/Makefile: use the correct path for aacdec_fixed.o when setting its dependencies
...
Fixes ticket #11112
Signed-off-by: James Almer <jamrial@gmail.com >
2024-07-31 11:32:56 -03:00
Anton Khirnov
43f702a253
lavfi/framesync: avoid forcing frame writability unnecessarily
...
Callers of ff_framesync_get_frame() generally do not expect the result
to be writable, those that do (e.g. ff_framesync_dualinput_get_writable())
ensure writability themselves.
Significantly reduces memory consumption in complex graphs with
framesync-based filters (e.g. scale, ssim).
Reported-By: Mark Shwartzman
2024-07-31 11:12:45 +02:00
Rémi Denis-Courmont
262168b04e
lavc/videodsp: RISC-V zicbop prefetch
...
There are currently no ways to run-time detect the CPU capability, so we
take it for granted (in the worst case, it will execute NOPs).
2024-07-30 18:41:51 +03:00
Rémi Denis-Courmont
4570b9f3c4
configure: check if assembler supports RV zicbop
...
zicbop is the Cache Block Operation, Prefetch extension to RVI.
2024-07-30 18:41:51 +03:00
Rémi Denis-Courmont
324eba69f7
lavc/vc1dsp: use saturating arithmetic for RVV inv_trans_dc
...
T-Head C908 (cycles):
vc1dsp.vc1_inv_trans_4x4_dc_c: 113.7
vc1dsp.vc1_inv_trans_4x4_dc_rvv_i32: 46.5 (before)
vc1dsp.vc1_inv_trans_4x4_dc_rvv_i32: 45.5 (after)
vc1dsp.vc1_inv_trans_4x8_dc_c: 230.7
vc1dsp.vc1_inv_trans_4x8_dc_rvv_i32: 65.7 (before)
vc1dsp.vc1_inv_trans_4x8_dc_rvv_i32: 52.5 (after)
vc1dsp.vc1_inv_trans_8x4_dc_c: 246.7
vc1dsp.vc1_inv_trans_8x4_dc_rvv_i64: 56.7 (before)
vc1dsp.vc1_inv_trans_8x4_dc_rvv_i64: 45.5 (after)
vc1dsp.vc1_inv_trans_8x8_dc_c: 419.7
vc1dsp.vc1_inv_trans_8x8_dc_rvv_i64: 81.2 (before)
vc1dsp.vc1_inv_trans_8x8_dc_rvv_i64: 53.5 (after)
2024-07-30 18:41:51 +03:00
Rémi Denis-Courmont
784a72a116
lavc/vc1dsp: unify R-V V DC bypass functions
2024-07-30 18:41:51 +03:00
Rémi Denis-Courmont
bd0c3edb13
lavu/riscv: count bytes rather than words for bswap32
...
This removes the dependency on Zba at essentially zero cost.
2024-07-30 18:41:51 +03:00
Rémi Denis-Courmont
5171baa228
lavc/ac3dsp: fix R-V CPU requirements
...
It probably will not matter on any real hardware, but the Zbb optimisations
do not require Zba. And then, we need HAVE_RVV to build the RVV stuff.
2024-07-30 18:41:51 +03:00
Peter Ross
0e09f6d690
avcodec/adpcm: only process right samples when decoding stereo
...
Fixes Coverity issue #1610760 .
2024-07-30 19:55:31 +10:00
Leo Izen
7bb5626fa7
avcodec/pngenc: fix sBIT writing for indexed-color PNGs
...
We currently write invalid sBIT entries for indexed PNGs, which by PNG
specification[1] must be 3-bytes long. The values also are capped at 8
for indexed-color PNGs, not the palette depth. This patch fixes both of
these issues previously fixed in the decoder, but not the encoder.
[1]: https://www.w3.org/TR/png-3/#11sBIT
Regression since: c125860892 .
Signed-off-by: Leo Izen <leo.izen@gmail.com >
Reported-by: Ramiro Polla: <ramiro.polla@gmail.com >
2024-07-30 05:43:36 -04:00
Leo Izen
825606641b
avcodec/pngdec: use 8-bit sBIT cap for indexed PNGs per spec
...
The PNG specification[1] says that sBIT entries must be at most the bit
depth specified in IHDR, unless the PNG is indexed-color, in which case
sBIT must be between 1 and 8. We should not reject valid sBITs on PNGs
with indexed color.
[1]: https://www.w3.org/TR/png-3/#11sBIT
Regression since 84b454935f .
Signed-off-by: Leo Izen <leo.izen@gmail.com >
Reported-by: Ramiro Polla <ramiro.polla@gmail.com >
2024-07-30 05:43:31 -04:00
Marth64
e2105b2800
avcodec/aacenc: Correct option description for aac_coder fast
...
The description advertises fast as "Default fast search", but
this has not been the default for a long time (current default
is twoloop).
Signed-off-by: Marth64 <marth64@proxyid.net >
2024-07-30 05:42:50 -04:00
Fei Wang
79b4869959
lavu/hwcontext_qsv: Derive bind flag from frame type if no valid surface
...
Fix cmd:
ffmpeg.exe -init_hw_device d3d11va=d3d -init_hw_device qsv=qsv@d3d \
-filter_hw_device d3d -hwaccel qsv -hwaccel_output_format qsv \
-i in.h264 -vf "hwmap,format=d3d11,hwdownload,format=nv12" -y out.yuv
Signed-off-by: Fei Wang <fei.w.wang@intel.com >
Tested-by: Tong Wu <wutong1208@outlook.com >
2024-07-30 13:41:15 +08:00
Fei Wang
d30a9fdc80
lavc/qsvdec: Add VVC decoder
...
Signed-off-by: Fei Wang <fei.w.wang@intel.com >
2024-07-30 13:40:21 +08:00
Fei Wang
cf9c398fc1
configure: Alphabetical order for av1 codecs
...
Signed-off-by: Fei Wang <fei.w.wang@intel.com >
2024-07-30 13:32:44 +08:00
James Almer
9e7a93c6fd
x86/intreadwrite: add SSE2 optimized AV_COPY128U
...
Signed-off-by: James Almer <jamrial@gmail.com >
2024-07-29 23:17:52 -03:00
James Almer
92b317245c
avformat/mov: use AV_WL*A
...
Signed-off-by: James Almer <jamrial@gmail.com >
2024-07-29 21:33:31 -03:00
James Almer
f1fcc3ca5f
avformat/matroskadec: use AV_WL32A
...
Signed-off-by: James Almer <jamrial@gmail.com >
2024-07-29 21:33:31 -03:00
James Almer
09de979ff6
avcodec/amfenc_av1: use AV_WL32A
...
Signed-off-by: James Almer <jamrial@gmail.com >
2024-07-29 21:33:31 -03:00
James Almer
753f2aeed7
avutil/intreadwrite: add missing aligned read/write macros
...
Signed-off-by: James Almer <jamrial@gmail.com >
2024-07-29 21:33:31 -03:00
Rémi Denis-Courmont
7b24f96c87
lavc/vp9dsp: remove R-V I intra functions
...
At this point, they are identical to the C code, except for instruction
ordering. In fact, they are typically slower or no faster than the C code.
2024-07-29 21:16:41 +03:00
Rémi Denis-Courmont
7aa6510fe1
lavc/vp9dsp: copy 8 pixels at once
...
In the 8-bit case, we can actually read/write 8 aligned pixel values per
load/store, which unsurprisingly tends to be faster on 64-bit systems (and
makes no differences on 32-bit systems). This requires ifdef'ing though.
2024-07-29 21:16:41 +03:00
Rémi Denis-Courmont
c98127c00e
lavc/vp9dsp: use restrict qualifier for copy/avg MC
...
Same as previous commit.
2024-07-29 21:16:41 +03:00