diff options
author | John Koleszar <jkoleszar@google.com> | 2010-09-29 13:04:04 -0400 |
---|---|---|
committer | John Koleszar <jkoleszar@google.com> | 2010-09-29 13:04:04 -0400 |
commit | b9be7a464f065c3700f937eea01d9298002b37eb (patch) | |
tree | f9d9d22690afe087df44733543fe29a68ef66e31 /vp8/common/blockd.h | |
parent | 7288cdf79dd179d5bbf927db6240e3b9a4da412b (diff) | |
download | libvpx-b9be7a464f065c3700f937eea01d9298002b37eb.tar libvpx-b9be7a464f065c3700f937eea01d9298002b37eb.tar.gz libvpx-b9be7a464f065c3700f937eea01d9298002b37eb.tar.bz2 libvpx-b9be7a464f065c3700f937eea01d9298002b37eb.zip |
Fix loopfilter delta zero transitions
Loopfilter deltas are initialized to zero on keyframes in the decoder.
The values then persist from the previous frame unless an update bit
is set in the bitstream. This data is not included in the entropy
data saved by the 'refresh entropy' bit in the bitstream, so it is
effectively an additional contextual element beyond the 3 ref-frames
and the entropy data.
The encoder was treating this delta update bit as update-if-nonzero,
meaning that the value would be refreshed even if it hadn't changed,
and more significantly, if the correct value for the delta changed
to zero, the update wouldn't be sent, and the decoder would preserve
the last (presumably non-zero) value.
This patch updates the encoder to send an update only if the value
has changed from the previously transmitted value. It also forces the
value to be transmitted in error resilient mode, to account for lost
context in the event of lost frames.
Change-Id: I56671d5b42965d0166ac226765dbfce3e5301868
Diffstat (limited to 'vp8/common/blockd.h')
-rw-r--r-- | vp8/common/blockd.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/vp8/common/blockd.h b/vp8/common/blockd.h index 4b7f1a359..75dd4f79d 100644 --- a/vp8/common/blockd.h +++ b/vp8/common/blockd.h @@ -262,9 +262,9 @@ typedef struct unsigned char mode_ref_lf_delta_update; // Delta values have the range +/- MAX_LOOP_FILTER - //char ref_lf_deltas[MAX_REF_LF_DELTAS]; // 0 = Intra, Last, GF, ARF - //char mode_lf_deltas[MAX_MODE_LF_DELTAS]; // 0 = BPRED, ZERO_MV, MV, SPLIT + signed char last_ref_lf_deltas[MAX_REF_LF_DELTAS]; // 0 = Intra, Last, GF, ARF signed char ref_lf_deltas[MAX_REF_LF_DELTAS]; // 0 = Intra, Last, GF, ARF + signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS]; // 0 = BPRED, ZERO_MV, MV, SPLIT signed char mode_lf_deltas[MAX_MODE_LF_DELTAS]; // 0 = BPRED, ZERO_MV, MV, SPLIT // Distance of MB away from frame edges |