[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