G200+NV12 (Re: [MPlayer-G2-dev] Darwin port)
Michael Niedermayer
michaelni at gmx.at
Sat May 10 15:17:20 CEST 2003
Hi
On Friday 09 May 2003 01:57, Arpi wrote:
> Hi,
>
> > On Fri, May 09, 2003 at 01:32:22AM +0200, Arpi wrote:
> > > Btw Vektor mentioned scanline buffers yesterday, and I think it's a
> > > very interesting approach. ie. replace plane+stride with array of
> > > scanline pointers :)
> > > It would allow very amazing optimizations, like DR scanlines without
> > > OSD, and copy the rest. But I guess such feature won't go into g2 soon,
> > > maybe into g3, or in g2 v2.0 :))
> >
> > Yes, but it's only good for scanline-based filters. For example, if
> > you want to apply a block-based filter (e.g. deblock, dering, telecine
> > detection, anything DCT-based, etc.) you have to load a separate base
> > pointer every 8 pixels or so inside your inner loop, which is horribly
> > inefficient. With a single base plus stride, you can just use two
> > registers (current position and stride) with no extra memory reads.
>
> Hmm, you're right...
> Btw afair Michael's postproc code copies macroblocks into some internal
> aligned in-l1-cache buffer for processing and at the end it copies it back.
this copy is only done for the first / last row of blocks so the filters dont
need to check y>=0 / y<height (or have 2 versions for each filter ...)
but the source data is practically copied (+brightness/contrast corrected) to
the destination buffer before filtering so if just the source is line
indirect then it should be possible with only a few modifications but i dunno
by how much it will be slower ...
>
> Btw 2, what about MB-lines instead of scanlines? :)
IMHO, the per line pointers are a good idea for simple filters (eq, noise,
...) but for complexer ones which need to fetch pixels in the vertical
direction in the inner loops its probably too complex/slow, MB-lines are
probably faster to access but not simpler
btw, how many MB based filters do we have which would benefit from that?
[...]
--
Michael
screen[y][x] ^= cursor[cy][cx]; (violates patent #4,197,590)
median(mv[y-1][x], mv[y][x-1], mv[y+1][x+1]); (violates patent #5,905,535)
buf[i]= qp - buf[i-1]; (violates patent #?)
for more examples, see http://mplayerhq.hu/~michael/patent.html
stop it, see http://petition.eurolinux.org & http://petition.ffii.org/eubsa/en
More information about the MPlayer-G2-dev
mailing list