On 05/29/07 22:05, Reinhard Nissl wrote:
Hi,
Klaus Schmidinger wrote:
Anti-aliased freetype fonts really do look good ;-)
Have you tried either of the soft output methods (libxine, softdevice), or are you still running FF cards only?
I'm only running a FF card (with 4MB memory, so I can display the OSD with 256 colors).
vdr-xine can handle 16 fullscreen OSD areas with independent 256 color palettes. The only drawback is, that some of xine's video output devices only support overlays with 16 colors.
I hope that there will be an option to still get the "plain old" 16 color STNG OSD. Or will it depend on the result of cOsd::CanHandleAreas()?
Here's how it will be handled:
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop); tArea Areas[] = { { x0, y0, x7 - 1, y7 - 1, 8 } }; if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) { osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); osd->SetAntiAliasHint(9, 7); } else { tArea Areas[] = { { x0, y0, x7 - 1, y7 - 1, 4 } }; if (osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); else { tArea Areas[] = { { x0, y0, x7 - 1, y3 - 1, 2 }, { x0, y3, x3 - 1, y4 - 1, 1 }, { x3, y3, x4 - 1, y4 - 1, 2 }, { x4, y3, x7 - 1, y4 - 1, 2 }, { x0, y4, x7 - 1, y7 - 1, 4 } }; osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); } }
There's a global Setup.AntiAlias option through which the user can turn off anti-aliasing. In that case it immediately falls back to 4bpp. If Setup.AntiAlias is on, it tries to use 8bpp and falls back to 4bpp if that's not possible.
osd->SetAntiAliasHint(9, 7) tells the OSD how many colors will be used at all, and how many color combinations will be used with anti-aliasing. That way the OSD can evenly distribute the available palette entries to the various color blends by limiting the number of color levels per color combination.
Klaus