[FFmpeg-devel] [RFC] Documenting RV40 Loop Filter
Kostya
kostya.shishkov
Mon Nov 10 07:15:44 CET 2008
On Sun, Nov 09, 2008 at 07:47:59PM +0100, Michael Niedermayer wrote:
> On Sun, Nov 09, 2008 at 05:47:51PM +0200, Kostya wrote:
> > I post this in hope to clarify details of RV40 loop filter, since I don't
> > understand all details of its work and hope to determine correct comments
> > and variable names for my loop filter patch.
> >
> > Please comment. I will try to find to provide an additional information if
> > possible.
> [...]
> > == Strong loop filter ==
> >
> > In strong filtering mode elements are replaced with values obtained from
> > FIR filter with coefficients {25/128, 26/128, 26/128, 26/128, 25/128}
> > (i.e. averaging pixel with two neighbours on each side). Filtered value
> > may be clipped in order to not differ from original value by more than some
> > limit value.
> >
> > For luma blocks pair (p3, q3) is also filtered but with filter
> > {26/128, 51/128, 26/128, 26/128} where coefficient 51/128 is for original
> > value and other values are for p1, p2, p4 or q1, q2, q4
>
> you have a typo here, 26+51+26+26 is 129 but iam pretty sure it should be 128
>
> also a clearer description of this would be
> the middle 6 samples, that is 3 of each block are filtered by the
> (25,26,26,26,25)/128 FIR filter. The filter is mirrored at the 4x4 block
> edges thus resulting in (26,51,26,25)/128 for p3 and similarly for q3.
ah, good point
> >
> > === Deblock patterns calculation (aka very black magic) ===
> >
> > Horizontal deblock pattern for luma is made from:
> > CBP for the current MB
> > coded block pattern made for the MB shifted one row of subblocks up
> > (i.e. its first row is really a bottom row of top neighbour MB, second row is
> > the first row of current MB, etc.)
> > top row CBP for the bottom neighbour is appended at the end
> > motion vectors pattern, i.e. when subblock lies on the edge of 8x8 block with
> > significant MV difference from its neighbour, then this subblock is also
> > marked in deblock pattern
> > some other values (maybe for B-frames)
> >
> > Vertical deblock pattern for luma is made from:
> > CBP for the current MB
> > CBP for the MB shifted left by one subblock column (i.e. its left column is
> > really right column of the left neighbour MB)
> > motion vector pattern
> > some other B-frame specific stuff (I hope)
>
> Let me try a far fetched guess:
> a edge is filtered (that is enabled in the pattern) if either of the 2
> adjacent blocks are coded (that is the corresponding cbp bit being set
> for either block) or their mv difference being "significant"
hmm, if you clean that from B-frame specific cruft then it looks more
like this.
> [...]
>
> --
> Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
More information about the ffmpeg-devel
mailing list