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