On Montag 22 Mai 2006 13:28, Stefan Lucke wrote:
> On Dienstag 16 Mai 2006 13:24, you wrote:
> > > video-dfb.c line 280: osdLayer=dfb->GetDisplayLayer(DLID_PRIMARY);
> > > setting surface description lines 307 - 314 with DSCAPS_PRIMARY and
> > > format DSPF_ARGB.
> > > getting surface line 328: scrSurface = dfb->CreateSurface (scrDsc);
> > >
> > > Hm, surface is not allocated from osdLayer, but as DSCAPS_PRIMARY is set,
> > > it should be the primary ;-) .
> >
> > I wonder if that's got something to do with it. Looks like it ought
> > to work but Denis and others are always advising against using
> > DSCAPS_PRIMARY in all but the most simple applications. Better to set
> > the pixel format in the layer config and then get the surface from it.
> > Probably won't make much difference though.
> >
> > Anyway, I think the only way you're going to track down the problem is
> > print out some details from osdLayer->GetConfiguration (options and
> > pixelformat), videoLayer->GetConfiguration (options and pixelformat),
> > scrSurface->GetPixelFormat and scrSurface->GetLevel, right at the end
> > of your code. Then we'll know whether it's a bug in the driver or
> > not.
>
> scrSurface is in PixelFormat 0x00418c04 too.
>
> I cannot do GetLevel() for a surface ! That is not supported.
>
> But now I made some progress :-)) . The final thing that makes the
> difference for me is to comment out line 233 in
> DirectFB/gfxdrivers/unichrome/uc_ovl_hwset.c
Again some progress :-) . This time with an unmodified DirectFB version.
So I'll bring that back to list.
Mark, thank you for your patience.
Level handling is now working with softdevice and VIA again.
But I had to change some parts, which will influence all other driver
handling too, so I'll have to test all my cards :-( .
The reason was, softdevice allocated the surface on which the OSD is
drawn, via (shortend):
scrDsc.flags = (DFBSurfaceDescriptionFlags) (DSDESC_CAPS |
DSDESC_PIXELFORMAT);
scrDsc.caps = DSCAPS_NONE;
DFB_ADD_SURFACE_CAPS(scrDsc.caps, DSCAPS_FLIPPING);
DFB_ADD_SURFACE_CAPS(scrDsc.caps, DSCAPS_PRIMARY);
DFB_ADD_SURFACE_CAPS(scrDsc.caps, DSCAPS_VIDEOONLY);
scrDsc.pixelformat = DSPF_ARGB;
scrSurface = dfb->CreateSurface (scrDsc);
and _not_ via (shortend) as DOK suggested here
( http://mail.directfb.org/pipermail/directfb-users/2006-May/001848.html ):
osdLayer=dfb->GetDisplayLayer(DLID_PRIMARY);
osdLayer->SetCooperativeLevel(DLSCL_EXCLUSIVE);
osdLayer->SetConfiguration(osdLayerConfiguration);
scrSurface = osdLayer->GetSurface();
--
Stefan Lucke
_______________________________________________
directfb-dev mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev