Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support intra edge filtering #2083

Merged
merged 8 commits into from Jan 21, 2020
Merged

Support intra edge filtering #2083

merged 8 commits into from Jan 21, 2020

Conversation

@rzumer
Copy link
Collaborator

rzumer commented Jan 14, 2020

This adds support for and enables the intra edge filter for directional prediction and closes #1065.

This AWCY run has the following results (at speed level 2):

   PSNR | PSNR Cb | PSNR Cr | PSNR HVS |    SSIM | MS SSIM | CIEDE 2000
-0.4245 | -0.7415 | -0.5551 |  -0.4450 | -0.4508 | -0.5157 |    -0.4762

Run time when called natively is around 4% worse than master on this run. The native version could probably be better optimized.

I was considering adding a speed preset for it, but I don't think it would be too useful since it is only applied when directional prediction modes are enabled, which is only at lower levels where we would want to turn this on anyway.

The AVX2 version does not work (it desyncs). My guess is that it is due to pixels being initialized when they should not, or vice versa, in the edge buffer, as changing the needs_foo variables in get_intra_edges() changes the location of the desync. The current combination may be invalid for IEF.

@rzumer rzumer force-pushed the rzumer:intra-edge-filter branch from 30750f6 to 8744d37 Jan 14, 2020
src/encoder.rs Outdated Show resolved Hide resolved
src/tiling/tile_state.rs Outdated Show resolved Hide resolved
src/encoder.rs Show resolved Hide resolved
@rzumer rzumer force-pushed the rzumer:intra-edge-filter branch 3 times, most recently from 8093650 to 3dc92f0 Jan 14, 2020
@tdaede

This comment has been minimized.

Copy link
Collaborator

tdaede commented Jan 14, 2020

I would also agree no speed preset. The gain relative to the speed loss is quite good.

@rzumer rzumer force-pushed the rzumer:intra-edge-filter branch 2 times, most recently from 73a227f to 1d992fe Jan 15, 2020
@rzumer rzumer marked this pull request as ready for review Jan 16, 2020
@rzumer

This comment has been minimized.

Copy link
Collaborator Author

rzumer commented Jan 16, 2020

Since IEF is enabled for encode-decode tests, and they catch most issues, I'm not sure having unit tests specifically for it would bring much value.

src/asm/x86/predict.rs Outdated Show resolved Hide resolved
src/asm/x86/predict.rs Show resolved Hide resolved
src/asm/x86/predict.rs Outdated Show resolved Hide resolved
@takehirokj

This comment has been minimized.

Copy link
Collaborator

takehirokj commented Jan 19, 2020

Since IEF is enabled for encode-decode tests, and they catch most issues, I'm not sure having unit tests specifically for it would bring much value.

I agreed that encode-decode tests is enough if IEF is enabled.

@rzumer rzumer force-pushed the rzumer:intra-edge-filter branch from a6db08c to c8b7e8b Jan 21, 2020
rzumer added 7 commits Oct 28, 2019
It remains disabled, pending testing.
It also currently does not support the smooth
filter type, which should be selected when a
neighboring context block uses a smooth mode.
This requires persisting coded partition information
within a tile, and passing that information along to
the directional prediction function, as well as the
plane being predicted. The IntraEdgeFilterParameters
structure is added to contain the extra information,
and it is wrapped in an Option to replace the
existing enable_intra_edge_filter argument.
The AVX2 assembly is not working with the
intra edge filter yet. When enabled, it
can generate desyncs, or segfault if the
smooth filter type is used. Therefore,
fall back to the native version when it
is selected.
This adds an interface to index the data
in 2D while storing it in 1D.
@rzumer rzumer force-pushed the rzumer:intra-edge-filter branch from c8b7e8b to 2732e98 Jan 21, 2020
@rzumer rzumer force-pushed the rzumer:intra-edge-filter branch from 2732e98 to 6349983 Jan 21, 2020
@rzumer rzumer merged commit 67ed30b into xiph:master Jan 21, 2020
15 checks passed
15 checks passed
rustfmt-clippy rustfmt-clippy
Details
build-unix (1.36.0-tests)
Details
build-unix (aom-tests)
Details
build-unix (dav1d-tests)
Details
build-unix (grcov-coveralls)
Details
build-unix (bench)
Details
build-unix (doc)
Details
build-unix (cargo-c)
Details
build-unix (check-no-default)
Details
build-unix (check-extra-feats)
Details
build-windows (cargo-build)
Details
build-windows (cargo-test)
Details
build-windows (cargo-c)
Details
continuous-integration/appveyor/pr AppVeyor build succeeded
Details
continuous-integration/travis-ci/pr The Travis CI build passed
Details
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

4 participants
You can’t perform that action at this time.