On Thu, Jul 01, 2004 at 11:03:58PM +0200, Kristof Pelckmans wrote:
> Quoting Ville Syrj�l� <[EMAIL PROTECTED]>:
>
> > You enable the deinterlacing with DLOP_DEINTERLACING. And yes you need to
> > double the original frame rate because the BES only displayes one field at
> > a time. You select the active field with IDirectFBSurface::SetField().
> I am still confused, does this mean :
> - a SetField() and Blit() at 50fps
> - a Flip() at 25fps
> In the process, do I have to care about vsyncs ?
Something like this maybe:
while () {
Blit();
wait...
Flip( DSFLIP_ONSYNC );
SetField( 0 );
wait...
SetField( 1 );
}
so it's Blit() and Flip() at 25 fps and SetField() at 50 fps.
or if you go for the single buffered approach:
while () {
copy top field
wait...
SetField( 0 );
copy bottom field
wait...
SetField( 1 );
}
In which case everything is 50 fps. You can't use Blit() in this case
because it can't blit only one field.
SetField() will take effect on the next vsync. As will Flip() with
DSFLIP_ONSYNC. But if you do a Flip() without DSFLIP_ONSYNC the
following SetField() calls will take effect immediately. The behaviour
can be toggled back again with Flip( DSFLIP_ONSYNC ). I'm not sure what
the intended or best behaviour is but that is how the current BES
implementation will behave.
> > The deinterlacing process itself consists of shifting the bottom field
> > vertically by half a line.
> This means that the BES doesn't do any fancy interlacing like BOB or WEAVE ?
Ok so my description was a bit lacking. The process displays one field at
a time (scaled to full frame height). I believe that is called bob. The
vertical shift is probably meant to eliminate some resulting artifacts.
And if you use the same frames with interleaved fields without enabling
DLOP_DEINTERLACING you get weave.
--
Ville Syrj�l�
[EMAIL PROTECTED]
http://www.sci.fi/~syrjala/