On Freitag 12 Mai 2006 07:30, Denis Oliver Kropp wrote:
> Stefan Lucke wrote:
> > On Dienstag 15 November 2005 21:34, Mark Adams wrote:
> >>> I guess that the changes to unichrome/uc_overlay.c will break
> >>> softdevice. For VIA I have currently the following special code:
> >>>
> >>>          if (isVIAUnichrome)
> >>>            videoLayer->SetLevel(1);
> >> You could be right.  I assume softdevice wants the primary layer on top?
> >>
> >> Unfortunately, the existing implementation of levels was broken
> >> because it had a positive value as being below the primary.  The
> >> documentation for SetLevel is clear that it should be the other way
> >> around.
> >>
> >> You'll now need videoLayer->SetLevel(-1).
> >>
> >> You'll also need to set DLOP_ALPHACHANNEL on the primary layer to get
> >> the behaviour you want.  This is necessary in order to support OPACITY
> >> as an alternative.  These options will fail on earlier versions
> >> (assuming you weren't setting DFB_CLE266_UNDERLAY) so you will need to
> >> check the primary's capabilities for DLCAPS_ALPHACHANNEL.
> > 
> > It doesn't work for me. Tried it for two days without success.
> > 
> >             if (osdLayerDescription.caps & DLCAPS_ALPHACHANNEL)
> >             {
> >                 DFBDisplayLayerConfig osdLayerConfiguration;
> > 
> >               osdLayer->GetConfiguration(&osdLayerConfiguration);
> > fprintf(stderr," -- options: %08x\n",osdLayerConfiguration.options);
> >               osdLayerConfiguration.flags = DLCONF_OPTIONS;
> >               osdLayerConfiguration.options = DLOP_ALPHACHANNEL;
> >               osdLayer->SetConfiguration(osdLayerConfiguration);
> >               videoLayer->SetLevel(-1);
> > fprintf(stderr, " -- with alpha channel --\n");
> >             }
> >             else
> >             {
> > fprintf(stderr, " -- without !! alpha channel --\n");
> >               videoLayer->SetLevel(1);
> >             }
> > 
> > The only result is OSD only with videoLayer->SetLevel(-1) or
> > video only when called with +1 ("-- with alpha .." is printed).
> 
> Which pixelformat is your OSD? It should have an alpha channel :)

osdLayer is set by:     osdLayer=dfb->GetDisplayLayer(DLID_PRIMARY);
and it has a alpha layer, as with DirectFB from 2005-09-14 I get
a normal/full alpha blended OSD ;-)  (nearly the same code).
(I know it looks ugly but it is here (setting/changeing surface 
info is done in SetParams())): 
http://cvs.berlios.de/cgi-bin/viewcvs.cgi/softdevice/softdevice/video-dfb.c?rev=1.60&content-type=text/vnd.viewcvs-markup

So its either the sequence of settings of some capabiliies or some 
other magic :-( .

>From directfb code I do not understand the dfb_layers_hook_primary()
function around line 491 in unichrome/unichrome.c . Does it set or 
retrieve function pointers. If it sets some function pointers I've no 
clue where member's of ucOldPrimaryFuncs were set.

-- 
Stefan Lucke

_______________________________________________
directfb-dev mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev

Reply via email to