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/


Reply via email to