Age | Commit message (Collapse) | Author |
|
|
|
failed to decode
|
|
|
|
|
|
Avoids issues when dynamically linking with third party libraries
in tools/examples.
|
|
(To be used alongside --filmgrain.)
Addresses part of #310.
|
|
|
|
Addresses part of #310.
|
|
Section 6.4.2 (Color config semantics) of the AV1 spec says:
If matrix_coefficients is equal to MC_IDENTITY, it is a requirement of
bitstream conformance that subsampling_x is equal to 0 and
subsampling_y is equal to 0.
Add Dav1dSettings.strict_std_compliance flag which, when set, allows
aborting decoding when such standard-compliance violations fail, even
though they don't affect decoding. In CLI, this flag can be accessed
using -strict.
|
|
This change is motivated by a desire to be able to toggle between CPU
and GPU film gain synthesis in players such as VLC. Because VLC
initializes the codec before the vout (and, indeed, the active vout
module may change in the middle of decoding), it cannot make the
decision of whether to apply film grain in libdav1d as part of codec
initialization. It needs to be decided on a frame-by-frame basis
depending on whether the currently active vout supports film grain
synthesis or not.
Using the new API, users like VLC can simply set `apply_grain` to 0 and
then manually call `dav1d_apply_grain` whenever the vout does not
support GPU film grain synthesis. As a side note, `dav1d_apply_grain`
could also technically be called from dedicated worker threads,
something that libdav1d does not currently do internally.
The alternative to this solution would have been to allow changing
Dav1dSettings at runtime, but that would be more invasive and a proper
API would also need to take other settings into consideration, some of
which can't be changed as easily as `apply_grain`. This commit
represents a stop-gap solution.
Bump the minor version to allow clients to depend on this API.
|
|
Use the check result instead of hardcoding what OSes have got the
function.
This also requires checking for the pthread_np.h header and including
it while testing for functions in meson, but allows getting rid of the
hardcoded OS conditions in the source.
This fixes building for Android, if _GNU_SOURCE happens to be defined.
(It gets defined if building with a slightly nonstandard cross file
that defines "system = 'linux'", but it could also have been set by the
caller.)
|
|
|
|
Meson's dynamic check is unreliable when additional compiler flags are
passed via CFLAGS. For example '-fprofile-instr-generate' in oss-fuzz'
coverage build. Fixes #370.
|
|
Merges the 3 threading parameters into a single `--threads=` argument.
Frame threading can still be controlled via the `--framedelay=` argument.
Internally, the threading model is now a global thread/task pool design.
Co-authored-by: Ronald S. Bultje <rsbultje@gmail.com>
|
|
|
|
Requires meson 0.51 or newer (older versions will just keep the SSE).
|
|
|
|
When targetting wasm32-unknown-emscripten, we need to have the -pthread option during
compilation for all the objects that use atomic instructions.
When -pthread option is used on a object that has atomic instructions, a section is added
to the binary notifying the linker that it is safe to use shared linear memory because
atomic instructions were not stripped (default behavior if the option is not set).
cf. https://github.com/WebAssembly/tool-conventions/blob/master/Linking.md#target-features-section
Before this patch, lib.c and thread_task.c were using atomic instructions but since -pthread was not
passed during compilation a section was added to the binary, disallowing shared linear memory
and preventing linking dav1d with a multi threaded wasm application.
It also renames stdatomic_dependency to stdatomic_dependencies, for clarity because it is now
an array of dependency objects.
cf. https://mesonbuild.com/Reference-manual.html#dependency-object
|
|
Helps differentiating actual errors in the buffer data or passed-in arguments
with scenarios like empty buffers or containing OBUs other than Sequence
Header.
|
|
|
|
|
|
And a function to fetch them. Should be useful to signal changes in the
bitstream the user may want to know about.
Starting with two flags, DAV1D_EVENT_FLAG_NEW_SEQUENCE and
DAV1D_EVENT_FLAG_NEW_OP_PARAMS_INFO, which signal the presence of an updated
sequence header in the last returned (or to be returned) picture.
|
|
|
|
It's supposed to warn about const-correctness issues, but it doesn't
handle arrays of pointers correctly and will cause false positive
warnings when using memset() to zero such arrays for example.
|
|
|
|
|
|
Closes #203.
|
|
|
|
|
|
This avoids lots of warnings about unsupported warning options.
|
|
Don't pass the .S assembly sources as C source files in this case,
as e.g. MSVC doesn't support them (and meson knows it doesn't, so
it refuses to proceed with an MSVC/gas-preprocessor wrapper script, as
meson detects it as MSVC - unless meson is hacked to allow passing .S
files to MSVC).
This allows building dav1d with MSVC for ARM targets without
hacks to meson. (Building in a pure MSVC setup with no other
compilers available does require a few new patches to gas-preprocessor
though.)
This has been postponed for quite some time, as compiling with
MSVC for non-x86 targets in meson has been problematic, as meson
used to require a working compiler for the build system as well,
and MSVC for all targets are named cl.exe, and you can't have one
for the cross target and the build machine first in the path at
the same time. This was recently fixed though, see
https://github.com/mesonbuild/meson/issues/4402 and
https://github.com/mesonbuild/meson/pull/6512.
This matches how gas-preprocessor is hooked up for e.g. OpenH264 in
https://github.com/cisco/openh264/commit/013c4566a219a1f0fd50a8186f2b11fd8c3efcfb.
|
|
Fixes #350.
|
|
|
|
|
|
Makes using unmodified upstream x86inc.asm possible.
|
|
Fixes #345.
|
|
Meson does not yet normalises arm64 to the aarch64 in the reference
table. To workaround this, in addition to the cpu_family check the cpu
field.
|
|
|
|
|
|
posix_memalign is defined as a built-in in gcc in msys2 but it's not available
when linking with the Universal C Runtime. _aligned_malloc is available in the
UCRT.
That should only affect builds targeting Windows since _aligned_malloc is a MS
thing.
|
|
|
|
Allows building with nasm < 2.14.
|
|
|
|
|
|
Required for the AVX-512 instructions added in Ice Lake.
|
|
------------------------------------------
mct_bilinear_w4_0_8bpc_avx2: 3.8
mct_bilinear_w4_0_8bpc_avx512icl: 3.7
---------------------
mct_bilinear_w8_0_8bpc_avx2: 5.0
mct_bilinear_w8_0_8bpc_avx512icl: 4.8
---------------------
mct_bilinear_w16_0_8bpc_avx2: 8.5
mct_bilinear_w16_0_8bpc_avx512icl: 7.1
---------------------
mct_bilinear_w32_0_8bpc_avx2: 29.5
mct_bilinear_w32_0_8bpc_avx512icl: 17.1
---------------------
mct_bilinear_w64_0_8bpc_avx2: 68.1
mct_bilinear_w64_0_8bpc_avx512icl: 34.7
---------------------
mct_bilinear_w128_0_8bpc_avx2: 180.5
mct_bilinear_w128_0_8bpc_avx512icl: 138.0
------------------------------------------
mct_bilinear_w4_h_8bpc_avx2: 4.0
mct_bilinear_w4_h_8bpc_avx512icl: 3.9
---------------------
mct_bilinear_w8_h_8bpc_avx2: 5.3
mct_bilinear_w8_h_8bpc_avx512icl: 5.0
---------------------
mct_bilinear_w16_h_8bpc_avx2: 11.7
mct_bilinear_w16_h_8bpc_avx512icl: 7.5
---------------------
mct_bilinear_w32_h_8bpc_avx2: 41.8
mct_bilinear_w32_h_8bpc_avx512icl: 20.3
---------------------
mct_bilinear_w64_h_8bpc_avx2: 94.9
mct_bilinear_w64_h_8bpc_avx512icl: 35.0
---------------------
mct_bilinear_w128_h_8bpc_avx2: 240.1
mct_bilinear_w128_h_8bpc_avx512icl: 143.8
------------------------------------------
mct_bilinear_w4_v_8bpc_avx2: 4.1
mct_bilinear_w4_v_8bpc_avx512icl: 4.0
---------------------
mct_bilinear_w8_v_8bpc_avx2: 6.0
mct_bilinear_w8_v_8bpc_avx512icl: 5.4
---------------------
mct_bilinear_w16_v_8bpc_avx2: 10.3
mct_bilinear_w16_v_8bpc_avx512icl: 8.9
---------------------
mct_bilinear_w32_v_8bpc_avx2: 29.5
mct_bilinear_w32_v_8bpc_avx512icl: 25.9
---------------------
mct_bilinear_w64_v_8bpc_avx2: 64.3
mct_bilinear_w64_v_8bpc_avx512icl: 41.3
---------------------
mct_bilinear_w128_v_8bpc_avx2: 198.2
mct_bilinear_w128_v_8bpc_avx512icl: 139.6
------------------------------------------
mct_bilinear_w4_hv_8bpc_avx2: 5.6
mct_bilinear_w4_hv_8bpc_avx512icl: 5.2
---------------------
mct_bilinear_w8_hv_8bpc_avx2: 8.3
mct_bilinear_w8_hv_8bpc_avx512icl: 7.0
---------------------
mct_bilinear_w16_hv_8bpc_avx2: 19.4
mct_bilinear_w16_hv_8bpc_avx512icl: 12.1
---------------------
mct_bilinear_w32_hv_8bpc_avx2: 69.1
mct_bilinear_w32_hv_8bpc_avx512icl: 32.5
---------------------
mct_bilinear_w64_hv_8bpc_avx2: 164.4
mct_bilinear_w64_hv_8bpc_avx512icl: 71.1
---------------------
mct_bilinear_w128_hv_8bpc_avx2: 405.2
mct_bilinear_w128_hv_8bpc_avx512icl: 193.1
------------------------------------------
|
|
- When building dav1d as a dependency fallback, the parent project needs
to provide the variable name of a dependency object, added dav1d_dep for
that.
- SOURCE_ROOT is the root of the main project source tree, use
current_source_dir() instead.
|
|
After checking if -ldl exists, use it for checking for the dlsym
function.
This fixes building in environments where the dlsym function is
unavailable. (My testcase is NDK builds with -static, where dlsym
isn't available for static linking, only if linking dynamically.)
|
|
|
|
|