Home | Back
1.4.9
-----

Major Voodoo improvements in this release!

Configure Options
- Add "--enable-pure-voodoo" to build a client only library.
- Add "--without-setsockopt" to disable usage of setsockopt() call.
- Generate directfb_build.h with Voodoo options.
- When Voodoo is enabled, add library dependency to pkg-config file and pass runtime options to libvoodoo.

Runtime Options
- Add "[no-]server-fork" choosing between fork() and thread based connection handling.
- Add "player-name=<name>", "player-vendor=<name>", "player-model=<name>", "player-uuid=<name>" to set Voodoo Player information.
- Add "proxy-memory-max=<kB>" to set maximum amount of memory per connection.
- Add "proxy-surface-max=<kB>" to set maximum amount of memory per surface.
- Add "proxy-layer-mask" to limit the set of layers to be used by clients.
- Add "proxy-stacking-mask" to limit the stacking classes to be used clients.
- Add "proxy-resource-id" to make all surfaces system only except those with the specified resource ID.

Voodoo
- Reuse connections when same server is used.
- Lookup remote player if no host has been specified.
- Implement multi response adding voodoo_manager_next_response() call.
- Add flush parameter to voodoo_manager_respond() to allow efficient transmission of multi response.
- Add voodoo_manager_unregister_local() which should have been there since the beginning *sigh*
- Add voodoo_manager_check_allocation() looking at VmRSS if "proxy-memory-max" option is used.

Implementation
- Add implementation for IDirectFBDisplayLayer::GetWindow() and GetWindowByResourceID().
- Add implementation for IDirectFBWindow::EnableEvents(), GetProperty() and SendEvent().
- Add implementation for IDirectFBSurface::Read().
- Add Release calls to IDirectFBSurface and IDirectFBWindow.
- Cache pixel format in IDirectFBSurface::GetPixelFormat().

Voodoo Play
- Introduce discovery and transport implementation, stay tuned...


1.4.8
-----

This release adds font rotation, advanced cursor APIs and surface buffer displacement in FBDev pool
along with some fixes and other enhancements.

API | IDirectFBDisplayLayer
- Add GetWindowByResourceID().

API | IDirectFBFont
- Add DFDESC_ROTATION to DFBFontDescriptionFlags.
- Add rotation to DFBFontDescription.
- Add DFB_DEGREES and DFB_RADIANS convenience macros.
- Add GetLineSpacingVector() and GetGlyphExtentsXY().

API | IDirectFBInputDevice
- Extend custom key definitions from 100 to 255.

API | IDirectFBWindow
- Add SendEvent() to send a window event via a window.
- Add DFBWindowCursorFlags (per window) with the following definitions:
      DWCF_RELATIVE   receive relative coordinates instead of absolute
      DWCF_EXPLICIT   if window has focus it's also the pointer window
      DWCF_UNCLIPPED  pointer is not clipped against stack boundaries
      DWCF_TRAPPED    pointer is clipped against the window boundaries
      DWCF_FIXED      pointer does not move at all, but still may send relative motion
      DWCF_INVISIBLE  cursor opacity is zero when this window is pointer window
- Add DWEF_RELATIVE to DFBWindowEventFlags to indicate x/y are relative coordinates.
- Add SetCursorFlags() to set the per window DFBWindowCursorFlags.
- Add SetCursorResolution() to define per window coordinate space,
  e.g. SetCursorResolution( 100, 300 ) will always send 50,150 in the middle of the window.
- Add SetCursorPosition() to warp the pointer relative to the
  window based on the per window coordinate space if set.
- Add DWET_UPDATE for sending update events (upon Flip).

Options
- Add max-axis-rate to limit the amount of input axis events.

Fonts
- Try to mmap the font file before loading all of its contents via data buffer.

Windows
- Add CWCF_CURSOR_FLAGS and CWCF_CURSOR_RESOLUTION to CoreWindowConfigFlags.
- Add cursor_flags and cursor_resolution to CoreWindowConfig.
- Add dfb_wm_set_cursor_position() called by IDirectFBWindow::SetCursorPosition().
- Add SetCursorPosition() to WMFuncs.
- Add wm_set_cursor_position() to wm module header and set it for SetCursorPosition().
- Remove setting of cx and cy from dfb_window_post_event(), instead this is done
  in window manager modules now.

Default WM
- Fix wm_window_lookup to return DFB_IDNOTFOUND when window with specified ID wasn't found.
- Set cx and cy of window events.
- Add unimplemented wm_set_cursor_position() to default window manager module.
- Send DWET_UPDATE events when the application does a Flip on the window surface.

LinoType Font
- Add new font module using LinoType library.

FBDev System
- Add MuckOut implementation for surfaces in fbdev pool using surface manager displace.


1.4.7
-----

    directfb-csource: fix colour replacement for transparent pixels
    Query GLX_RED_SIZE, GLX_GREEN_SIZE, GLX_BLUE_SIZE, GLX_ALPHA_SIZE and add their values instead of querying GLX_BUFFER_SIZE. (Although the GLX specification says
    image providers: refactoring exercise step 2
    image providers: refactoring exercise step 1
    fonts: set default max-font-rows to 99
    surface pool: Fix namespace of surface_pool_get_local.
    fonts: One more assertion fix, check on row != NULL, just removed cache member (unused).
    - provide libshjpeg patch until merged upstream
    - rewrote sh772x driver to use libshbeu - reintroduced jpeg provider, uses libshjpeg
    dummy: Added new dummy system module, e.g. for using DirectFB offscreen only.
    layers: Use surface_caps and surface_accessor if specified in DFBDisplayLayerDescription.
    layers: Added surface_caps and surface_accessor to DFBDisplayLayerDescription.
    test: Fixed warning in fusion_skirmish test.
    voodoo: Fixed warning by adding cast to VOODOO_PARSER_GET_ODATA.
    configure: Don't append '-std=gnu99' to CXXFLAGS.
    generic: Fixed warnings about unused functions (via attribute).
    fonts: Avoid too many surface switches during one string rendering.
    fonts: Fixed wrong state member being used for blitting flags...
    fonts: Fix assertion because of missing cache assignment.


1.4.6
-----

    build fixes for new c++ code
    use direct_snputs() instead of snprintf() (also fixes gcc warnings)
    configure: add -std=gnu99 to CFLAGS
    fonts: Reworked font cache for global cache row management.
    map: added map implementation, like hash with custom objects as keys instead of primitives
    graphics: Cleanup code by moving font state setup/restore into two functions.
    font: Removed default font implementation, use of DGIFF is adviced instead.
    list: Change direct_list_check_link to be a macro for getting the actual file:line in assertions.
    mkdgifft: New tool to generate DGIFF from a description and image files.
    linux_input: Fix build when HAVE_INPUT_ABSINFO is not defined though input_absinfo is available.
    linux_input: Query vendor and product id.
    input: Add vendor_id and product_id to DFBInputDeviceDescription.
    DGIFF: Add blitting flags to structure in file (in place of padding), backward compatible.
    generic: Show blend functions in Blit warning.
    mkdgiff: Added option --premult (-p) for premultiplied alpha (ARGB only).
    sh772x: Remove all jpeg related code
    Merge branch 'master' of git+ssh://git.directfb.org/git/directfb/core/DirectFB
    directfb-csource: Follow macro name change from previous commit.
    dfbtest_font: Extended test to load font at different sizes.
    Merge branch 'master' of git+ssh://git.directfb.org/git/directfb/core/DirectFB
    header: add some comments to video provider structs to avoid errors in parser
    gfx_util: Added dithering for non-RGB16 formats with separate configure option (only ARGB4444 so far)
    Merge branch 'master' of git+ssh://git.directfb.org/git/directfb/core/DirectFB
    IDirectFBFont: Added Dispose() to free resources used by the font, but keeps it usable, recreating resources as needed.
    sh772x: Remove the hook for the BEU IRQ as it isn't used for anything and will soon conflict with kernel resources.
    configure: add sh-) to detect toolchain (by Phil.Edworthy@renesas.com)
    Added systems driver specific shared surface data structure
    Added surface_pool_get_local
    Added layer enumerators to CoreSurfaceAccessorID & updated handling
    Default WM clears pending region updates on process_updates failure
    options: Added "max-font-rows" and "max-font-row-width" font cache limit options.
    linux_input: set DICAPS_KEYS for all input devices with key events
    x11: don't blank the cursor
    tools: add option 'transparent' to directfb-csource
    input: initialize linux_input key states
    config: properly allocate memory for getcwd call
    options: added "[no-]cursor-automation" for "Automated cursor show/hide for windowed primary surface"
    util: added dfb_gfx_stretch_to()
    directfb: updated banner, added optional DIRECTFB_VERSION_VENDOR display (just define via CPPFLAGS)
    version 1.4.6
    debug: added D_DEBUG_CHECK() macro implemented by new function direct_debug_check_domain()


1.4.5
-----

    surface: flipping enhancements
    - added DSFLIP_QUEUE and DSFLIP_FLUSH
    - added CSNF_DISPLAY
    - added dfb_surface_notify_display()
    - added dfb_gfx_copy_regions() utility function


1.4.4
-----

    voodoo: one more warning/error
    voodoo: fixed warnings
    voodoo: fixed some warnings
    voodoo: don't redefine htons
    modules: avoid warning by adding missing #ifdef DYNAMIC_LINKING
    memcpy: don't include dfb_types.h
    direct/interface: Add missing pthread_mutex_unlock call
    mach64: Enable auto block writes with WRAM
    linux_input: Ignore devices w/o caps
    surfaces: Add some missing dfb_surface_buffer_lock_deinit() calls
    input: compatibility with system X11
    core: Fix to not hold region buffer lock for lifetime of layer
    core: Added USB hot-plug support to linux_input and input core.
    core: Enable Fusion message dispatching usage during shutdown
    core window stack: Fixed _dfb_windowstack_inputdevice_listener race condition with layer context
    core: Fix various layer context lock related deadlock scenarios
    fusion: Fixed global reaction handling to prevent multiple removals
    direct: ntohl normally already defined in either in.h or inet.h
    generic: fix software rendering for DSBLIT_FLIP_HORIZONTAL | VERTICAL
    generic: use explicit indexes when initialising arrays based on pixelformat
    generic: make function tables const where possible
    generic: whitespace
    pixelformats: add DSPF_YV16
    tests: Added simple rectangle filling test.
    build: added LIBPNG_CFLAGS to some Makefiles
    voodoo: no __swap16
    direct: use kill, no sigqueue
    thread: added DIRECT_BUILD_NO_PTHREAD_CANCEL
    thread: check for PTHREAD_EXPLICIT_SCHED
    IDirectFBSurface_Window: use DirectThread for legacy flipping thread
    conf: use unsigned long
    fusion_bench: use pthread_mutexattr_t for recursive mutex initialization
    direct: use sigqueue on own tid and if that returns use exit_group or _exit
    voodoo: define htons ourselves
    direct: define ntohl ourselves
    voodoo: check for EAI_ADDRFAMILY
    direct: include <sys/syscall.h>
    direct: check for EAI_ADDRFAMILY
    direct: use non-recursive mutex for interfaces lock
    direct: use fallback killpg
    direct: check for signal.h
    jpeg: correctly setup iDCT downscale for libjpeg version < 7
    fbdev: prevent assertion in debug mode
    fusion/ref: prevent invalid assertion when destroying a ref
    jpeg: fix libjpeg >= v7 usage
    layers: Fix for showing unitialized buffer and superfluous clear at startup.
    fusion/lock: fix single app memory corruption
    fusion: fix compiler warning
    generic: Fixed wrong conversion from A8 to RGBA5551
    configure.in: fix --enable-sse help message
    convert: handle DSPF_A8 in dfb_pixel_from_color() and dfb_pixel_to_color()
    header: add some comments for DWCAPS_COLOR
    configure.in: little whitespace cleanup
    configure.in: use pkg-config for libpng
    configure.in: use AC_HELP_STRING() where appropriate
    input: handle button devices with just up/down keys as remote control
    FusionRef: Added debugging messages
    surface: Debug in error paths of surface_buffer_write()
    IDirectFBSurface: Allow negative pitch in Write()
    gfx: added LUT8 to LUT8 dest ckey blit fallback 'generic' routine
    RGB24: fixed injection
    pixelformat: Added DSPF_A1_LSB
    fusion lock: single app mode: 'name' storing overwrites pointers
    font: drawstring clipping
    IDirectFBWindow: Implemented SetSrc/DstGeometry() in Dispatcher/Requestor.
    Voodoo: Implemented RLE compression for 16 and 32 bit Write() calls.
    Voodoo: Fixed fork bombing until child process accepted connection.
    dfbtest_font: Added simple font loading/rendering test.
    Voodoo: Support fonts via network just like images (sending encoded/compressed data).
    font: Support chunked reading of font data into ctx.content.
    voodoo: Print error if manager is quit while waiting for a response.
    fbdev: Fix RGBA5551 transparency offset
    dfblayer: allow to set layer position and size using command line
    IDirectFBScreen: add a DVO 656 'connector' type
    dfbinspector: add DSPF_AVYU and DSPF_VYU pixelformats
    dfbscreen: little fixes
    gfx: LUT8 is not a YUV format
    doc: surface: add some source code level documentation
    warning: fix
    surface: replace GetFramebufferOffset() with GetPhysicalAddress()
    font: fix off-by-one bug in IDirectFBFont_GetStringBreak()
    jpeg: implement decimated decode for software JPEG decoder
    fbdev: Reduce useless nesting
    fbdev: Fix mode setting
    linux_input: Use MAX() instead of open coding it
    linux_input: Don't check quitpipe fd is select() was interrupted
    png: support for 1.4.x libpng
    IDirectFBScreen: add IDirectFBScreen::GetVSyncCount()
    screen: NTSC and PAL60 standards are defined as 59.94Hz not 60Hz
    x11: improved GLX-detection
    IDirectFBWindow::SetOptions: add DWOP_INPUTONLY
    IDirectFBWindow::SetOptions bit handling bug
    tests: add fusion_call
    x11: preliminary support for IDirectFBScreen functions
    font: add API to load font from databuffer
    hash: move externally unused func to .c file
    X11: add error detection, better depth support
    voodoo: Fork server for each client to have different Fusionees with full resource cleanup on disconnect.
    gfxcard: Accelerate matrix fallback if possible, for FillRectangle() and Blit().
    generic: Added Sop_a4_Sto_Dacc implementation.
    configure.in: fix X11 detection - use pkgconfig




1.4.3
-----

Wrap up all the changes since 1.4.2 in a nice package.
The big changes are the API changes: new pixelformats are added, a synchronisation
mechanism is added so you can sync backbufferless window updates, and batchblit2 is added
whichs supports hardware with double input - single output blitters; even
automatically in conjunction with the window composer of SaWMan.

API changes
- added the following pixelformats: YUV444P, AVYU, VYU, ARGB8565
- add IDirectFBWindow::BeginUpdates() and DSFLIP_ONCE to sync updates without double buffer space
- add DWEF_REPEAT flag to signal key repeat
- font: correct documentation of ret_str_length in GetStringBreak()
- IDirectFBSurface: Added DSBLIT_FLIP_HORIZONTAL and DSBLIT_FLIP_VERTICAL
- added IDirectFBSurface::BatchBlit2 (no software fallback offered).
- names: Added DFBScreenEncoderFrequency names.

modules
- add ShutdownLayer() and ShutdownScreen() functions to allow proper driver clean-up.

core
- add several previously added API functions to voodoo.
- shirmish: for single app, make skirmish a pointer so skirmishes can be copied
- colorhash: Commented out annoying assumptions
- surfaces: allow no windows on surfaceless layers
- for non-flipping fullscreen primary surface, force initial update as no Flip() may come from application.

graphics
- Fix combined blend/xor for drawing and blitting
- generic: Added StretchBlit with DSBLIT_FLIP_HORIZONTAL/VERTICAL.
- generic: fixes for big-endian handling for NV12/NV16/NV21
- generic: fixes for Bop_rgb32_toK_Aop_64 and Bop_PFI_OP_Aop_PFI(StoK)
- gfxcard: don't call gfxcard functions in no-hardware mode
- convert: In dfb_pixel_from_color() for RGB32/24 apply 0xffffff mask to fix color keying
- added gfx driver module unregister to reclaim space of unneeded libraries.
- sh772x: support for the new MS7724
- pxa3xx: rewrite of the kernel - userspace interface
- X11: support 3 layers

build system
- now supports compilation with debian packages
- build fix for systems without dynamic library support
- support recent tslib versions
- configure: support uclinux by treating it similar to linux

test suite
- dfbtest_sync: Added StretchBlit() to random operations.
- dfbscreen: Added resolution and frequency switch.
- dfbtest_mirror: Added test that uses scale/mirror with destination color keing.
- dfbtest_window: Added WarpCursor test.

general fixes
- plugged several static memory leaks
- unused header file clean-up
- bump SDL system driver to 1.4.x
- font: fix an UTF-8 problem in GetStringBreak
- debug: prevent deadlock in stack trace with SaWMan active
- input: fix for event completion when missing key ID
- PNG: Don't use fast path if pixels have to be premultiplied.

1.4.2
-----

Time for DirectFB 1.4.2. This release has three main changes.
The three main changes for this release are a changed font API for colours/outline,
the addition of an application_id to a window, and the new PXA3xxx graphics driver.

The full list of changes is:

API changes
- Add application_id to a window with IDirectFBWindow_Set/GetApplicationID.
    This is a free-to-use parameter that, on change, results in a WM callback.
- allow the window config value "color" to colorize the window
- Fonts/Colors: API support for colors and multiple layers in a glyph implementing outlines.
    Added DFBColorID and DCID_PRIMARY, DCID_OUTLINE
    Added IDirectFBSurface::SetColors() that takes an array of IDs and an array of DFBColor
    Added DFFA_OUTLINED for loading a font with support for outlines
    Added DFDESC_OUTLINE_WIDTH and DFDESC_OUTLINE_OPACITY
    Added outline_width and outline_opacity to DFBFontDescription
    Added DSTF_OUTLINE that activates the outline per DrawString()

core
- Simplified font rendering in core using the current state instead of its own

drivers
- fbdev: fixed RGB fields sizes in dfb_fbdev_set_gamma_ramp
- pxa3xx: new driver for the 2D graphics accelerator found on PXA3xx processors.
    hardware acceleration supported for line drawing, blending/blitting,
    rectangle and triangle filling operations and anti-aliased text.

gfx
- Bugs in pixel format convertion fixed (primarily 16 bit formats)
- converting to RGB32 sets alpha to ff
- buffer unlocking fixes in error paths
- add support for the DESTINATION Porter/Duff rule

1.4.1
-----

General bugfixes, and the following:

fbdev
- fix for BGR555
- removal of old code, addition of debug messages.
- Check mode switching result in fbdevSetRegion() by reading back var info.
- Check amount of video memory in fbdevTestRegion() to avoid running over buggy drivers' framebuffer.
- fix spurious timing problems and lockups when vt-switching.

input
- allow linux_input to run without an fbdev system

API
- add resource ID also to window structure in case window has no surface
- add DWCAPS_COLOR: creates a window with a fixed argb colour but no surface
- add IDirectFBWindow::SetAssociation(): dynamic window association

configure
- add #ifdef to direct types to have a possibility to surpress these
- Allow LIBPNG_LIBS and LIBPNG_CFLAGS to overrule nasty libpng-config usage.
- Fixed missing JPEG=yes setting in configure when LIBJPEG is set manually.


1.4.0
-----

General bugfixes, code cleanups and memory leak plugging.

Core
- fix for possible segfault when unloading non-used input/gfx modules.
- fbdev: Allow accelerator ID to be overridden by (existing) runtime option.
- IDirectFBScreen::GetEncoderDescriptions: add enums for NTSC443 and 30Hz + 24Hz
- font: DFFA_NOBITMAP will inhibit loading bitmaps if we have vector fonts too.

Input
- input: Implement driver_get_axis_info() in the linux-input driver
- vt/keyboard: Flush console input when not used; avoids kernel waking up

Gfx
- add optional dithering when loading images into RGB16 surfaces
- surface rotation: more complete support for 16-bit formats
- sis315: support for XGI Z series chip, STRETCHBLIT, and big endian handling
- matrox: use of BES guarantees atomic, tear-free triple buffering

Tools
- directfb-csource: add option to dither RGB16 images

Build Environment
- add missing include path for builddir != srcdir
- libtool for modules: use -module instead of -export-dynamic, since we only dlopen.

1.3.1
-----

Fusion
- update to use new 'unified' fusion kernel module.
  When using multi-app, please use fusion 8.1.1 or newer.
- fixed skirmish wait argument not taken as msec but usec

Config
- added 'include' option, to include config files.
- added config option to override module search dir.
- read /proc/self/cmdline if DirectFBInit() does not receive argv/argc.
- added option to override initial screen size.
- Fix build when srcdir != builddir.

Core
- Added IDirectFBSurface::Read and ::Write
- better out-of-memory error handling
- fixed alpha handling for palette SetEntriesYUV
- rectified changes to surface policy in case a surface is allocated again, of reallocated
- fixed memory leak in local "System Memory" pool when deallocating due to IDirectFB::Release
- fix software blending bug when modifying both source and destination
- IDirectFBDisplayLayer::SetSourceRectangle for non-scalable surfaces: change dst size too.
- surfaces: Fixed missing initialization of bridge pointer, crashing when no bridge is available.
- surfaces: clean-up local pool on 'leave' and 'destroy'
- gfx: added RGBA4444 support
- default font: Support premultiplied font formats.

Direct
- include ARM memcpy routines (big endian only)

Documentation
- added documentation for blend functions and some desktop-buffer-mode options
- directfbrc.5: Document triple and windows desktop-buffer-mode options.

Gfxsystems
- matrox: Wrong chroma plane offset was being used with deinterlace blits.
- omap: Added omapfb.h to release zipfile.
- SH772x: LCD parameters not obtained via fbdev ioctl
- SH772x: improved JPEG Encode/decode performance, JPEG fixes, JPU by default disabled due to conflicts
- SH772x: detection broadened to SH772x revisions
- unichrome: support for accel stretchblit YUV->RGB for CX700/M/2.

Input
- Fix possible array overruns
- added direct_modules_unregister() when unloading the module
- linuxinput: Fix LED handling, Count KEY_M
- font loading: Support premultiplied font formats.
- Video4Linux: add sources to release zipfile. Conform v4l and v4l2 to new core architecture.
- zytronic: added zytronic touch screen driver.
- vt: Move the keyboard XLATE/MEDIUMRAW handling to the vt code, to allow concurrent input.
- input: correctly read modifiers for load_keymap
- keyboard: added setting/loading of keyboard keymaps via IDirectFBInputDevice

Systems
- fbdev: Fixes for pan & zoom functionality
- fbdev: corrected ioctl error handling: now stops on error.
- fbdev: Test non-primary layer allocations
- fbdev: use directfbrc for initial screen size, if specified.
- x11: fixes for glx handling, additional logging
- x11: Remember each GLXContext's drawable and set update flag only if it changed.
- x11: Manage second GLX context per thread via another surface accessor ID.

Tools
- dfbdump: fixed to show correct buffer allocation sizes for certain formats.
- dfbinfo: now shows multiple encoder types correctly

Window Manager
- default: Fix DLBM_TILE clipping
- default: Fixed advanced blending with only DSBLIT_BLEND_COLORALPHA being used.
- default: Added Meta-R for window rotation.


1.3.0
-----

API | IDirectFBDisplayLayer
- Added GetRotation() to query the layer rotation.

API | IDirectFBSurface
- Added DSBLIT_ROTATE90 and DSBLIT_ROTATE270. Thanks to Young Hoon for original patch!
- Added DFBSurfaceHintFlags for optimized allocation, format selection etc.
- Added DSDESC_HINTS to DFBSurfaceDescriptionFlags and 'hints' to DFBSurfaceDescription.
- Implemented DSHF_FONT by selecting the configured font format and premultiplication.
- Added DSCAPS_ROTATED to allocate back buffers with width/height swapped (unimplemented).

API | IDirectFBWindow
- Added SetRotation() for 90, 180 and 270 degree rotation per window.
  Thanks to Young Hoon for the original patch!
- Added sub window support with each sub window having its own surface (one level only for DirectFB 1.4)...
- Added DWCAPS_SUBWINDOW, DWDESC_TOPLEVEL_ID and "toplevel_id" to DFBWindowDescription.
  Manage ref to top level window and vector of sub windows in window core, but leave scaling,
  translation and clipping of sub window bounds based on top level bounds to the WM module.
- Added DWOP_FOLLOW_BOUNDS to make bounds follow the parent window (only for window association, sub windows always follow).

Runtime Options
- Allow '90' and '270' for "layer-rotate" option.

Graphics Core
- Implement proper clipping for rotated blits of 90, 180 or 270 degree.

Layer Core
- Implement layer rotation using DSCAPS_ROTATED if available, otherwise using rotated window stack.
  With just a single buffer (frontonly), it always uses rotation of the window stack.
  Thanks to Young Hoon for the original patch!
- Added magic value to CoreLayerContext structure, improved debug messages.
- Fixed missing lock on surface structure around dfb_surface_allocation_update() call.

Surface Core
- Added Surface Pool Bridge[tm] technology to speed up transfer between pools.
  New API can be implemented to do optimized transfer from one surface pool to another.
  CheckTransfer() is called to probe each registered CoreSurfacePoolBridge.
  CoreSurfacePoolTransfer is allocated with one or more rectangles to be transfered.
  StartTransfer() and FinishTransfer() are used to actually execute the transfer
  which could be queued, but is synchronous at the moment (Start+Finish).
- Implemented dfb_surface_buffer_write() using Write() on allocation.
- New algorithm for finding the allocation which to Write() to, using last read
  allocation or other up to date allocation.
- Remember last read allocation for better negotiation in case of multiple up to
  date allocations.
- Implemented dfb_surface_buffer_read() using Read() on allocation
- Added dfb_surface_buffer_lock_deinit(), moved out format conversion.

Window Core
- Added magic value to CoreWindow.
- Set magic value in CoreWindow before calling WM functions.
- Added lock and ref around dfb_wm_close_stack() in dfb_wm_close_all_stacks(), added context magic and lock assertions everywhere!

Pixel Formats
- Added dfb_convert_to_rgb24() and dfb_convert_to_a8(), used for surface dumps to .ppm files.

Software Rendering
- Started implementation of DSBLIT_ROTATE90, DSBLIT_ROTATE180 and DSBLIT_ROTATE270 for all blitting flags...
- Disable MMX functions not supporting rotation (Ostep/Dstep) properly.

Utilities
- Added D_UTIL_SWAP(a,b) to exchange values.
- Added dfb_region_from_rotated(), dfb_rectangle_from_rotated() and dfb_point_from_rotated_region().
- Replaced dfb_back_to_front_copy_180() by dfb_back_to_front_copy_rotation() with extra argument.
  Thanks to Young Hoon for the original patch!

OpenGL Driver
- New accelerated driver using OpenGL!

PNG Image Provider
- Use dfb_surface_write_buffer() if possible.

Default WM
- Implement stack rotation and window rotation, thanks to Young Hoon for the original patch!
- In window_at_pointer() use dfb_surface_read_buffer() with 1x1 rectangle instead of lock/unlock.

UniQuE WM
- Added experimental border event handling in test_foo program to move/raise any window :)
- Use dfb_surface_write_buffer() instead of lock/memcpy/unlock for border images (foo).
- Unload foo surface (border tiles) during master shutdown.

X11 System
- Full featured OpenGL based acceleration via GLX!
- Implemented Surface Pool Bridge for fast transfer between XShmImage and GLX pool.
- Use XShmCreatePixmap() and XCopyArea() instead of XShmGet/PutImage() allowing partial transfers in both directions!
- Also tried to make multi application working, but it seems that for an X11 Pixmap there can
  only be one process doing a glXCreatePixmap() which also does not allow the GLXPixmap to be shared :(

dfbdump tool
- Show layer and window rotation.

dfbtest_window tool
- Added new program for testing window and sub window features :)
- Added more options, window destroy test and proper cleanup.
- Added test that hides the top level window and shows it again.
- New option to pass window caps for top or sub window.
- Enhanced testing and logging code. Run most tests on sub window, too.
- Added advanced window geometry tests.
- Added options for setting window options and for window association.
- Implemented selection of individual tests for top/sub window and added option to wait at the end.


1.2.6
-----

Core
- Call fusion_stop_dispatcher() before destroying pools to fix lots of shutdown issues.

WM Core
- Lots of useful debug messages.

libfusion
- Added fusion_stop_dispatcher() to be called before destroying pools etc... fixing lots of shutdown issues!

libdirect
- Added direct_thread_wait() / _notify(), _lock(), _unlock() and _terminate().
- Added some debug messages to DirectInterface code.

Utilities
- Added dfb_updates_get_rectangles() for convenience, doing bounding box trade off etc...

X11 System
- Fixed remaining crash with expose events that ran into a NULL window.


1.2.5
-----

Fonts
- Fixed alignment on eight byte boundary, thanks to Nikita Egorov!

Software Rendering
- Don't switch to fill rectangle in DrawLine() if matrix is used.

SH772x
- More fixes for JPEG encoding with up/down scaling and offset.


1.2.4
-----

API | IDirectFBInputDevice
- Added DFBInputDeviceAxisInfo(Flags) with DIAIF_ABS_MIN/MAX flags and abs_min/max fields.
- Added DIEF_MIN/MAX and min/max to DFBInputEvent, e.g. for axis boundaries.

API | IDirectFBWindow
- Added DWCAPS_NOFOCUS: window will never get focus or receive key events, unless it grabs them.

Runtime Options
- New option "[no-]software-trace" to show every stage of the software rendering pipeline.

Build Options
- Switch to pkg-config for SDL and FreeType2, thanks to Keith Mok!

Graphics Core
- Only have DSRO_MATRIX be mandatory for now. Other flags no longer prohibit acceleration.
  Worst case was when DSRO_SMOOTH_UP/DOWNSCALE was turned on globally via "smooth-upscale" or "smooth-downscale"
  runtime option which caused all operations to use software fallbacks, not only StretchBlit()!

Input Core
- Added GetAxisInfo() to InputDriverFuncs to query information about one axis.
  Make use of it in input_driver.h only if driver has defined DFB_INPUTDRIVER_HAS_AXIS_INFO
  to avoid having to change all input drivers.
- Query axis information from driver and put it into events.

Layer Core
- Set background mode of new contexts to DLBM_DONTCARE.

Pixel Formats
- Rewrote YCbCr<->RGB conversion routines without lookups which are much more expensive on embedded devices.
- Fixed many NV12, NV16 and NV21 code areas, mostly for big endian.

Software Rendering
- Rewrote Dacc_RGB_to_YCbCr_C and Dacc_YCbCr_to_RGB_C using Duff's device with macros.
  Conversion also supports 4:4:4 by this change, not optimizing for 4:2:x cases.
- Get rid of YUV tables saving 5k binary size!
- Added optimized Bop_argb_blend_alphachannel_one_invsrc_Aop_argb() -> 6x speed

Utilities
- Added exported dfb_pixelformat_names[] and replaced relevant code.

libdirect
- Important fix for having multiple interface implementations in one module.
- Added file and symbol lookup functions to trace code for external usage.
  New functions are direct_trace_lookup_file(), direct_trace_lookup_symbol() and
  a convenience function combining the above called direct_trace_lookup_symbol_at().
- Fixed missing magic value in thread structure created for non-direct threads.

Davinci Driver
- In ARGB OSD dithering use task buffer and add missing locks.
- Raise OSD surface pool priority to allocate in frame buffer rather than /dev/mem.
- Workaround broken DSP cache invalidation function.

SH7722 Driver
- Build only for SH4.
- Fixed missing update of rendering destination buffer.
- Fixes for JPEG encoding with conversion, cleanups...
- Fixed software fallback for JPEG decoding to unsupported formats.

SH7723 Driver
- Added support for SH7723 to SH7722 driver and kernel module.

Default WM
- Use min/max values from absolute axis motion events if present.
- Implemented DWCAPS_NOFOCUS.

X11 System
- Update X11 system module with cleaned up code from 1.3.x.
- Fixes in input driver and layer output.

JPEG Image Provider
- Fix direct decoding to NV16 (no to+from RGB) for little endian.

dfbtest_blit
- Added test program for (Stretch)Blit with an image from file.


1.2.3
-----

X11 System
- Fixed new bug with reopening X11 window when layer resizes.


1.2.2
-----

API | IDirectFBSurface
- Added missing layer context locking around dfb_wm_get_insets() in IDirectFBSurface_Window_Construct().

API | IDirectFBWindow
- Added missing locks around direct dfb_wm_... calls...

API | Utilities
- Generate name/value pairs for DFBWindowCapabilities and DFBWindowOptions.

Layer Core
- Fixed failing context lock assertion in dfb_wm_close_stack() by locking in context destructor.
- Added debug message to print context being returned by dfb_layer_get_active_context().

Window Core
- Avoid recursive dfb_wm_close_stack() caused by SaWMan's CloseStack() unref on the layer region.
  This issue happens only in single app build, where the layer region constructor gets called synchronously
  and destroys the window stack structure before the dfb_wm_close_stack() has finished.
  Fixed by calling CloseStack() at the end dfb_wm_close_stack(), moving the list removal and flag clearing
  before the call and freeing the stack data in dfb_windowstack_destroy() or recurring dfb_wm_init_stack().
- Fixed crash in window destructor caused by (un)locking the stack.
- In dfb_wm_close_all_stacks() lock each context and temporarily ref it for following unlock.

libdirect
- Added DirectUnregisterInterface() and destructor to call it.
- Added magic value to interface implementation structure and use D_CALLOC/D_FREE.

libfusion
- Fixed single app skirmish lock counting (copy'n'paste bug).

Default WM
- Avoid most of the recursive calls of wind_of_change().
- Make sure window has a surface before restoring its size when disabling scaling.

X11 System
- Fixed race condition and X error when switching resolution quickly.
- Implemented primaryRemoveRegion() with a new call to destroy the X11 window.
- Improve shutdown behaviour of X11 module.
  Certain race conditions at shutdown prevented, leading to lock or crash.
  x11input and x11 modules combined into one.

dfbmaster tool
- Added very simple dedicated master for safety, stability or enhanced testing pleasure.


1.2.1
-----

API | IDirectFBSurface
- Added MakeSubSurface() to make this surface a sub surface or adjust the rectangle of this sub surface.
- Fix Lock() on layer surfaces with system memory back buffer.
  This reverts commit 4cc82baddbc3a9849c2ff6c4979a65bcfb6ba96b and fixes
  GetFramebufferOffset() properly by not adding CSAF_GPU_READ in Lock(), but
  checking if there's a physical address provided by the surface pool via the
  buffer lock in GetFramebufferOffset().

API | IDirectFBImageProvider
- Added simple WriteBack() method for encoding surface data.

Runtime Options
- New option "warn=<event:params>" to print warnings on surface/window creation or surface buffer allocations.
  Example: 'warn = allocate-buffer:300x300' - Prints a warning for every surface buffer allocation made with
  both width and height of 300 or above.
- Added "keep-accumulators = <limit>" to allow freeing of accumulators above the limit.
  Setting -1 never frees accumulators until the state is destroyed (previous behaviour).
  The default is 1024 which already means up to 16kB are kept!
- Allocate palette on demand saving 16kB of the 60kB allocated until after DirectFBCreate().

Layer Core
- Fix failing assertion due to recent code cleanup.

Surface Core
- Cleanup complex assertions, no CORE_SURFACE_ALLOCATION_ASSERT within CORE_SURFACE_BUFFER_LOCK_ASSERT, only D_ASSERTs.
- A bit more debug when locking buffers.
- Use convenience functions where possible, e.g. dfb_surface_lock_buffer() instead of dfb_surface_get_buffer()
  and dfb_surface_buffer_lock() etc.
- Implemented strategy for surface allocations when pools are out of memory.
- Extended dfb_surface_pools_negotiate() to return a list of capable pools order by priority
  including pools out of memory at the end of the list.
- Added MuckOut() to the surface pool API to tag all allocations for removal to free up memory
  for a new allocation. If not provided by the pool, a fallback implementation will do the job,
  but that's not implemented yet.
- Added dfb_surface_pool_displace() to muck out and backup allocations and do the new allocation.
- Moved allocate_buffer() from surface buffer to surface pool code as dfb_surface_pools_allocate()
  with extended negotiation using a list of possible pools and with ability to muck out allocations.
- Changed static update_allocation() to exported dfb_surface_allocation_update().
- Added dfb_surface_trylock() for a fusion_skirmish_swoop() on the surface lock.
- Call dfb_surface_lock() and dfb_surface_unlock() in surface_destructor().
- Moved surface core initialization before system module to have generic pools always at
  the same position (with the same pool IDs).
- Keep an ordered list of surface pool IDs based on priority.
- Have a pointer to a backup pool in every pool which is set to the shared memory surface pool by default.
- Enhanced backup strategy when mucking out allocations.
- First check if any of the existing allocations is up to date,
  otherwise try to update one of the existing allocations.
- Enforce same order of joining pools as of initializing them.
- Fixed invalid 'buffer->written' allocation pointer when using "thrifty-surface-buffers" option.
- Fixed wrong order of joining surface pools in slaves.
- Fixes for mucking out multiple allocations.
- Use fusion_ref_set_name() to show the same info as with the skirmish.
- Cleanup buffer initialization and reset with two new convenience functions.
- Other fixes and enhanced debugging output.

Surface Manager (FBDev, DevMem, X11 Virtual Physical testing pool)
- Enhancements to surface manager code and fixes for old behaviour (without virtual physical surface pool).
- Extend dfb_surfacemanager_displace() to check policies, reimplement toleration code
  and take free space before and after an occupied chunk into account.
- Cleanup dfb_surfacemanager_allocate() to only check for free chunks.
- Always initialize x11(Shm)Image surface pool, regardless of virtual physical surface pool being enabled.
- Never fail in x11TestConfig() if virtual physical surface pool is not enabled,
  but use Fusion shared memory allocations as a fallback (previous behaviour).
- Update allocation size from chunk length which is usually bigger (at least 16 bytes of safety area).
- Enhance surface manager to find the best matching group of allocations to muck out.
- This is the first time multiple smaller allocations can be mucked out for a bigger one.
  The code that determines these allocations is still O(1) and finds the best matching
  group within all possible combinations.

Window Core
- Shutdown fixes in the window management and new flags for the state of the stack.
- Added CoreWindowStackFlags with CWSF_INITIALIZED and CWSF_ACTIVATED to CoreWindowStack.
- In dfb_wm_close_all_stacks() simply call dfb_wm_close_stack() for any stack with CWSF_INITIALIZED set.
  The previous code did only half of it, just clearing context->stack pointer and clearing the magic value
  resulting in the notification handler for the background image accessing a stack structure without magic.
- In dfb_wm_close_stack() first deactivate the stack if CWSF_ACTIVATED is set.
- Safe state handling in dfb_wm_set_active().
- Moved magic value set/clear from wm.c to windowstack.c where the structure is allocated and freed.
- Check return value of dfb_wm_init_stack().

libfusion
- Fixed dead lock with references in single app mode. fusion_ref_zero_lock() no longer leaves the mutex locked.
  Turned 'waiting' into 'locked' to keep size for binary compatibility.
- Print warning for FUSION_CALL_RETURN if caller could not receive result due to a signal.
- Clear object list (pointer to NULL) after cleanup for safety.
- Added fusion_ref_set_name(), e.g. for better debug information on object references.

Conversion
- Added conversion to RGB555 and from AYUV (added to all conversion functions).

SH7722 Driver
- Added hardware JPEG encoding support, code moved into library, JPEG lock and buffer allocation in kernel

VMWare Driver
- Fixed copy'n'paste bug in virtual driver.

Keyboard Input Driver
- Only become active if FBDev or DevMem is used to avoid grabbing keyboard from X11 for example.

DevMem System
- Partially reverted cleanup of surface manager code. The workaround for the surface manager creation happening before
  graphics driver initialization with possible dfb_gfxcard_reserve_memory() calls is still required.
- Update surface manager code from X11 virtual physical testing pool.

FBDev System
- Update surface manager code from X11 virtual physical testing pool.

X11 System
- Take first matching visual for each format instead of last and handle RGB32 and ARGB separately (depth 24 and 32).
- Fixed bytes per pixel and pitch calculation for fallback XCreateImage() when no XShm is available.
- Output ARGB when depth is 32, support AYUV input (layer format).
- XShm fixes and new virtual physical surface pool for development and testing.
- Specifying 'video-length = <bytes>' option will create a shared memory block of that
  size and initialize a surface pool with a surface manager supporting the new MuckOut() call.
- Changed x11(Shm)Image pool to only allow allocations for supported visuals (no fallback
  shared memory allocations) when the new option is used.
- Return accelerator ID 51 for testing with the virtual acceleration (currently called vmware).
- Make usage of XShmQueryVersion() to check for XShm support.
- Return accelerator as set in config.
- Set buffer lock offset in fallback mode to satisfy assumption in surface core.
- Other cleanups and fixes.

dfbdump tool
- Show capacity in pool info (with "-p") and only dump shared or explicitly specified surfaces to avoid crashes.

dfblayer tool
- Add testing Lock() with read/write, read only or write only.


1.2.0
-----

Overall
- Minor fixes and cleanups, fixed compiler warnings etc.
- Debugging messages and utility macros have been added.

API | IDirectFB
- Added sanity limit of 20480x20480 to CreateSurface().
- Fixed input device enumeration and event collection for devices without caps.

API | IDirectFBFont
- Bug fixes in GetStringBreak(), thanks to Keith Mok!

API | IDirectFBSurface
- Don't build hierarchy of sub surfaces internally, if start-stop is not used (speeds up sub surface construct/destruct).
- Optimized DrawLines() to use rectangle filling if all lines are horizontal/vertical.
  This allows hardware acceleration to be used, e.g. in GTK+ using gdk_directfb_draw_segments() a lot with
  only horizontal and vertical lines for widgets.

API | IDirectFBVideoProvider
- Fixed copy'n'paste(?) bug in SetStreamAttributes() argument.
  The argument was DFBStreamDescription, but obviously should be DFBStreamAttributes.

Pixel Formats
- Added BGR555 as a new pixel format, thanks to GARDET Guillaume!

Runtime Options
- Added "[no-]cursor-updates" to never show a cursor, but still handle it.
- New runtime option "thread-priority-scale=<100th>" to apply a scaling factor on thread type based priorities.

Graphics Core
- Removed dfb_gfxcard_sync() call from slave leaving procedure.
- Added CCF_RENDEROPTS that needs to be set by the driver to allow acceleration when != DSRO_NONE.

Input Core
- Only suspend the input core during shutdown if it has been initialized already.
- If a device has no caps at all, let it match with any caps being requested.

Layer Core
- Added CLRCF_FREEZE for dfb_layer_region_set_configuration() to set CLRSF_FROZEN.
  Changes are not applied until dfb_layer_region_flip_update() is called.
- Check if region surface is system only and avoid using CSAF_GPU_READ which would fail.
- Keep a list of window stacks, added dfb_wm_close_all_stacks() called early during core shutdown.

Software fallbacks
- Dacc_premultiply_color_alpha() also needs Cacc.a to be set, thanks to Mandy Wu for spotting!

libdirect
- Important Fix: Actual realloc() was missing in runtime-disabled debug mode (default).
- Remove check on element in direct_list_contains_element_EXPENSIVE() used for debugging.
  When checking for existence in a list, avoid crashes due to already freed elements being passed
  in as a pointer and checked for existence in a list.

TI Davinci driver
- Added scaling support to video layer using the Davinci Resizer.
- Added local task buffer for preparing a list of commands and send at once (CPU load reduced).
- Fixed timeout detection in DAVINCI_IOCTL_WAIT_LOW.
- Fix kernel module Makefile for newer kernels.
- Use FBIO_GET_TIMING to query screen size.
- Build and install a library and header files.
- Update allocations during Lock().
- Allow external definition of DAVINCI_C64X_IDLE_MAX for c64xdump tool.
- Added lots of debug messages to 2D acceleration.
- Set StretchBlit() hook statically.
- Replaced all hard coded addressing of 32MB DSP working area by DAVINCI_C64X_MEM.
  DAVINCI_C64X_MEM is defined in <linux/c64x.h> to be 0x8e000000 if not defined from outside.
- Moved call to set buffer start address to videoUpdateRegion().
  Also made videoSetRegion() very lightweight, e.g. when only the surface is changed.
- Commented out davinci_c64x_write_back_all() in EngineSync() which is still not working properly anyhow.

CirrusLogic EP9xx
- New driver, thanks to Brian Austin!

DGIFF Font
- Revival of the DGIFF (DirectFB Glyph Image File Format). Thanks to Vaclav Slavik!

FBDev System
- Ignore panning errors as before.

X11 System
- Fixed double wheel events by discarding ButtonUps.
- Added missing check of layer pixel format based on conversion routines available.
- Don't use XShm for offscreen surfaces, but always use Fusion SHM.

Keyboard Input driver
- Make driver usable without fbdev/vt just for the sake of a keymap.

Linux Input driver
- Thanks to Phil Endecott for adding F13 to F24 support!

directfb-config
- Teach directfb-config about SYSROOT and removes -L/usr/X11R6/lib, thanks to Marc Kleine-Budde!


1.2.0-rc1
---------

API | IDirectFBSurface
- Added IDirectFBSurface::SetSourceMask() - yes, a third blitting operand :)
- Added DSBLIT_SRC_MASK_ALPHA to modulate source alpha channel with alpha channel from source mask.
- Added DSBLIT_SRC_MASK_COLOR to modulate source color channels with color channels from source mask.
- Added SetSourceMask() with a surface argument plus x/y offset and flags.
- Added DFBSurfaceMaskFlags with DSMF_STENCIL to make x/y offset absolute and always start at a
  fixed position in the mask, otherwise x/y from the Blit() are added.
- Allow second string (prefix) in Dump() to be NULL to dump without numbering.
- Added FillTriangles().
- Changed SetMatrix() to take a 3x3 matrix.

API | IDirectFBEventBuffer
- Don't allow posting of universal events bigger than DFBEvent.

API | IDirectFBImageProvider
- Don't fail if PeekData() is not supported, same behaviour as video providers...

API | IDirectFBVideoProvider
- New events and SetAudioDelay(). Thanks to Daniel J Laird!
- Applied patch from Daniel Laird adding buffer threshold control/notifications. Thanks!

Runtime Options
- Added option "[no-]software-warn" to show warnings when doing/dropping software operations.
  No longer print a warning when software fallbacks are disabled. Use the new option!
- Added "[no-]fatal-break", d_debug_at() and direct_debug_at_always().
- Added option "surface-shmpool-size=<kb>" to set the size of the shared memory pool
  used for shared system memory surfaces.
- Added options to set default priority, policy and stack size for threads.
- Don't enable mouse motion compression at input drivers by default.
- New runtime option "quiet=<type>" to disable only certain message types.
  Thanks to Niels Roest!

Build Options
- Added "--without-software" to save 100k+ binary size if really not needed.
- Fixed typo in X11 detection.

libdirect
- Added extensible result codes and made other fixes to ban <directfb.h> from libdirect and others.
- Made DirectResult the primary type for result codes.
- Added D_RESULT_TYPE_BASE, D_RESULT_TYPE_MAX and D_RESULT_TYPE_IS for extended result codes.
- Changed most of DFB_ codes to be assigned the corresponding DR_ code.
- Three DirectFB specific codes remain, after DFB__RESULT_OFFSET defined as D_RESULT_TYPE_BASE('D','F','B').
- Added DirectEnumerationResult.
- Further cleanup of debugging code. New minimal debug mode
  to support D_DEBUG_AT, D_ASSERT and D_ASSUME when debug support is
  disabled, but DIRECT_ENABLE_DEBUG or DIRECT_FORCE_DEBUG have been
  defined. No domain filters, just formatted output (all or nothing).
- Fixed 'log-file' and 'log-udp' option.
- Strip off "lt-" at the beginning of a program name (for config file).
- Fixed allocation debugging always being used when available.

libfusion
- Check whether mount point is writable in find_tmpfs().
- Implemented lock counter in single app build.
- Added fusion_world_get_fork_action() and fusion_world_set_fork_callback().

Graphics Core
- Added mask of clipped functions to internal CardCapabilities (gfx drivers).
  Instead of providing clipping for none or for all functions (CCF_CLIPPING) a driver
  can set individual functions to be hardware clipped, e.g. DFXL_STRETCHBLIT where
  clipping is crucial.
- Added minimum glyph alignment of 8 bytes.
- Fixed state handling bug causing wrong acceleration masks.
- Added special graphics state debug messages in domain "Core/GfxState".
- Added dfb_line_segment_intersect().
  Gets the intersection point between a line and segment within the given segment.
- Implemented (real) triangle clipping.
- Started implementing affine transformations in software.
- Also fixed incorrect clipping when DSRO_MATRIX is set.
- Added support for affine transformations to dfb_gfxcard_draw_string().
  Actually this is done by using gStretchBlit.
  Direct glyph transformation (done by the font provider) would be better.

Input Core
- Added dfb_input_event_type_name() and event debug at Core/Input/Evt.
- Fix crashes during shutdown by suspending the input core before shutting down anything.

Layer Core
- Only sync with accelerator in dfb_layer_region_flip_update() when DSFLIP_PIPELINE is not set.

Surface Core
- Support NV16 in dfb_surface_dump() and so IDirectFBSurface::Dump().
- Added size field to description for pools with a defined maximum.
- Added CORE_SURFACE_BUFFER_LOCK_ASSERT(lock) and CORE_SURFACE_ALLOCATION_ASSERT(lock).
  These two macros are consisting of assertions for all they could check.

Software Renderer
- Print blend funcs in warning caused by 'no-software'.
- Allow DSBLIT_SRC_PREMULTIPLY while scaling from indexed to alpha formats.
- Scaling an image which has alpha values != 255 (non-premultiplied) now produces
  premultiplied output (smooth scaling only). Support for non-indexed sources still
  needs to be added.

nVidia driver
- Implemented affine transformations.
- In case of unsupported arch (NV40), skip objects and fifo setup.
- Cleanup overlay code. Enbale using NV12 (requires NV30 or newer).
- Fixed buggy vertices formation in TextureTriangles.

Radeon driver
- Implemented affine transformation (all cards) and source masking (R100/R200 only).
- Implemented antialiasing (R100 and R200 only).
- Fixed conversion+blend with A8 destination.
- Use LINE primitive for transformed DrawRectangle.
- Use POINT primitive for 1x1 rectangles.
- Implemented DSPF_DSTALPHA/INVDSTALPHA for A8.
- Implemented DSBLIT_SRC_PREMULTIPLY (R100/R200 only).
- Emit transformed rectangle using TRIANGLE_LIST instead of TRIANGLE_FAN.

SH7722 driver
- JPEG decoding, supports NV12 and NV16 (4:2:0 and 4:2:2 images)
- Use VEU for scaling and format conversion of JPEG decoded data (line buffer mode).
  Supports 4:2:0 and 4:2:2 to NV12, NV16, RGB16, RGB24, RGB32.
- Implemented LUT8 support for the third layer. Added lock for BEU code called for different layers.
- Automatic parent input system selection and other fixes, allowing to run df_fire on third and df_dok
  with alpha channel on first layer.
- Implemented XOR for drawing and blitting.
- Implemented DSBLIT_SRC_MASK_ALPHA, cleaned up and optimized state handling.
- Fixed byte swapping issues, e.g. no more swapping between BEU and LCDC, correct swapping of BEU input
  depending on number of bytes per pixel.

TI Davinci driver
- More acceleration (StretchBlit for ARGB, ARGB/RGB32->RGB16 conversion and FillRectangle() blending).
- Added colorizing support to blend functions. No additional cycles in DSP :)
- Added properly clipped (phases!) StretchBlit() for ARGB and RGB32 without any blitting flags.
- Added ARGB/RGB32 conversion to RGB16 without any flags (currently writing alpha data to scratch area).
- Real IRQ based synchronization, optimization for opaque filled rectangles.
- Fixed color calculation for filling/drawing to UYVY.
- Allow explicit driver usage without probing by setting accelerator id to 6400.
- Suppress errors of custom ioctls for now.
- Added small tool c64xdump for showing DSP status (queues, load).
- Further DSP interface updates and cleanups.
- Work around missing alpha plane pitch setting (when differing from RGB plane).
  The DSP function needs to be extended to fix it properly.
- Patch from Eric Nelson to support HD OSD planes.

Linux Input driver
- Set DIEF_FOLLOW on all events known not to be the last.

FBDev system module
- Don't pan at all when it's not supported by the device.
- Important fixes for mode switching, restructuring and cleanup.
  Still not working again is support for virtual resolutions with panning,
  not double/triple buffering which works.

SDL system module
- Fix mode switching/surface creation, having working accelerated SDL backend again.

X11 system module
- Bring in line with 1.0 features, expose handler, format conversion, SHM, SMP 8-)
- Fixed threading issues using XLock/UnlockDisplay().
- Use XNextEvent() again instead of usleep() based polling after fixes.
  Pull up to 100 events per round, i.e. until accumulated motion events
  are flushed and thread exit status is checked.
- Send ClientMessage to wake up thread from blocking XNextEvent().
- Reduced invisible 16x16 cursor to 1x1, minor cleanups.

Default WM
- Combine multiple x and/or y motion events before sending events or updating the cursor.
  This is a better way as opposed to have the driver do the work,
  otherwise there was too much cursor acceleration in such a case.

JPEG Image Provider
- Implemented directly loading to NV16 surfaces staying in YCbCr space.

dfbdump tool
- Added option "-ds" for dumping surfaces.
- Show buffers' lock status again.

dfbinfo tool
- Show min/max keycodes.

dfbinspector tool
- Added dfbinspector as a small C app (graphics driver capability probing).

gendoc tool
- Lots of improvements to parser and generated documentation.


1.1.1
-----

API
- Added 3x2 transformation for all drawing and blitting.
- Added render option DSRO_MATRIX and IDirectFBSurface::SetMatrix().
  The matrix consists of 3x2 fixed point 16.16 values. The order in the array is from left to right and from top to bottom.
  All drawing and blitting will be transformed:
  X' = X * v0 + Y * v1 + v2
  Y' = X * v3 + Y * v4 + v5
- Added DSRO_ANTIALIAS to enable anti-aliasing for edges, lines...

API | IDirectFB
- Added DSCAPS_SHARED for creating shared surfaces, not using local (malloced) memory pool.

API | IDirectFBDisplayLayer
- Added DFBDisplayLayerSourceCaps featuring DDLSCAPS_SURFACE.
- Added resource_id to DFBWindowDescription and DWDESC_RESOURCE_ID to
  specify the resource id to use for window surface creation, rather
  than using the window id for that.

API | IDirectFBFont
- Fixed missing translation of characters to indices in GetKerning().

API | IDirectFBSurface
- Added DSBLIT_COLORKEY_PROTECT to prohibit writing the color that the destination surface uses as a source color key.
- Fixed GetFramebufferOffset() by adding CSAF_GPU_READ when Lock() is called on a DSCAPS_VIDEOONLY surface.

API | IDirectFBVideoProvider
- Added DVPET_FINISHED, sent when playback is finished.
- Added DVPET_SURFACECHANGE, sent when size/format change.

Runtime Options
- Added "[no-]autoflip-window" to automatically flip non-flipping windowed primary surfaces.
  Previously, the default was to automatically Flip() in a thread. Now it's not.
- Added "[no-]font-premult" for premultiplication in case of ARGB glyph images. Default is enabled.
- Added "[no-]linux-input-grab" that will control whether linux_input will grab the devices. This is
  useful in cases where multiple processes want to receive input events.
- Added "linux-input-devices" and "tslib-devices" options.
- Added "no-init-layer [= <id>]" option to disable initialization of layers.
  Primary layer is initialized by default, use this option to avoid that.
- Added "[no-]thread-block-signals".
- Fix background color index support.
- Fixed missing color key flags when only index is set via config file.
- Reimplemented "thrifty-surface-buffers".

Build Options
- Added "--with-smooth-scaling", turned off by default to avoid 100k+ binary size increase.

Display Core
- Implemented defered region realization by adding CLRSF_FROZEN which is set initially on every region that is created.
- As long as CLRSF_FROZEN is set, all SetRegion() calls to the driver (and buffer allocations due to it) are simply discarded.
- Only when dfb_layer_region_flip_update() is called and the region is enabled and active, the flag is removed and the region
  is either realized or the config is just set if it was already/still realized.
- Added GetMixerState() to screen driver API and dfb_screen_get_layer_dimension() to be used
  instead of the deprecated dfb_screen_get_screen_size().
- Added capabilities for display layer sources. Check source capabilities if present when determining
  whether to allocate a surface for a layer region. This allows to add layer sources in addition to DLSID_SURFACE
  that have a surface without using DLCAPS_SURFACE which enables surfaces for all sources.
- Deallocate layer region surface buffers if the region is being unrealized.
- Made DisplayLayerFuncs const when being passed or used.
- When switching to an indexed layer format, use dfb_surface_init_palette() if no palette exists already.

Graphics Core
- Added dfb_gfxcard_get_driver_data().
- If alpha is zero, still check for RGB when looking up the best match in a palette.
- When resetting the 'checked' flags also reset the same in 'accel' flags. Fixes accidental hw usage.
- Skip prechecking clip in FillRectangles() if DSRO_MATRIX is used. Other functions are also affected, but not fixed yet.

Surface Core
- Fixes to CPU/GPU read/write access interlock management.
- Added dfb_surface_buffer_dump() implementation.
- Fixed lock+reconfig bug: fail when trying to reconfig a locked surface.
- Added convenience functions dfb_surface_read/write_buffer() and dfb_surface_dump_buffer().
- Moved surface palette creation from dfb_surface_create() into new dfb_surface_init_palette().
- Added CSALF_PREALLOCATED. The "thrifty-surface-buffers" option is implemented by iterating through all allocations
  at the end of an update_allocation() and deallocate all other allocations, unless they have the CSALF_PREALLOCATED flag.
  In the latter case it would not be a benefit, but the disadvantage of losing an allocation that is still up to date and
  would probably be faster (CPU read) than others. The 'preallocated' surface pool sets CSALF_PREALLOCATED upon allocation.
- Another flag CSALF_VOLATILE has been introduced. In case of a write access to one allocation, any other
  allocation is deallocated if it has the flag. This is independent of the "thrifty-surface-buffers" option.
  The 'local', 'shared' and 'preallocated' surface pools set CSALF_VOLATILE upon allocation.

Window Core
- Refuse to set non-shared surfaces as a background image for a window stack.

Software Render
- Added LUT8 -> ARGB4444 smooth scaling.
- Made smooth scaling support source rectangles not starting at 0,0.
- Fast RGB32/ARGB to RGB16 conversion (little endian).

Utilities
- Added dfb_convert_to_a4() and added RGB32/ARGB support to dfb_convert_to_rgb16().
- Added dfb_convert_to_uyvy() and dfb_convert_to_yuy2(), only copy supported yet.

libdirect
- Added direct_cleanup_handler_{add/remove} to install a cleanup handler called upon exit.
- Added direct_page_align().
- Added mutex and condition for thread initialization to eliminate sched_yield()s.
- Improved debug messages in thread code. Added "Direct/Thread/Init" domain to watch creation, wait,
  startup, initialization, notification ...
- Initialize libdirect in DirectFBCreate() already.
- Added new URI fd:/<fileno>. Used to create a DirectStream from an already opened file descriptor.
- Added direct_log_lock()/unlock() for ensuring multiple prints are not mixed with others.
- Use direct_log_lock()/unlock() to ensure stack traces are one contiguous block.
- Added sanity checks in build header if debug support is disabled.
  If DIRECT_ENABLE_DEBUG is defined, silently undefine it.
  If DIRECT_FORCE_DEBUG is define, show a warning and undefine it.
- Do not use PAGE_SIZE at all on Linux, thanks to Guillem Jover.
- Do not leak private labraries for dynamic linking, thanks to Guillem Jover.

libdirect (network support)
- Join multicast group if family is AF_INET and IN_MULTICAST is true.
- Use bind() instead of connect() for receiving UDP data.
- Use SO_REUSEADDR in case of multicast.

libfusion
- Print an alert message when using builtin implementation of fusion.
- Moved FUSION_ID_MASTER definition to types.h.
- Fix missing fusion_shm_enum_pools() for single app core.
- Added fusion_reactor_set_name() to change the name of a reactor after its creation.
- Implemented fusion_reactor_set_dispatch_callback().
- (Pre)Parse shmfile group in fusion_config_set().
- Added "ramfs" to possible types during mount point probing.

libfusion (builtin multi)
- Provide a REAL implementation of fusion_skirmish_wait/notify().
- Always free resources allocated in builtin implementation of fusion_skirmish_wait(), either if the skirmish was destroyed.
- Check for dead local references in fusion_ref_zero_lock()/trylock().
- Return DFB_NOSHAREDMEMORY if requested allocation exceeds the maximum address of the shm pool.
- When fusion_skirmish_wait() gets called with a timeout value, check whether the timeout expired *before* sleeping.
- Use fusion_skirmish_wait() instead of usleep() in fusion_ref_zerolock().
- In fusion_ref_zerolock(): check local references before entering the loop.
- Check for dead property purchaser.
- Honor FCEF_ONEWAY in fusion_call_execute(). Execute ref watcher with the FCEF_ONEWAY flag.
- Fail in fusion_skirmish_notify() if skirmish was destroyed. Sleep for at least 10ms in fusion_skirmish_prevail().
- Enable sleeping in fusion_property_lease()/purchase().
- Moved socket directory from "/tmp/fusion.#" to "/tmp/.fusion-#".
- Change socket ownership according to shmfile group.
- Speed up fusion_call_execute(FCEF_ONEWAY) by not creating a new socket.
- chown() the sockets directory according to "shmfile-group".

Voodoo
- Implemented some more requestor/dispatcher methods.
- Fixed alignment issues by applying VOODOO_MSG_ALIGN() on each message block.

Graphics drivers
- Port ati128, cle266, cyber5k, i810, i830, neomagic, nsc, savage, sis315, tdfx, unichrome to the new surface core. Only compile tested.

Radeon driver
- Instead of emitting vertices instantly, store them in a buffer that is submitted on EmitCommands() (this way DrawString() is about 45% faster with my 9200SE).
- R100/R200: Dropped some blend functions when destination format is A8 ((INV)DEST alpha never worked because A8 isn't really supported as dest format).
- R300: Implemented BLEND_COLORALPHA, COLORIZE, PREMULTCOLOR with some limitations (source must be premultiplied and COLORALPHA+ALPHABLEND isn't supported at all).
- Sleep for 10 usec in WaitVSync loop.

nVidia driver
- Fixed texture uploading: use the current surface lock instead of locking again.
- Replaced state->modified by state->mod_hw.
- Disabled some features not working with the new surface core.
- Sleep for 10 usec in WaitVSync loop.

Renesas SH7722 driver
- Added driver for SH7722 SoC from Renesas Solutions Corp.
- Supports DrawString(), FillRectangle(), DrawRectangle(), FillTriangle(), DrawLine(), FillSpans(), Blit() and StretchBlit().
- Supports DSDRAW_BLEND, DSBLIT_BLEND_ALPHACHANNEL, DSBLIT_BLEND_COLORALPHA, DSBLIT_SRC_COLORKEY, DSBLIT_ROTATE180 and DSBLIT_COLORIZE.
- Use hardware 3x2 matrix to implement DSRO_MATRIX for all blitting and most drawing.
- Transform coordinates in driver for DrawLine() and DrawRectangle().
- Implemented DSRO_ANTIALIAS for all drawing operations.
- The hardware provides "anti-aliased" lines by drawing a line with doubled pixel width (minor axis). This should be drawn with
  a transparency factor. Finally the original line is drawn on top of this.
- For filled rectangles and triangles, only the double width line is drawn and then the shape is filled.

TI Davinci
- Added TI Davinci driver.
- Supports OSD and Video with positioning, color key, opacity, alpha channel and vsync.
- The driver uses the devmem system and opens all frame buffer devices itself.
  This is required for extended ioctls like setting the OSD position, but also to
  support alpha channels which are stored in a different frame buffer device. In
  case of ARGB for the OSD, the alpha channel (3 bit!) is dithered during conversion.
- Implemented surface pools for OSD and Video layer. This enables direct usage
  of the frame buffers in case of RGB16 for OSD and UYVY for Video.
- Added patch for davincifb to support triple buffering on OSD.
- Hardware acceleration using the DSP with a special firmware and kernel module.
- Driver still runs without DSP module, but unaccelerated.
- Supports DrawString(), FillRectangle(), FillSpans() and Blit().
- Supports DSBLIT_BLEND_ALPHACHANNEL, DSBLIT_BLEND_COLORALPHA, DSBLIT_SRC_COLORKEY, DSBLIT_SRC_PREMULTIPLY and DSBLIT_SRC_PREMULTCOLOR.
- Supports RGB16, RGB32 and UYVY for simple filling and blitting with color keying.
- Supports ARGB for blending and premultiplication.
- No support for different source and destination formats.
- No support for color keying in conjunction with blending.
- DrawString() is not colorized yet, but enabled for testing (all text is white).

TI OMAP driver
- Added TI OMAP gfxdriver.
- No video layer or other fancy stuff yet. Enough to run XDirectFB on the Nokia N800 though.

Unichrome driver
- Fix a pointer buglet. The pfetch pointer was compared/set instead of the value to which it pointed.

Keyboard (TTY) input driver
- Sleep 2ms when read returns 0, to avoid CPU hogging. Thanks to Luis Mondesi lemsx1 gmail.

Serial input driver
- Fixed illness in processing read data in serial driver and fixed error path.

Default WM
- Added WM key combo <Meta>-<F12> to redraw the whole window stack.

Unique WM
- Fixed wheel direction.
- Commented out auto center.

DFIFF image provider
- Make DFIFF fast for the standard case again (60->483 MPixel/sec).
- Added support for sub surfaces with proper clipping/offset.
- Check for unscaled and unclipped loading without format conversion and just use dfb_surface_write_buffer().

FT2 font module
- Optimized pixel premultiplication.

FBDev system module
- Fixed SetMode / Panning Bug, thanks to Kieran Bingham!
- Fixed allocation size for planar formats in FBDev Surface Pool.
- Add missing libsysfs when statically linking, thanks to Guillem Jover.

DevMem system module
- Implement surface pool using surface manager.
- Added local/shared system data.
- Added configure.in and Makefile.am parts.

Linux Input driver
- Ignore input devices matching the TSLIB_TSDEVICE environment variable.

tslib driver
- Check the device in $TSLIB_TSDEVICE when guessing (no option given).

dfbdump tool
- Added "-dl" or "--dumplayer" for dumping the front buffer of each active contexts' primary region.

dfbfx tool
- Based on "fx", with command line options, documented code...
- Simulates blitting flags given a source and destination ARGB pixel.


1.1.0
-----

API
- Extend list of custom key definitions: DIKS_CUSTOM<0-99>

API | IDirectFB
- Fix code that controls single/double buffer window creation for primary surfaces in windowed mode. If
  DSCAPS_FLIPPING is set, it uses one buffer which already requires a Flip due to the window. Only if
  DOUBLE is set explicitly, create two buffers.

API | IDirectFBDisplayLayer
- Added IDirectFBDisplayLayer::SetRotation().

API | IDirectFBFont
- Added DFFA_FIXEDCLIP that can be used in addition to fixed advance
  and cuts off glyphs if they are wider than that.

API | IDirectFBImageProvider
- Added DFB_INCOMPLETE and return it from image providers
  if rendering has been aborted by the render callback.

API | IDirectFBPalette
- Added IDirectFBPalette::SetEntriesYUV(), GetEntriesYUV() and FindBestMatchYUV().

API | IDirectFBScreen
- HD extensions, thanks to Daniel J Laird!

API | IDirectFBSurface
- Added IDirectFBSurface::SetRenderOptions() as a new state element, but not
  mandatory for graphics drivers. At the moment it's used by the software
  driver to choose smooth or standard scaling.
- Made DisableAcceleration( DFXL_DRAWSTRING ) work.
- Each sub surface interface has a reference to its parent and a list of its children.
- Added DSBLIT_ROTATE180 with a basic software implementation.
- Added universal resource id (unsigned long) that belongs to each surface,
  e.g. the layer id or window id. General purpose surfaces can be given an
  id by using the new flag DSDESC_RESOURCE_ID and setting the resource_id field.

API | IDirectFBVideoProvider
- Thanks to Daniel J Laird for Video Provider Events!
- Extended video provider capabilities, thanks to Daniel J Laird!

API | IDirectFBWindow
- Added IDirectFBWindow::Bind()/Unbind().
- Added DWDESC_OPTIONS and DWDESC_STACKING to give initial values in the
  DFBWindowDescription using the new fields 'options' and 'stacking'.
- Added DWDESC_PARENT to DFBWindowDescriptionFlags and 'parent_id' to
  DFBWindowDescription. This can be used to associate a window to another,
  but it's up to the WM to implement it.
- Added IDirectFBWindow::SetKeySelection() that selects a mode for filtering
  keys while being focused. The selection defines whether all, none or a
  specific set (list) of keys is selected.
- Added DFBWindowKeySelection featuring DWKS_ALL, DWKS_NONE and DWKS_LIST.
- Added IDirectFBWindow::GrabUnselectedKeys() and UngrabUnselectedKeys()
  to have a key collector window receiving all keys that the focused
  window did not select.
- Added DFBWindowEventFlags featuring DWEF_RETURNED so far, which means that
  the event has been returned, i.e. has not been consumed by the original
  recipient. The DFBWindowEvent field 'flags' has also been added.
- Added advanced window geometry for positioning and scaling of windows
  relative to their own bounds, with ability derive from parent geometry.
- DFBWindowGeometryMode: DWGM_DEFAULT, DWGM_FOLLOW, DWGM_RECTANGLE, DWGM_LOCATION.
  DFBWindowGeometry: mode, rectangle, location.
- IDirectFBWindow::SetSrcGeometry() and IDirectFBWindow::SetDstGeometry().
- Added generic dfb_window_set_config() for simplifying core code and moving
  config handling into interfaces.
- Added DWOP_KEEP_ABOVE and DWOP_KEEP_UNDER.

Runtime Options
- Achtung! DirectFB is using sysconfdir now! E.g. use /usr/local/etc/directfbrc.
- New layer configuration system, staying compatible with older options:
- init-layer=<id> chooses layer with ID to configure (following layer- options apply)
- layer-size=<width>x<height> sets the pixel resolution
- layer-format=<pixelformat> sets the pixel format
- layer-depth=<pixeldepth> sets the pixel depth
- layer-buffer-mode=(auto|triple|backvideo|backsystem|frontonly|windows)
- layer-bg-none disables background clear
- layer-bg-color=AARRGGBB sets a background color (hex)
- layer-bg-image=<filename> sets a background image
- layer-bg-tile=<filename> sets a tiled background image
- layer-src-key=AARRGGBB enables color keying (hex)
- New option "surface-sentinel" to enable surface sentinels at the end of chunks in video memory.
- Added "smooth-upscale" and "smooth-downscale" options to enable smooth scaling by default.
- Added "[no-]madv-remove" to get around the auto detection.
- Added layer palette initialization via "layer-palette-<n> = <hexcolor>" option.
- Added option "layer-bg-color-index = n".
- Added option "layer-rotate = <degree>" with 0 and 180 supported.
- Added option "layer-src-key-index".

Pixel formats
- Added DSPF_RGB444 and DSPF_RGB555, thanks to Daniel J Laird!

Core
- Use a Skirmish to synchronize slaves with the master's post core initialization.
  The new function dfb_core_activate() will allow other processes to join.
- Explicit shutdown order of core parts and pools.

Graphics Core
- API break! Drivers must use "state->mod_hw" instead of "state->modified"!
- Validate clip in dfb_state_update() also if destination
  was just set manually, not via dfb_state_set_destination().
- Added YUV palette support. CorePalette has a second array for YUV entries.
  Both arrays are kept synchronized. Drivers can choose.
- Implemented StartDrawing/StopDrawing() for states. When a surface is being rendered to, its graphics
  state is set to DRAWING. Upon Flip() the state is flushed. The new mechanism needs to be enabled via
  "startstop" option. StartDrawing/StopDrawing() can be implemented by the graphics driver. e.g. to keep
  track dirty surfaces and defer flipping if it would reveal other's drawing.
- Added multifunctional color configuration function dfb_state_set_color_or_index().
  Always tries to set both color and index. If color index is -1, color is used and
  searched in palette of destination surface if present. If color index is valid the
  color is looked up in palette if present.
- Added dfb_gfx_back_to_front_copy_180().
- Added DFBColorKey which is binary compatible with DFBColor for RGB, but
  has an 8 bit color index instead of the alpha value.

Layer Core
- Use DFBColorKey instead of DFBColor in the CoreLayerRegionConfig.
- Fix potential dead lock in layer context initialization.
- Fix potential dead lock in dfb_layer_context_get_primary_region().

Surface Core
- NEW SURFACE CORE WORK IN PROGRESS (really usable, but not everything supported yet). Check TODO!
- dfb_surface_reformat() no longer fails immediatly if the surface is locked,
  instead it waits for 3 loops before doing it.
- If no alignment is specified (0), default to 8 bytes offset and pitch alignment.
  To disable alignment, simply set to 1.

Window Core
- API break! Replaced dfb_wm_start_desktop() by dfb_wm_post_init(). Removed StartDesktop which had no
  context pointers from WM API and added PostInit with proper context pointers.
- Simplified internal dfb_layer_context_create_window() and dfb_window_create()
  and replaced dfb_window_*grab*() by dfb_window_change_grab().

libdirect
- API break! Changed DirectHash's u32 key to be unsigned long. This allows to use pointers.
- Added direct_thread_detach() and direct_thread_is_detached().
- Use pthread cleanup to free the DirectThread structure etc.
- Added direct_thread_get_tid().
- Avoid "unused warning" if debug domains are declared, but not used.
- Fix 64 bit symbol address parsing in trace code.
- Fix missing target directory for nm-n files.
- Readded "%.nm" as an alternative to "nm-n.%".
- Added direct_sched_yield().
- Open log file with mode 0664. Automatically flush stderr.
- Added direct_list_foreach_reverse().
- Added direct_serial_check() returning true if the target serial is not higher.
- Flush stdout and stderr before showing the signal handler message.
- Rearrange locks in debug message code to avoid dead locks in certain circumstances.

libfusion
- API break! Changed call handler function type. The return value defines the library's behaviour
  after exiting from the handler. To return a value immediately, write to *ret_val and return FCHR_RETURN.
  If you want to make a call later on to fusion_call_return() yourself, use FCHR_RETAIN.
- The new serial value allows to have more than one call pending while calls can
  be returned in any order. The caller is still blocked on its single call, of course.
- API break! Added "ctx" argument to fusion_object_pool_create() and FusionObjectDestructor.
- Close file descriptor of shared memory files and be happy with just the
  static mmap() and the filename for using truncate() instead of ftruncate().
- Reinitialize entries in static pool array properly.
- Added fusion_hash_set_autofree() to enable/disable automatic freeing of values and/or keys.
- Use FusionHash for arena fields.
- Fix general dead lock problem with reactors by using read/write locks.
- Fix zero FusionID in forked process by entering the world after reopening it.
- Added fusion_dispatcher_tid().
- Fix lock order in fusion_shm_pool_destroy().
- Added fusion_reactor_set_lock_only() which does not lock and use it in fusion_object_set_lock()
  as this is called during object initialization.
- Added FUSION_SKIRMISH_ASSERT macro for debug mode
  failing if the skirmish is not locked by the current thread.
- Added fusion_reactor_set_dispatch_callback() with a test.
- Added fusion_reactor_attach/dispatch_channel() with the older calls using channel zero.
- Added fusion_skirmish_wait() and fusion_skirmish_notify(). When you hold the lock you can wait until
  you get notified, where others can get the lock while you're waiting. At the moment it requires the
  notifier to acquire the lock.
- Added timeout to fusion_skirmish_wait(), 0 means unlimited.
- Added a new Fusion/IPC implementation using standard system calls:
- Skirmish gets implemented by using sched_yield()+usleep, exactly like linuxthreads does with pthread mutexes,
  but it's also capable of automatically unlocking whether the owner process died without doing it.
- Property works like Skirmish, but it doesn't sleep and it doesn't check for a dead owner.
- Dispatching and co. make use of raw unix sockets: there is a local address specific to each fusionee
  (/tmp/fusion.@WORLD_INDEX@/@HEX_FUSION_ID@) and each call (/tmp/fusion.@WORLD_INDEX@/call.@HEX_CALL_ID@.@HEX_CALL_SERIAL@),
  and messages are sent directly from the generator to the socket of the listeners.
  From a network point of view, this is similar to UDP Multicast (e.g. conference or meeting).
- The new implementation gets build when --enable-bulti is specified but no usable linux/fusion.h was found
  (however you can edit fusion/build.h to force building it).
- Raise max number of shm pools to 16.

Software Rendering
- Fixed RGB24 to RGB16 conversion.
- Fix ARGB on RGB16 blending. Use Duff's Device and optimize for 0% and 100% opaque.
- Fix hi/lo mixup for big/little endian in 32 bit wise 16 bit color keying code.
- Added smooth up/down scaling for different formats.
- Fix 64bit implementations of RGB32 source and destination color keying.

DFIFF Image provider
- Use a preallocated surface to render the image
  (this should fix support for destinations that are premultiplied, separated, and co.).

PNG Image provider
- Avoid abort() caused by libpng and return an error instead.
- Plug a memory leak in the PNG image provider. Thanks to Eugene Everson.
- Fixes for grayscale PNGs.

Mach64 driver
- Ported to new surface core.
- Added RGB444 and RGB555 support.

Matrox driver
- Ported to new surface core.
- Added RGB444 and RGB555 support.
- Eliminate libsysfs dependency from i2c detection.
- Reset besvcnt to 0 prior to disabling the backend scaler.
- Sometimes the BES would not turn off with just BESCTL. It seems besvcnt
  not being programmed to zero has something to do with it since resetting
  BESGLOBCTL before BESCTL seems to help.

nVidia driver
- Added support for RGB555.
- Fixed support for premultiplied surfaces.
- Dropped down blits from system memory on the NV20 (crashes on Xbox).
- Optimizations and cleanup.

Radeon driver
- Ported to new surface core.
- Support RGB555 and RGB444.
- RGB555 support on Overlay and CRTC2.
- Removed limit of 8x8 surfaces:
  apparently it comes from the Rage128 driver but it doesn't apply to Radeon(s).
- Implemented DSBLIT_ROTATE180.

Unichrome driver
- Fix blitting of planar surfaces (YV12/I420) when a source rectangle is used
  or the source and destination surfaces are different sizes.

Linux Input driver
- Fix evdev ioctl() parameters.
- Only use FBDev system module data in linux input driver if system is built.
- Don't bail out with other system modules if LINUX_INPUT_USE_FBDEV is not set.

FBDev System module
- Add source rectangle support to fbdev layer.
- Check fbdev pan/wrap capabilities for double/triple buffering.
- Fix fbdev_ioctl_call_handler() return value.
- Fix transfer of errno from master to slaves when doing ioctls.
- Do FBIOPAN_DISPLAY ioctls directly.

DevMem System module
- Added generic /dev/mem based system module.
- There's no screen or layer registered, a graphics driver is required.
- Added some new runtime options for the new system module.
- video-phys=<hexaddress> sets the physical start of video memory.
- video-length=<bytes> sets the length of video memory.
- mmio-phys=<hexaddress> sets the physical start of MMIO area.
- mmio-length=<bytes> sets the length of MMIO area.
- accelerator=<id> sets the accelerator ID for selecting the graphics driver.

SDL System module
- Support different DirectFB formats on 32 and 16 bit displays.
- Disable SDL backend by default.

X11 System module
- Support different DirectFB formats on 32 and 16 bit displays.
- Use an ShmImage with twice the height of the output. Alternate between bottom and top image and
  do XSync() BEFORE doing the next XShmPutImage(). Only call XShmPutImage() for the updated region.
- Takes advantage of SMP now.
- Added true keymap support to X11 input driver. Read the X11 keymap entries properly and translate to
  identifier and symbols. Only send key code in events. X KeySym to DFBInputDeviceKeySymbol translation
  might not be complete for everyone.
- Provide the original timestamps from the X events.
- Use DIEF_FOLLOW for x/y motion.
- Added call to XFlush() after XShmPutImage() boosting df_andi from 100 to 130 FPS
  and making window stack updates really smooth and no longer distorted.
- Use preallocated shared memory for calls, the layer context lock allows this.
- Support non-SHM connections.
- Fall back to non-shm if XShmAttach() or XShmPutImage() fail after XShmQuesryExtension() returned success.
- Handle expose events.
- Enable X11 System Module by default.

Default WM module
- Pan the layer to follow the mouse cursor (aka. virtual resolution).
- Actually fail if a parent window for the newly created one was specified (not supported).

dfbdump tool
- List buffers in video memory if "-s" is passed.

dfblayer tool
- Added option "-R <degree>".

directfb-csource tool
-  Add --raw option to directfb-csource to allow encoding data files in headers


1.0.0
-----

libfusion
- Use local memory for FusionVector (D_MALLOC instead of SHMALLOC) if pool is NULL in fusion_vector_init().

SDL Input
- Thanks to Ben Combee for adding DIEF_FOLLOW support!

dfbdump tool
- Align output of summarized surface memory again.


1.0.0-rc5
---------

API | IDirectFBVideoProvider
- Another (binary compatible) API change: added DVSTATE_BUFFERING.

Build Options
- This patch adds '--with-message-size=SIZE' to allow fusion messages up to SIZE bytes (default is 1024).

Runtime Options
- New option "shmfile-group=<groupname>" to set the group that owns shared memory files.
- Added option "[no-]thrifty-surface-buffers" to free sysmem instance on xfer to video memory.
- Don't abort if an unsupported option is found, but give a fat warning.
- New option "vt-num=<num>" to use given VT instead of current/new one.

Graphics Core
- Added dfb_gfxcard_get_device_data().
- This fixes unconditional access to conditionally allocated font row data, thanks to Ben Combee!
- Surface manager always deallocates all auto video instances when suspending.
  This has the nice side effect of free space being defragmented after resume :)

Window Core
- Don't notify WM if cursor opacity didn't actually change.

Software Rendering
- Added fast RGB24 to RGB16 conversion (little endian only).

libdirect (optional part)
- Finally found the way to embed MPEG streams within the RMF container.
- Dropped down RTSP seekability (never worked fine).

PNG Image Provider
- Implemented 1 and 2 bit indexed PNG support.

Keyboard (TTY)
- Added keypad equal support.

Linux Input
- Added keypad equal support.
- Fixed segfault in event thread.

H3600 Touchscreen
- Thanks to Philip Jägenstedt :philipj 0pera c0m: for fixing the H3600 check!

FBDev System
- Improved robustness of VT switching, e.g. for rapidly switching back and forth.
- Set FD_CLOEXEC on the frame buffer device file descriptor.

dfbdump tool
- Show creator of references (of windows, surfaces, contexts etc).


1.0.0-rc4
---------

FBDev System Module
- Many thanks to Vaclav Slavik for fixing up VT initialization.
  Check the ChangeLog for a detailed description.

Unichrome Driver
- Allow for improved timing of video layer flips when the FIELD_PARITY option
  is in use.  The improvement is only possible if the kernel framebuffer
  supports it.  If not, we do the best we can but occasional glitches may
  occur under high processor load.

Misc/minor (usually not in a summary, but due to the few changes...)
- Distribute autogen.sh
- Add new lines to work around nested structs being taken by the doc generator.
- Avoid cutting away the last pixel of a planar yuv row.


1.0.0-rc3
---------

API
- Added IDirectFBWindow::SetBounds() to do a move and resize in one step.
- New window option DWOP_SCALE prevents the surface from being resized when the window
  size on screen changes, i.e. via IDirectFBWindow::Resize() or SetBounds().
- The surface can be resized separately using IDirectFBWindow::ResizeSurface() if needed.
- Enable DWOP_SCALE by default for windowed primary surface (IDirectFB::CreateSurface).
- Fixed DIKT_UNICODE detection in DFB_KEY_TYPE(symbol) for values > 255.

Runtime Options
- New runtime option "scaled=<width>x<height>" scales the window to the specified size
  for 'force-windowed' apps. The surface size will not be affected, still set via "mode=".
- Added options "debugmem" and "debugshm" to turn on local/shared memory allocation
  debugging separately from "debug" option.
- Let "debugmem" option only influence output of allocations, but always track
  them in debug enabled builds.
- Added option "no-software" to disable software fallbacks. This is mainly for
  debugging/profiling purpose. It will print out a warning with the operation
  and flags each time a fallback would occur.
- Read DIRECTFB_SESSION variable after reading all files and DFBARGS,
  so only the command line can override the current session.
- Added runtime option "force-slave" to always enter as a slave, waiting for
  the master, if not already there. This feature only works with recent kernel module.

Graphics Core
- Added InvalidateState() at driver level API to notify the driver that
  the current rendering state is no longer valid.

Surface Core
- Added ability to let only one Fusionee write to a surface,
  set via owner field of CoreSurface.
- Don't try to immediately allocate the new video instance when reallocating
  a buffer (unless the policy is CSP_VIDEOONLY). Fixes corruption problems
  in XDirectFB caused by window resize failing.
- Dispatch surface's notifications directly (if local).
  This change fixes an assertion failure that happens in the following case:
  Resize (Downsize) Surface ... and immediatly after ... Blit to Surface.

Layer Core
- Support DLBM_BACKSYSTEM as a (driver) default.

Window Core
- Give the WM a chance to provide its own surface.
  The WM may link a surface to the window in the PreConfigureWindow() call.
- Dispatch window's notifications directly (if local).

Software Rendering
- Added Bop_argb_blend_alphachannel_src_invsrc_Aop_PFI[] as a fast path for blending
  from ARGB with SRCALPHA / INVSRCALPHA. Implemented for RGB16 and RGB32 so far.
- Use cpp templates for 16bpp and 32bpp code.
- Removes duplicated code.
- Implements some missing gfx funcs.
- Fixes missing EXPAND() calls in some acc funcs.
- Fixes blit direction handling in some 16bpp blit funcs.

Utils
- Added some basic update region management (DFBUpdates) with functions for adding
  updates, keeping a maximum number of regions, merging if possible or required.
  First version, IQ 10.

libdirect
- Autodetect clock skew.
- Added direct_list_move_to_front( **list, *link ).
- Added direct_snputs(s,d,n) to set a string with a maximum size including the
  zero termination. This acts like a strncpy(d,s,n), but always terminates the
  string like snprintf(d,n,"%s",s) which is more or less slower.
- If trace support and shared libraries are enabled, for each library to install,
  also generate a file containing the output of "nm -n <that library>".
  That's the command that is used at runtime via popen().
- Now the code first checks if it can fopen() a file with the same name as the one passed
  to "nm -n", but with an "nm-n." prefix. This is both a performance improvement and a nice
  solution for (embedded) targets without 'nm' being available or fast enough.

libdirect (optional part)
- Implemented seekability over RTSP.

libfusion
- Use MADV_REMOVE if possible to give memory back to the system after freeing a block
  in the middle of the heap.
- No more signal handler used, because no more mremap() is done, only ftruncate()
  is called to resize the shared memory heap. The initial mmap() now covers the whole
  address range.
- Initialize the heap info table to serve for the maximum pool size specified
  at creation of the pool. Previously, the initial table served for 4 MB heap.
  If there were more allocations, the heap info table was reallocated at the
  end of the heap, i.e. at 4 MB making it impossible to ever go back below
  the 4 MB heap size. Next barrier was 8 MB, 16 MB ...these are gone.
- The maximum size specified during creation of a pool is now taken as an
  additional size after the heap info table. Previously, it could happen that
  the size was too small to host the fixed sized heap info table.
- Include Fusion ID of allocator and offset within heap in shm allocation debug info.
- Print shared memory leaks on pool shutdown (debug mode and 'debugshm' option).
- Added fusion_reactor_direct(bool) to specify whether local message handlers (reactions)
  should be called directly, which has been the previous behaviour for years...
- Fall back to /dev/shm if no mount point could be determined.
- Added FCEF_NODIRECT which forces execution of the call in the Fusion
  Dispatch thread even if it's the calling process' own call.
- Only call fusion_sync() if the pool that is to be destroyed has objects.
- Fixed fusion_sync() timeout during XDirectFB shutdown.
- Fixed concurrent startup of master and slaves.

Voodoo
- Missing methods added and more implemented.

PNG Image Provider
- Support loading of indexed PNG files directly to LUT8 surface.
- Provide palette of image via GetSurfaceDescription().

FT2 Font
- Added support for LUT2 fonts for using fast antialiased text rendering with indexed to indexed translation.
- Thanks to Vaclav Slavik for fixing loading of mono-only fonts.

Default WM
- Added support for scaled windows.
- Make cursor area backing store surface same format as layer.
- Use DFBUpdates to manage an update queue and do optimizations like taking
  the bounding box instead of multiple smaller regions if the number of pixels
  in the bounding box is not much higher than the total of the smaller ones.
- Even this takes the number of smaller regions into account, because of the
  increasing overhead per region.
- Next to performance, the visual experience is enhanced by coalesced updates.
- Another advantage is that when multiple regions are updated, first it renders
  all regions and then it flips all regions. Previously, each time the flip was
  done immediately for each rendered region.

Radeon Driver
- Implemented StretchBlit, TextureTriangles, Alphablend, Deinterlacing
  for the R300 chipset family, thanks to Timon +timon37 * interia-pl+!!!
- Support color keying for TMU based functions on R300.

Unichrome Driver
- Implemented acceleration for blits involving the AiRGB pixel format.
- DSPF_AiRGB is now supported as a source format for most blits and stretch blits.
- Blits _to_ AiRGB surfaces are also accelerated provided they don't require blending.

Linux Input
- Added Touchpad support!

tslib Input
- New driver, thanks to Shane Volpe!

dfbdump tool
- Added the option "-p" to pause() dfbdump after initialization, e.g.
  to run it as a master and look at the foot print or other things that
  are there before any application specific stuff happens.
- Show allocations in both DirectFB shared memory pools with option "-s".


1.0.0-rc2
---------

API
- Breaking API Freeze but keeping source and binary compatibility!
- All __u8, __s16 etc. types have been changed to u8, s16 etc.
- Compatibility is in place unless DIRECTFB_NO_CRUFT is defined.
- Added DSPF_LUT2 being indexed 2 bit per pixel packed, i.e. four pixel in one byte.

API | IDirectFBSurface
- Added SetIndexTranslation() that sets a translation table used for
  fast indexed to indexed pixel format conversion. Negative or undefined values in the
  table will result in no pixel being written.
- Added DSBLIT_INDEX_TRANSLATION to do fast indexed to indexed translation, this flag
  is mutual exclusive with all others.
- So far only LUT2 to LUT8 is supported, used for fast anti-aliased text rendering
  to indexed format. The translation table contains "-1, 36, 37, 38" for example.
  First entry makes the background transparent and the other three are shaded versions
  of the text color.

Build Options
- Use libpng-config if present. Thanks to Gery <gxkahn-et-gmail.com>!

Runtime Options
- Added "primary-only" to tell applications only about the primary layer, pretending there are no others.
- Fixed "tmpfs" option.
- Fixed "pixelformat" option.
- Don't depend on "debug" option when printing interface leakage at exit time (only debug builds).

Core
- No longer create a new process group in dfb_core_create().
- Don't take certain locks in core shutdown functions if emergency is true.

Layer Core
- In dfb_layer_context_get_primary_region() if increasing the ref count of the
  existing primary region fails, due it being destroyed, wait for a short time
  and try again, probably recreating the region.

Surface Core
- Fixed bug in auto-video surface locking that could return a NULL pointer.

libfusion
- Safely cycle through hash nodes while freeing them.
- Don't print an error if an object revived after it's ref count reached
  zero but got increased again before the destructor is called. That applies
  to the multi application core only. In the single application core the
  destructor is called synchronously.

libdirect
- Use readdir_r() instead of readdir().
- Don't include config.h in direct/types.h. Fix stdbool.h warnings.
- No longer use pthread_kill(KILL) which doesn't only kill the specified thread, use pthread_cancel().
- Let direct_assert() and others try raise(TRAP) first, then killpg(0,TRAP) and pthread_exit().
- At the end of the global signal handler no longer use killpg(0,KILL) but remove all handlers,
  raise(num), abort() and then exit( -num ). But the exit shouldn't be reached.
- Register signal handler with empty instead of full blocking mask and use SA_NODEFER except
  for SIGSEGV. Also no longer use SA_RESTART.
- Use recursive mutexes in trace support if available.

libdirect (optional network stuff)
- Replaced the usage of setitimer()+recv() in net_peek() with a single call to select().
- Fixed username/password parsing.

DGIFF
- DirectFB Glyph Image File Format
- Purpose of DGIFF is to offload as much as possible from runtime, especially during
  application startup when loading the default or system fonts.
- Added a new font module and a tool called mkdgiff to generate .dgiff from .ttf or other.
- mkdgiff uses FreeType2 to load the glyphs of the font and stores them in one or more ready
  to use font cache rows, up to 2047 pixels wide right now.
- The loader creates preallocated surfaces from the mmapped font file. The only copy ever
  made would be when the surface is transfered to video memory for acceleration.
- DGIFF supports different sizes of one face in a single file.

DFIFF
- Build mkdfiff only if PNG support is enabled.

FT2 Font
- Made DFFA_NOCHARMAP work again.
- If Unicode/Latin1 failed, try Symbol Encoding and do some 0xf000 magic.

Mach64
- Disable dithering when doing alpha blended blits. Dithering it is applied
  even when the source pixels are completely transparent. This change makes
  the mouse cursor look sane.

Matrox
- Include <linux/i2c.h> and <linux/i2c-dev.h> now.

SiS315
- Include <linux/sisfb.h> now.
- Build only if this header is found by configure.

Linux Input
- Ignore repeat events for mouse buttons.

FBDev System
- Use other signals than SIGUSR1/SIGUSR2 for vt-switching.

Other fixes
- Plugged mem leak of AttachedWindow struct when DetachEventBuffer() happens
  after the window has been destroyed.
- Fix Bop_a8_set_alphapixel_Aop_yuy2() for big endian.
- Remove/relicense GPL code.


1.0.0-rc1
---------

API
- Added DIEF_FOLLOW to DFBInputEventFlags which indicates that another event
  will follow immediately. In the mouse driver this is used to "link" the x/y
  axis motion events. The window manager no longer sends two motion events (x/0, 0/y)
  for one x/y mouse movement (x and y axis at once). Zig-zag cursor/window movement
  and double event/update rate are gone.
- Moved DirectFBGL header to the proper location. We need the header here since the DirectFBGL
  interface is strongly integrated within DirectFB and we want to support external implementations.
- More Porter/Duff rules (SRC_ATOP,DST_ATOP,ADD,XOR).
- Added DFB_SUSPENDED error meaning "The requested object is suspended!".
- Added 4 bit packed alpha pixel format DSPF_A4, e.g. for fonts.
- Added support for the 18bpp format family.

API | IDirectFBDisplayLayer
- Added SwitchContext() that switches between the shared
  and the exclusive context if present.
- Added SetClipRegions() that, if supported by hardware, sets the clipping regions that are used to to
  enable or disable visibility of parts of the layer. The number of regions is stated in the display layer
  description. The layer will be shown only in these regions or except in these regions.

API | IDirectFBFont
- Added GetStringBreak() to break a text line by line. Thanks to sridewa <sridewa@gmail.com>.
- Added EnumEncodings() enumerating all provided encodings, also see Fonts section below.
- Added FindEncoding() to look up an encoding directly by its name.
- Added SetEncoding() for choosing the encoding for local interface methods and as a default for the surfaces.

API | IDirectFBImageProvider
- Added DIRenderCallbackResult to DIRenderCallback to be able to abort rendering.

API | IDirectFBInputDevice
- Added DetachEventBuffer() to detach an event buffer explicitly.

API | IDirectFBScreen
- Allow connectors to be selected at the encoders without the need to define
  outputs, add slow blanking, thanks to Daniel J Laird <danieljlaird@hotmail.com>.
- Populating screen API a bit more, thanks to Daniel Laird <danieljlaird@hotmail.com>.
- Added GetSize().

API | IDirectFBSurface
- Added ReleaseSource() to release a possibly attached source,
  e.g. after blitting from it only once and from nothing else afterwards.
- Added GetFramebufferOffset() returning the offset within
  the graphics memory, thanks to Stefan Lucke <stefan@lucke.in-berlin.de>.
- Added GetPosition() returning the offset of a sub surface.
- Finally decided to catch horizontal/vertical lines in DrawLine() and optimize them using rectangle filling.
- Added SetEncoding() to choose an encoding for the text routines, will be overwritten by SetFont() which takes
  the default encoding of the new font, also see Fonts section below.

API | IDirectFBVideoProvider
- Removed return value from DVFrameCallback.
- Added SetPlaybackFlags(), SetSpeed() and GetSpeed().
- Added SetVolume() and GetVolume().

API | IDirectFBWindow
- Added DetachEventBuffer() to detach an event buffer explicitly.

Build Options
- Added option --enable-netork to enable/disable building network protocols handlers.

Fonts
- Added support for other encodings than UTF8. Encodings are (or can be) provided
  with each font implementation. This model reduces code sharing slightly, but   
  allows higher efficiency via optimized combination of decoding and translation.
- Every encoding just has a name and an ID, where the name can be chosen freely,
  except for DTEID_UTF8 which is always available and has the name "UTF8".
- Implemented UTF8 and "Latin1" encoding in FT2 font loader. Nice demonstration how
  different encodings can be used, while still having a single glyph cache, which is
  no longer based on character codes, but on their raw indices.
- See ChangeLog from 2006-05-06 for more details.

Graphics Core
- Added DFBResult return value to graphics driver's EngineSync() and WaitSerial()
  to be able to return DFB_TIMEDOUT or other errors. In these cases the core resets
  the accelerator via EngineReset() and takes care of state invalidation etc.
- dfb_gfxcard_sync() and dfb_gfxcard_waitserial() also lease the graphics property,
  i.e. there are no more concurrent calls to the driver, e.g. FillRectangle() along
  with EngineSync().
- Moved clipping from dfb_clip_stretchblit() to gStretchBlit() doing all clipping,
  phase and offset calculations in place, otherwise clipping suffered from rounding
  and off-by-one errors due to going back to integer in between.
- In case of no hardware clipping but rectangle filling, if in DrawRectangle()
  the whole rectangle outline was outside the clipping area, the clipping area
  was drawn in the software fallback code.
- In dfb_surfacemanager_deallocate() make sure no hardware read or write
  access on the buffer is pending before freeing the chunk.
- Added global function pointer __DFB_CoreRegisterHook with __DFB_CoreRegisterHookCtx
  to allow application level layer (and screen) implementations building on top of existing layers.
- New capabilities for setting destination size limit. If the rectangle is
  too big, first try clip, then try again and eventually fall back to software.
- Implemented font cache limit, currently hardcoded to five rows, each row stores a number of glyphs.
  When the maximum number is reached it will reuse the least recently used row, kicking out all glyphs
  that have been on it.
- Before every graphics operation, i.e. in dfb_gfxcard_state_check(),
  clip the state's clipping region to the destination surface dimension.

Input Core
- First and fully working implementation of dead key handling using static
  tables for mapping of dead keys and following symbols to the combined symbol.

Surface Core
- Some changes that decrease system memory usage for surface buffers, especially where graphics memory
  is available.
- Allocate system instance of auto-video buffers on first access, not immediately during creation of the surface.
- Deallocate system memory when buffer is written to in video memory. Reallocate it if the buffer is kicked out
  of video memory.
- Implemented "suspended" surface buffers, temporarily deallocated. No valid instance at all until it's resumed.
- Added dfb_surface_buffer_suspend/resume().
- Added SBF_SUSPENDED.
- Align pitch of system memory buffers to be a multiple of 8 instead 4.
- Add extra 16 bytes at the end of a buffer as a dummy area for optimized
  routines, e.g. to avoid segfaults due to prefetching.

Window Core
- Rewritten cursor handling (software cursor) to use a surface instead of a window.
  The window manager module gets notified about all kinds of updates regarding the cursor.
  All window manager modules use the same code for now, using backing store for the region under
  the cursor. This avoids revealing window content that hasn't been commited via Flip(), yet.
  It should also be faster as it no longer depends on the windows that are covered by the cursor.
- Check if window is destroyed and return DFB_DESTROYED in all functions
  which would have called the WM, because a destroyed window is no longer
  known to the WM and the WM's window data structure is deallocated.

Software Renderer
- Fix unaligned 32 bit accesses in color keying code.
- Allocate the accumulator only if it will be used.
- Check if palettes are equal when blitting indexed formats.

Misc
- Added dfb_rectangle_subtract() to subtract insets from rectangle.
- Added DFB_RECTANGLE_CONTAINS_POINT and DFB_REGION_CONTAINS_POINT macros.
- Added dfb_gfx_copy_to() as an extension of dfb_gfx_copy(). The advantages are
  different x/y offset for source/destination and blitting from back buffer.
  The latter was a must for the backing store based software cursor.

libdirect
- Reworked Direct/Stream to gain more efficiency, added several optional network protocols.
- Added direct_stream_mime() that returns mime description of the stream.
- In addition to DIRECT_FORCE_DEBUG one can use DIRECT_ENABLE_DEBUG now.
- Only duplicate used portion of array in direct_trace_copy_buffer(), set limit from 256 to 200.
- Added BSWAP16 and BSWAP32 macros, direct_base64_encode, direct_base64_decode and direct_md5_sum.
- Due to increasing amount of debug messages the default is "no-debug" now. It makes more sense to
  only enable wanted debug domains by hand, e.g. "debug=core/font". Otherwise, "debug" option still
  works, too.
- Replaced direct_stream_fopen() by direct_stream_fileno().
- Added direct_stream_dup() to increase the stream's reference counter.
- In the stack trace show base address of each file to allow offset calculation 'by hand' within
  dynamically loaded modules, i.e. where ldd doesn't help.

libfusion
- Local 'local reactions' are no longer processed before dispatching further via the kernel device.
  This causes all local reactions within each Fusionee to be called by the Fusion Dispatcher only,
  in chronological order. It's a fundamental change in runtime behaviour which might break some code
  that relies on the synchronous execution of the dispatcher's own local reactions.
- Implemented experimental fork() handling in Fusion. Added FusionForkAction being FFA_CLOSE by default,
  which can be changed to FFA_FORK with a call to fusion_world_set_fork_action() for each Fusionee/World.
- Added "name" parameter to fusion_ref_init() like others already have.
- Return DFB_LOCKED in fusion_ref_up() if EAGAIN is received (ref is zero locked).
- New shared hash table implementation and property support for object.
- Added fusion_skirmish_lock_count() returning the lock counter if held by the caller.
- Added fusion_reactor_destroy() like fusion_reactor_free() but without freeing the shared structure etc.
- No longer (need to) access the shared structure during local message processing in the Fusion dispatcher.

i830 driver
- Fixed overlay destination color keying for 8/15/16 bit primary layer formats, add
  "i8xx_overlay_pipe_b" option, thanks to Stefan Lucke <stefan@lucke.in-berlin.de>.

Matrox driver
- Added field based blitting support.
- Added DSCAPS_SEPARATED support to BES, CRTC2 and SPIC.
- Fixed pixelpitch alignment for YUY2/UYVY.
- PAL-60 support (or at least close enough for Ville's TV).

nVidia driver
- Avoid to set the overlay memory limit, it's already done by the kernel.
- Basic acceleration for ALUT44.
- Disable host-to-video hardware blit for simple blits without format conversion.
- Added nvEngineReset().

Radeon driver
- R300: Support FillTriangle() and DSDRAW_BLEND.
- RV250: Dropped YUV->RGB support.
- Enable VC_32BIT_SWAP on big-endian machines.
- Removed (erroneously set) flag VF_RADEON_MODE in r200DoDrawRectangle3D().
- Added patch to radeonfb fixing support for R300 chipsets (it also adds new devices).
- Use different settings for R300 and non-R300 when setting MC_FB_LOCATION.
- Added the possibility to use the graphics layer as an OSD. It works exactly the same way
  as in the unichrome driver: Set the video layer level to -1 and enable DLOP_ALPHACHANNEL
  on the graphics layer.
- Applied patch by Christer Palm <christer.palm@pulsen.se>: fixes word swapping on PPC.

Unichrome driver
- Disable hardware cursor in VIA_REG_CURSOR_MODE. Thanks to Michel van
  Noorloos <michel.van.noorloos@sioux.nl>.
- Added PCI ID for CN700.

DynaPro input driver
- New 3M DynaPro Touchscreen driver, thanks to Pär Degerman <parde@ikp.liu.se>!

Keyboard input driver
- Added support for dead keys.

Linux Input input driver
- Added support for dead keys.

DFIFF image provider
- New DirectFB Fast Image File Format with a fast image provider module and a tool to
  convert images from PNG to DFIFF.

GIF image provider
- Dropped support for GIF87 (can't be animated).

GIF video provider
- New animated GIF video provider.

V4L video provider
- Fixed planar data copy.
- Added more pixelformats for v4l2.

FBDev System
- Clean up error handling in system_initialize() and fix bug with shared memory (de)allocation.
- Treat fbdev format 8/16,8/8,8/0,0/0 as ARGB when ARGB was requested
  (that because framebuffer drivers tend to ignore the alpha channel).
- Don't touch console blanking when using graphics-vt.

SDL System
- Better keymap emulation.
- Fake video modes by reading fb.modes, just like the fbdev backend.

directfb-csource tool
- Added option --rgbformat which in contrast to the --format option only is effective if the image
  doesn't require an alpha channel. That's useful e.g. with RGB16 for opaque and ARGB for blended images,
  when the primary format will be RGB16. So far directfb-csource either used ARGB/RGB32 automatically, or
  it always used RGB16 or whatever you specified via --format.
- Make structs and pixel data const, helps with use in shared libs.

fx tool
- Very basic program to emulate/illustrate the pixel pipeline, blitting flags etc. No 100% guarantee that
  itself is correct, but in the end it will serve as a verification for software/hardware driver.


0.9.25
------

API
- Added DSPF_AYUV, a 32bit packed AYUV format for graphics,
  being the counterpart of ARGB in the YUV color space.

API | IDirectFBSurface
- Added GetClip().

API | IDirectFBDisplayLayer
- Allow empty flags in SetColorAdjustment().
- Allow to control background and cursor in exclusive cooperative level.

API | IDirectFBEventBuffer
- Added DFBEventBufferStats containing various counters for the event queue,
  e.g. total number of events, number of window events, motion events etc.
  These reflect the current content of the queue, i.e. dequeueing decrements.
- Added EnableStatistics() to enable/disable collection.
- Added GetStatistics() to query current statistics.

API | IDirectFBVideoProvider
- Added SendEvent() to send a window or input event
  to video providers that supports interactivity (DVCAPS_INTERACTIVE).
  For cursor events, coordinates must be in the destination rectangle space.
- Added GetStreamDescription() to query informations about the stream.
- Added IDirectFBVideoProvider::GetStatus() to get the status of the playback;
  this method replaces the previous end-of-playback detection method using GetPos().

Runtime Options
- Added config option unichrome-revision=<rev> to manually set the hardware
  revision number for the unichrome driver.  This cannot be determined
  automatically unless the process runs as root.
- Added option [no-]dma (disabled by default).
- Added option fatal-level=<level>:
  Abort on NONE, ASSERT (default) or ASSUME (incl. assert)

Graphics Core
- Added FlushReadCache() to the graphics driver API.
  Used in the matrox driver to flush the direct access read cache.
- Pass CoreDFB to graphics drivers as a new argument to driver_init_driver().
- Added dfb_gfxcard_surface_{enter/leave}(), called when a software access to
  video memory begins/finishes.
- Fix negative line width handling in fill_tri().

Surface Core
- Added support for surfaces stored in auxiliray memory (PCI/AGP/PCIE).
- Added support for Surface Managers with a variable number of heaps.
- In dfb_surfacemanager_allocate() do dfb_gfxcard_sync() only if hardware has
  read from the buffer about to be kicked out. The call to
  dfb_surfacemanager_assure_system() should already take care of the hardware
  write case.
- Change dfb_surfacemanager_assure_system() to call dfb_gfxcard_wait_serial()
  instead of dfb_gfxcard_sync() since we're only interested whether the
  hardware has written to the buffer.
- Use a separate shared memory pool for surface buffer data.

Input Core
- Don't toggle lock states repeatedly when holding a lock key.
- Added FusionCall to each input device for maintenance via master,
  driver calls etc. using new CoreInputDeviceCommand enum.
- Added dfb_input_device_reload_keymap() implemented via the new call passing
  the CIDC_RELOAD_KEYMAP command. The master will reload the whole keymap via
  driver API.
- Added a new tool called "dfbinput" which features keymap dump/reload so far.
- DIKI_ALTGR is gone. The key right to the space bar is the right alt key.
  No matter which map is loaded, the identifiers are just named hardware keys,
  where you really specify the physical entity on your keyboard. In this case
  it's always DIKI_ALT_R, no matter if it's mapped to DIKS_ALTGR or DIKS_ALT.
  On standard keyboards it's also always the same hardware key code, no matter
  if you by a German keyboard with AltGr or a U.$. one with Alt.
- Changed the input core logic for keeping track of modifiers. If DIKI_ALT_R
  is pressed, also look at the symbol to decide if DIMM_ALT or DIMM_ALTGR is
  to be added/removed.
- Now application developers don't need to check for both DIKI_ALTGR and
  DIKI_ALT_R if they want to check for the key right next to the space bar :)

Software Rasterizer
- Almost completed support for Planar YUV formats (lacks colorkeying).
- Fixed Cb/Cr offset computation (height*pitch/4 is different from
  height/2*pitch/2 if height is odd).

libdirect
- Made debug/release versions binary compatible, being able to link
  dynamically against both or even run in the same session.
- Added D_OOM() message if thread structure can't be allocated.
- Added D_MAGIC_SET_ONLY which is D_MAGIC_SET without assuming that the magic
  hasn't been set already. Useful to avoid compiler warnings when acting on
  uninitialized structures on the stack.
- Removed dependency on -D_GNU_SOURCE when including <direct/util.h>:
- Made direct_util_recursive_pthread_mutex_init() non-static-inline.
- Removed DIRECT_UTIL_RECURSIVE_PTHREAD_MUTEX_INITIALIZER and replaced all
  of its occurences by PTHREAD_MUTEX_INITIALIZER. These didn't need to be
  recursive. If there's a recursive mutex required, you can still use the
  utility function direct_util_recursive_pthread_mutex_init().
- Removed -D_GNU_SOURCE from direct.pc and directfb-config.
- Added DIRECT_SIGNAL_ANY as a replacement for the magic -1.
- If the debug domain being registered contains a slash, but didn't exactly match an entry
  in directfbrc, check to see if the domain is descended from an entry in directfbrc,
  e.g. 'ui/field/messages' matches 'ui' or 'ui/field'.
- New D_DEBUG_ENTER and D_DEBUG_EXIT to ease debug messages for tracing function calls.
- Added UDP support to DirectStream.
- Added symbol resolving support for static binaries.
- Replaced the enum based bool definition by a typedef to __u8.
- Defined false and true via macros like stdbool.h does.
- Allow NULL argument in direct_free().
- Thanks to Andy Stewart for fixing the hash table reallocation which didn't
  check for collisions during reinsertion.

libfusion
- Using the new Fusion Kernel API 2.0
- Parallel Fusion Worlds in one process via extended API
- Multiple Shared Memory Pools in one world via new API
- No race condition between (potential master) processes starting in parallel
- Fusion APIs have been extended to support different worlds and pools.
- Added fusion_reactor_sized_dispatch() to dispatch a message to any attached
  reaction with a given size. Instead of using the size defined by the reactor,
  the caller can specify the size of the data.
- Added a parameter to fusion_enter() - FusionEnterRole - to specify either
  FER_ANY, FER_MASTER or FER_SLAVE. If the world can't be entered playing the
  specified role, an error message is printed and DFB_UNSUPPORTED is returned.
- Added FusionCallExecFlags parameter to fusion_call_execute().
- Allow pending reactions (in local dispatcher queue) to be executed
  after the shared reactor part has been destroyed. This fixes for example
  occasionally missing DWET_DESTROYED events.

libvoodoo
- Avoid tons of warnings by using D_MAGIC_SET_ONLY instead of D_MAGIC_SET.
- More Requester/Dispatcher method implementations.

Radeon driver
- New unified Radeon driver for R100/R200/R300+.
- Supports smooth page flipping.
- Supports seconday head output.
- Supports overlay on secondary head.
- Improved overlay RGB rendering.
- Improved R100/R200 3d functions performance.
- Fixed 2d/3d engines synchronization.
- Added support for surfaces stored in AGP memory.
- Use the POINT primitive to fill rectangles with size=1 (i.e. to draw points) [~60% faster].
- Speed up FillRectangle, Blit and StretchBlit by using the RECTANGLE_LIST primitive
  instead of QUAD_LIST [~15% faster]. :)
- Reset MC_FB_LOCATION to avoid problems with X (thanks to Michel Danzer).
- Check for integrated GPUs.
- When AGP support is enabled, turn off pci gart and turn on bus mastering.
- Added acceleration for AYUV, but color conversion is not supported because
  radeon supports AVYU instead of AYUV.

Matrox Driver
- Support for DSDRAW_SRC_PREMULTIPLY.
- Limited support for DSBLIT_SRC_PREMULTIPLY.
- PCI device ID cleanup.
- Fixed Mystique vs. Mystique 220 detection.
- Allow DSPF_ARGB surface for BES.
- Finally remove DLOP_FLICKER_FILTERING on CRTC2.
- Don't reinitialize the whole TV encoder when changing field parity.
- Disable BES if the destination region is completely off-screen.
- Allow surface height up to 2048 with DLOP_DEINTERLACING (BES).
- Limit surface width with DLOP_DEINTERLACING to guarantee BESPITCH < 4096.
- Disable vertical filtering when surface width > 1024 (BES).
- G200 BES doesn't support color adjustments.
- Don't touch hardware in SetRegion() if nothing changed (SPIC).
- Separated spic_calc_buffer() out of spic_set_buffer().
- Fixes for G100 with SDRAM.
- Fixed YUY2/UYVY and texture LUT state handling.
- Fixed color keying mask, G100 doesn't have TEXCTL2 so TEXTRANS
  must be used to disable color keying.
- Completely untested PPC support.
- Misc. cleanups.

Mach64 driver
- Added support for DSDRAW_SRC_PREMULTIPLY and DSBLIT_SRC_PREMULTCOLOR.
- Don't advertise DFXL_STRETCHBLIT when it hasn't been checked.
- Fixed scaler/texture color key for chips < 3D Rage Pro.
- Avoid chip lockups with destination color keying.
- Fixed surface size limits (Overlay).
- Fixed color keying on 264VT2 (Overlay).
- Check the chip type in ovSetColorAdjustment().
- Enabled SCALE_Y2R_TEMP.
- Minor cleanup.

nVidia driver
- Added support for AGP
- Added support for DMA using AGP or Framebuffer memory.
- Finally fixed the "random-crashes-when-blitting-from-system-memory" problem.

Unichrome driver
- Fix hardware revision number detection and allow override via new config
  option unichrome-revision=<rev>.  The revision number can only be
  auto-detected if the process runs as root.
- Added simple script to determine revision number for addition to
  directfbrc.
- Added support for DLOP_FIELD_PARITY.  For this to work, the kernel
  framebuffer must support an extension of the WAITFORVSYNC ioctl that
  allows waiting for the top or bottom field.
- YV12, I420, YUY2 and AiRGB simple blits, AiRGB 2D drawing
- Disable broken SetColorAdjustment for the overlay and remove color keying diagnostic.
- Round to nearest when positioning up-scaled YV12/I420 video to reduce error.
- Fix YV12/I420 video layer corruption on revision 0x11 hardware. Also
  fix bug setting SUBP_CONTROL_STRIDE register in uc_spic_set_buffer.  Sadly
  subpicture layer still doesn't work.
- ARGB4444 as source and destination pixel format for all supported operations.
- Overhaul of LEVELS, OPACITY and primary ALPHACHANNEL features which were
  previously only partially implemented and did not work together.
- The video overlay and the primary layer now both support the OPACITY option
  and either can be on top.  The order is determined by the 'level' assigned
  to the video layer.  The primary also supports an alpha channel which is
  useful when the video layer is positioned behind.
- The old DFB_CLE266_UNDERLAY environment variable switch has been removed.

FBDev System module
- Added AGP support.

SDL System module
- Decoupled screen updates from Fusion Dispatcher.
  Updates are handled in a separate thread; they're accumulated rather than
  queued in case an update is already pending.
- Use the flag FCEF_ONEWAY to not wait for the call being executed,
  otherwise a deadlock could occur. The return value is meaningless anyways.
  Queued updates will be merged on the receiving side (master) to avoid a
  lag and improve performance.

Gunze Input driver
- Added Gunze Touchscreen driver, thanks to Nathanael D. Noblet <nathanael@gnat.ca>!

PenMount Input driver
- Added input driver for PenMount 9509 serial touchscreen.

PS/2 Input driver
- Applied patch from Christian Krause <krause.chr@gmail.com> that allows
  usage of the option "mouse-source" without "mouse-gpm-source".

dfbdump tool
- Show "1k" again for '0 < bytes < 1024'.

dfbsummon tool
- Avoid division by zero if no video memory is available.

fusion_bench tool
- Do the shmalloc benchmark once with debug and once without.


0.9.24
------

- Added missing source (header) files to their appropriate Makefile.am, mostly from voodoo.
- Don't use fusion_reactor_free() too early in case of an error in init_devices().
  Thanks to "Jakub Bogusz <qboosh@pld-linux.org>" for this and other patches.
- IDirectFBVideoProvider::GetPos() returns DFB_EOF to notify end-of-playback.
  After stream has reached the end, the next call to PlayTo()
  restarts playback from the beginning.
- No need for <linux/wm97xx.h> and <linux/sisfb.h> anymore.
- Build all graphics drivers without checking for FB_ACCEL_* in <linux/fb.h>,
  because we have a fallback for each of those ids.
- Don't build cle266 by default as it's obsolete because of the unichrome driver.


0.9.23
------

Authors
- Added "Claudio Ciccani <klan82@cheapnet.it>" to main authors,
  welcome number five and thanks for your appreciated work :-)

API
- Added IDirectFBSurface::DisableAcceleration( DFBAccelerationMask mask ).
- Added DSBLIT_SRC_PREMULTCOLOR which modulates the source color with the
  color alpha value only.
- Replaced IDirectFB::GetCardCapabilities() by GetDeviceDescription()
  and DFBCardCapabilities by DFBGraphicsDeviceDescription which contains
  additional information like device and driver name, version etc.
- Added more enums to the autogenerated directfb_strings.h.
- Added errorcode DFB_EOF.
- Added DSBLIT_XOR.
- Added universal event class for custom usage with variable size. New structure DFBUniversalEvent
  has a 'clazz' and a 'size' member. The clazz is always DFEC_UNIVERSAL and the size is at least
  sizeof(DFBUniversalEvent). There are no other members, but any amount of additional data may
  follow according to the specified size. Best usage would be to derive from the struct.
- Added new input event flag DIEF_REPEAT indicating a repeated key or button press.
- Support fractional font sizes in DFBFontDescription.
- Added IDirectFBDataBuffer::CreateVideoProvider().
- Added IDirectFBDataBuffer::Finish(): used to notify a streaming databuffer that the end-of-file has been reached.

Runtime Options
- Fixed pixelformat=NV21 option.
- Added option 'busid' to specify the graphics card bus id (unused if sysfs support is enabled).

Build Options
- Allow predefinition of FREETYPE_CFLAGS and FREETYPE_LIBS outside of configure.
- New configure option "--with-sysroot=DIR" lets you prepend a path to the runtime library/module paths.

Graphics Core
- Added support for system to video memory blits in (semi-)hardware.
- Some 24bit big endian fixes, thanks to Mark Salter <msalter@redhat.com>!
- Added dfb_gfxcard_invalidate_state() which sets the state pointer to NULL
  and therefore forces a full SetState() before the next operation is executed.
- If the destination has premultiplied alpha do real Porter/Duff SRC_OVER
  composition for glyphs.
- Fixed build_clipped_rectangle_outlines() to handle special cases
  where width and/or height is/are one or two.
- Take into consideration DSDRAW_DST_COLORKEY and DSDRAW_XOR when drawing strings.
- Added RGB332 and LUT8 support to dfb_surface_dump().
- Fixed artifacts produced by clipped triangles, thanks to Damian Kowalewski <damian.kowalewski@mail.mcgill.ca>!

Layer & Screen Core
- Fixed missing updates to the hardware state under some circumstances.
- It's allowed to create and use windows in exclusive mode, showing the own windows only, of course.
- Changed EnableCursor() to be allowed in exclusive mode, too.
- Added dfb_screens_hook_primary() using it in some drivers instead of dfb_screen_register_primary().
- During flip using blitting, wait for pending writes to the back buffer before issuing
  the blit command from back to front buffer to avoid lags caused by too much queued commands.

Windowing Core
- Support windows with premultiplied alpha by checking if their surface has DSCAPS_PREMULTIPLIED.
- Support premultiplied cursor shapes.
- If during window creation the pixel format for windows with an alpha channel is
  unspecified, don't always take DSPF_ARGB, but the layer's format if it has alpha.

Software Rasterizer
- Fixed inverted YV12 colors.
- Changed Bop_a8_set_alphapixel_Aop_argb() to be a fast path for real SRC_OVER
  DrawString() that uses DSBLIT_SRC_PREMULTIPLY and DSBLIT_BLEND_ALPHACHANNEL
  with SrcBlend = ONE and DstBlend = INVSRCALPHA. Other formats will follow.
- Fixed DSDRAW_SRC_PREMULTIPLY if used without blending.
- Implemented DSBLIT_SRC_PREMULTCOLOR.
- Added optimization for drawing blended with Src = ONE, Dst = ZERO.
- Improved Dacc_YCbCr_to_RGB_MMX.
- Fixed A8 to A8 font rendering.
- Added some functions optimized for 64bit architectures.
- Added duff's device for 8 bit color keying.

Image Loading
- Premultiply image data when loading into premultiplied alpha surfaces.
- Limit number of weights to 64 in x and y direction for down scaling. Without this
  limitation down scaling to 1x1 or similar could take minutes on embedded platforms.
- If JFIF or Exif header detection failed, try detecting by filename extension.
- For PNGs with alpha don't always suggest DSPF_ARGB, but the primary layer format if it has alpha.

Font Loading
- If the font format is ARGB, use premultiplied font surfaces.
- Use "signed char" explicitly to fix kerning in FT2 loader on PPC, thanks to Uli <Uli.H@triple-dragon.org>!
- Support fractional font sizes in FT2 loader.
- Fixed segmentation fault when loading OpenType fonts with FT2 loader.

libdirect
- A lot of code is using D_DEBUG_AT, D_ASSERT, D_MAGIC_ASSERT etc. now.
- Added D_MAGIC_ASSUME.
- Added D_FLAGS_ASSERT(flags,f) being D_ASSERT( D_FLAGS_ARE_IN(flags,f) ).
- Protect against bogus siginfo_t pointer by checking if it's smaller than 0x100.
- Some changes to support KallistiOS.
- Enable X86 memcpy()s on AMD64.
- Added a generic memcpy() for 64bit Architectures.
- MMX and SSE support on AMD64.
- Fixed a bug in direct_list_remove()! If the last item is removed while other items exist,
  the first item's "prev" pointer was not updated (pointing to the last element).
- Added low level logging abstraction. Added runtime options "log-file = <name>"
  and "log-udp = <host>:<port>" for configuring the default log.
- Added direct_thread_set_name() for setting the name of threads that haven't been created by direct_thread_create().
- Added DirectStream, a wrapper for accessing files locally and through network (http, ftp and generic tcp).

libfusion
- Added fusion_object_get() that gets a pool and an object id and returns
  the appropriate object with a local reference added to it. If the object
  is not found DFB_IDNOTFOUND is returned, or any abnormal other error from
  locking or referencing.
- Added FusionObjectID to replace plain int usage.
- Fixed an evil dead lock that only occured by moving a window with one of my new mice,
  having superior precision generating lots of events, thanks for spotting this bug, Logitech :)
- Fixed a rare crash in single application mode, thanks to Mark Adams <mark147m@gmail.com>!

i830
- Fixed multi application support, but it only works with root privileges so far.
- Fixes for coexistence with intelfb and for color adjustments,
  thanks to Sylvain Meyer <sylvain.meyer@worldonline.fr>!

i810
- Implemented destination color keying for overlay.
- Merged back multi app fixed from i830 driver.

Mach64
- Cleaned up register definitions and added all known register names.
- Improved chip type detection.
- Made LCD register access work on 3D Rage LT.
- Big overlay code update including support for DLOP_DEINTERLACING.
- Scaler/3D acceleration now works on older GT chips. Tested on Rage II+ and IIC.
- ARGB4444 support for GT chips.
- Other minor fixes.

Matrox
- Always use alphamode = ALPHACHANNEL.
- Implemented DSBLIT_SRC_PREMULTCOLOR using the Color ALU. If it's already
  used for colorizing, simply modulate the color values with the alpha,
  otherwise overwrite them.

nVidia
- Rewrite of the driver, following the structure of other drivers, e.g. Matrox.
- Overlay and blitting supports Deinterlacing.
- WaitForSync no longer burns the CPU (but actually requires a 2.6 kernel).
- Decide texture buffer size according to available video memory.
- StretchBlit() on A8,LUT8,RGB332 (>= NV20).
- FillRectangle(),DrawRectangle(),FillTriangle(),DrawLine(),Blit() on LUT8,RGB332 and A8.
- StretchBlit(),TextureTriangles(),[DrawString()],Alphablend and Colorize from A8 (>= NV10).
- Alphachannel blend for ARGB1555.
- Added support for system to video memory blits.
- Improved TextureTriangles() performance.
- NV30 supports StretchBlit(), blit with format conversion, alphablend and colorize.
- Fixed NV30 initialization.
- Made the driver work with the new nvidiafb framebuffer driver.
- Made deinterlacing work properly with TextureTriangles().

R200
- New driver for ATI Radeon R200 based cards by Claudio Ciccani <klan82@cheapnet.it>!
- Accelerates FillRectangle,FillTriangle,DrawRectangle,DrawLine, Blit,StretchBlit,TextureTriangles.
- Supported Drawing Flags: Blend, Xor.
- Supported Blitting Flags: Alphablend, Coloralpha, Colorize, SrcPremultColor, SrcColorKey, Deinterlace.
- Supported Formats: A8, RGB332, RGB16, RGB32, ARGB, ARGB1555, ARGB2554, ARGB4444, AiRGB, LUT8, ALUT44, YUY2, UYVY, YV12, I420.
- Overlay supports YUY2, UYVY, YV12, I420, ARGB1555, RGB16, RGB32 and ARGB,
  color adjustments, DLOP_DEINTERLACE, DLOP_DST_COLORKEY and DLOP_OPACITY.

SiS 315
- Compatibility stuff for newer fb driver versions.

Unichrome
- Added missing flag DLCAPS_LEVEL, thanks to Stefan Lucke <stefan@lucke.in-berlin.de>!

Linux Input
- Fixed AltGr.
- Added translation of KEY_FASTFORWARD, KEY_SOUND, KEY_QUESTION, KEY_EMAIL and KEY_CANCEL.
- Better touchscreen/smartpad detection, thanks to Stefan Lucke <stefan@lucke.in-berlin.de>!
- Don't abort if checking for LEDs fails.

MuTouch Input
- Improved packet reading loop, thanks to Ivan Daniluk <ivan@shvydko.ua>!

PS/2 Mouse Input
- Added GPM support. The mouse-protocol option specifies the protocol for
  the mice or the repeater (supported values: PS/2 and IMPS/2).

FBDev System
- When restoring the video mode during shutdown, set xoffset and yoffset to 0.
- Keep the original display offset if no mode has been set, e.g. just running "dfbinfo".
- Added ARGB4444 support.

SDL System
- Hide the SDL cursor so DirectFB one shows.

VNC Server System
- Preliminary system module using libvncserver.

X11 System
- Preliminary native X11 support, thanks to Martin Luetken <nitram@lutken.dk>!

Unique WM
- Started work on the decoration framework, still not usable.

dfbdump
- Show 'premultiplied' surface capability.

directfb-config
- Added options "--system=" and "--wm=" for static linking.
- Option "-s" additionally shows the shared memory file size.


0.9.22
------

API
- Added DLCAPS_ALPHA_RAMP: Alpha values for formats with one or two alpha
  bits can be chosen, i.e. using ARGB1555 or ARGB2554 the user can define
  the meaning of the two or four possibilities. In short, this feature
  provides a lookup table for the alpha of these formats.
- Added DLCAPS_PREMULTIPLIED indicating that a display layer
  can display surfaces with premultiplied alpha.
- Added DSCAPS_PREMULTIPLIED indicating that the surface has
  premultiplied alpha data.
- Added DLCONF_SURFACE_CAPS and field 'surface_caps' to DFBDisplayLayerConfig
  to specify any combination of the flags: DSCAPS_INTERLACED, DSCAPS_SEPARATED
  or DSCAPS_PREMULTIPLIED.
- Added DLCAPS_SCREEN_POSITION and DLCAPS_SCREEN_SIZE.
  These are set if DLCAPS_SCREEN_LOCATION is set and vice versa.
  Unscalable layers just have DLCAPS_SCREEN_POSITION.
- Added DSECAPS_BRIGHTNESS, DSECAPS_CONTRAST, DSECAPS_HUE, DSECAPS_SATURATION.
- Added DSECONF_ADJUSTMENT to DFBScreenEncoderConfigFlags.
- Added 'DFBColorAdjustment adjustment' to DFBScreenEncoderConfig.

API | IDirectFB
- Cleaned up the way CreateSurface() determines the primary surface
  pixelformat and size. Previously the behavior varied depending on
  cooperative level and the force-desktop option. New behavior:
  1. DSDESC_{WIDTH,HEIGTH,PIXELFORMAT}
  2. SetVideoMode()
  3. mode= and pixelformat= options
  4. current layer config

API | IDirectFBDisplayLayer
- Added IDirectFBDisplayLayer::SetScreenPosition() which
  sets the position of the layer on the screen specified in pixels.
- Added IDirectFBDisplayLayer::SetScreenRectangle() which
  sets the position and size of the layer on the screen specified in pixels.

API | IDirectFBSurface
- Added IDirectFBSurface::SetAlphaRamp(a0,a1,a2,a3): Either all four values
  or the first and the last one are used, depending on the format.
  Default values are: 0x00, 0x55, 0xaa, 0xff.
- Added IDirectFBSurface::FillRectangles().

Build Options
- Added option "--with-inputdrivers=..." for selecting drivers to build,
  thanks to Marcel Siegert <mws@twisted-brains.org>!

Runtime Options
- Replaced "argb-font" and "a1-font" with a more flexible "font-format" option.
- Make "graphics-vt" the default.
- Added "h3600-device", keeping the default of "/dev/ts".
- Added "mut-device" which must be used to enable the driver.

Pixel Formats
- Added DSPF_ARGB2554.
- Added DSPF_ARGB4444.
- Added DSPF_NV21 (like NV12, but with swapped CbCr).

Software Driver
- Added support for YUY2/UYVY->RGB conversion (with src colorkeying).
- Force alignment to even coordinates if blitting YUY2 or UYVY.
- Added NV12/NV21/NV16 blitting and rectangle filling.
- Made YV12<->I420 blitting possible.
- Fixed YUV422 handling on big-endian architectures.
- Optimized Bop_yuy2_Sto_Aop() and Bop_uyvy_Sto_Aop(),
  these are used for StretchBlit() using YUY2 or UYVY.

Display Layer Core
- Keep a list of all realized (added) regions to remove them during
  emergency shutdown, e.g. signal received or missing deinit of master app.
- Added CLRCF_SURFACE_CAPS and field 'surface_caps' to CoreLayerRegionConfig
  in the display layer driver API.
- HW Windows created with DWDESC_SURFACE_CAPS and DSCAPS_PREMULTIPLIED
  in 'desc.surface_caps' are created as premultiplied layer regions.
- Store normalized and pixel based destination area in a layer context.
- Added CoreLayerLayoutMode which defines incorporation of
  configuration based size changes and destination area values.
- Activate the most recent context instead of the primary (shared) context
  when the current context is removed.
- Restore color adjustment when (re)activating a context.

Windowing Core
- Create layer regions for hw windows in single buffered mode, unless
  explicitly configured using DSCAPS_DOUBLE/TRIPLE or DWCAPS_DOUBLEBUFFER.
  This is a preliminary solution, because by default a window surface should
  require a Flip() to make changes visible.
- Activate DWOP_ALPHACHANNEL for other non indexed alpha formats, too.
- Implemented hw window resizing.

libfusion
- Take the largest one, if multiple tmpfs are found.

Proxy Interface Implementations (Voodoo)
- Implemented BatchBlit() in IDirectFBSurface_Requester and _Dispatcher.

Fixes (excerpt)
- Fixed a video memory leak in dfb_surface_reconfig() that happened if a  
  surface with multiple buffers is configured to have less, e.g. switching
  a layer from DLBM_TRIPLE/BACKVIDEO to DLBM_FRONTONLY.

dfblayer
- Show the layer level if supported.

Intel
- Added i830 driver (overlay support only) for Servision Ltd.
  (http://www.servision.net/)
- Note, due to unsolved conflicts regarding ring buffer usage
  you have to load the "intelfb" module with the parameter "accel=0".

Matrox
- Added DSPF_ARGB4444 support.
- Added DSPF_NV21 support.
- Added support for G400 dual head add-on (disabled by default).
- Alpha ramp support for CRTC2.
- Added support for progressive chroma on CRTC2.
- Added support for progressive half-height sub-picture.
- Dropped I420/YV12 support for old chips.
- NV12/NV21 Blit() for >= G200.
- NV12/NV21 StretchBlit() for >= G400.
- Accelerated I420/YV12/NV12/NV21 FillRectangle().
- YUY2/UYVY FillRectangle(), Blit() and StretchBlit().

NSC
- Perform additional check (returned phys. fb base) before considering the
  fb driver to be the one that it's expected to be.

nVidia
- Experimental alpha blending support for Riva TNT.
- Fixed NV20 and GeForce3 Xbox support, Blit() should work on the latter now.
- Added experimental support for NV30 chipsets.
- Found the way to make NVScaledImageFromMemory (used for StretchBlit,
  Alphablend, Color Conversion) work on NV20 chipset: it was another rivafb
  bug, therefore the rivafb-nv20fix-* patch is absolutely required.
- Added basic support for drawing with alphablend on NV20.
- Great performance improvements: it's possible to move a translucent window
  at 32bpp while the cpu stays idle.
- No longer return a surface stored in system memory for YUY2 and UYVY;
  return directly the video surface instead.
- Added FillRectangle() and Blit() (without effects) for YUY2 and UYVY.
- Added an hack to do StretchBlit() on YUV422 (result is almost acceptable).

Joystick Input
- Do not dispatch events if unknown or JS_EVENT_INIT are received.
  Fixes crash upon initialization under some conditions.

DreamBox Remote
- Added dreamboxremote driver mainly based on dbox2remote,
  thanks to Marcel Siegert <mws@twisted-brains.org>!

Unique WM Module
- Lots of changes that have been lying around for more than two months,
  but this module is still not fully usable, yet.


0.9.21
------

API
- Added DFBLocation which is like DFBRectangle but has normalized coordinates.
- Added macros to compare rectangles, regions, locations, colors etc.
- Added diagonal cursor keys.
- Added more types to the auto generated "directfb_strings.h".
- Added DFBVertex containing transformed x, y, z, w, s and t coordinates.
- Added DSCAPS_DOUBLE and changed DSCAPS_FLIPPING to be a
  combination of DSCAPS_DOUBLE and DSCAPS_TRIPLE.
- Added "const" to some parameters.
- Added DFXL_DRAWSTRING for IDirectFBSurface::GetAccelerationMask().
- Added prefix "ret_" to all output parameters.
- Added DFBSpan containing x and width of a span.
- When specified use the pixelformat of the surface description
  to create a windowed primary surface.
- Added DFB_VERSIONMISMATCH and DFB_NOSHAREDMEMORY error codes.
- Added DFBInsets specifying a distance from each
  edge of a rectangle: left, top, right, bottom.
- Added DLCAPS_SOURCES which indicates that the layer supports multiple
  sources that can be selected, e.g. from frame buffer (surface) or from
  hardware decoders (using buffers outside of the frame buffer).
- Added DFBDisplayLayerSourceID with pre-defined DLSID_SURFACE.
- Added number of supported sources to DFBDisplayLayerDescription.
- Added DFBDisplayLayerSourceDescription containing the ID and a name.
- Added DLCONF_SOURCE along with a field in DFBDisplayLayerConfig to
  select the source to be used.

API | IDirectFB
- Added IDirectFB::EnumScreens() and IDirectFB::GetScreen().

API | IDirectFBEventBuffer
- Added IDirectFBEventBuffer::CreateFileDescriptor() returning a file
  descriptor that can be read from, including support for select().

API | IDirectFBDisplayLayer
- Added IDirectFBDisplayLayer::GetScreen().
- Moved IDirectFBDisplayLayer::SetScreenPowerMode()
  to IDirectFBScreen, called SetPowerMode().
- Added IDirectFBDisplayLayer::SetSourceRectangle() for source cropping etc.
- Added IDirectFBDisplayLayer::GetSourceDescriptions().

API | IDirectFBScreen
- New interface IDirectFBScreen for mixer, encoder and output settings.
- An output is connected to an encoder which is connected to a mixer which
  combines selected display layers.
- Added a lot of types for description and configuration of these components.
  (see the API Reference Manual for more details)

API | IDirectFBSurface
- Added IDirectFBSurface::TextureTriangles() using a surface as the texture,
  a pointer to a DFBVertex array, an optional index array, the array size and
  the DFBTriangleFormation which can be DTTF_LIST, DTTF_STRIP or DTTF_FAN.
- Added IDirectFBSurface::BatchBlit() which increases pixel throughput  
  of many small blits with same source and destination, e.g. custom font
  rendering like GTK+-DirectFB does.
- Preliminary depth buffer support using DSCAPS_DEPTH to allocate and use it,
  currently hard coded to 16 bit, only useful for TextureTriangles().
- Added DSFLIP_PIPELINE for advanced synchronization with the accelerator,
  currently implemented for Flip() on window surfaces. This feature is for
  accelerators with a command buffer that can store more graphics operations
  than required to render one frame.
- Added IDirectFBSurface::FillSpans() which is passed a DFBSpan array.

Runtime Options
- Added "force-desktop" to run fullscreen applications in the background.
- Added "a1-font" to force usage of monochrome fonts (FreeType2).
- Added "linux-input-ir-only" which tells the linux input driver
  to ignore all non-IR Linux Input devices.
- Added "wm=<wm>" to select the window manager module to use.
- Added "[no-]trace".
- Users can enable/disable debug output separately,
  e.g. using "no-debug,debug=direct,no-debug=direct/memcpy".
- Added "vt-switching" which is enabled by default.
- Added "no-vt" which disables usage of VT code completely.
- Added "no-decorations" to disable automatic window decorations
  of the "UniQuE" window manager implementation.

Build Options
- Allow "--enable-static" and "--enable-trace" at the same time.
- Added "--enable-zlib" that activates gzipped screen shots etc.
- Added "--enable-voodoo", default is no.
- V4L2 has to be enabled explicitly via "--enable-video4linux2".
- Detect cygwin, default to static builds and don't require libdl.
- In static build mode, add an ".o" version of the ".a" module file.
  Applications can link statically against the ".o" files without having
  to specify an extra linker option for each module, e.g. "-Wl,-udirectfb_sdl".
- Applied patch from "Oskar Liljeblad <oskar@osk.mine.nu>"   
  which adds the configure option "--disable-sonypi-jogdial".
- Added "--disable-wm97xx" to disable WM97xx driver.
- With "--disable-gettid" one can enforce usage of getpid(),
  e.g. on broken systems where gettid() simply segfaults,
  though the system call is present in <linux/unistd.h>.
- Added "--enable-unique", disabled by default.

Pixel Formats
- Added DSPF_AiRGB, i.e. DSPF_ARGB with inverted alpha channel.
- Added DSPF_A1, e.g. for monochrome fonts.
- Removed DSPF_RGB15 in the flavor of DSPF_ARGB1555.
- Added DFB_COLOR_BITS_PER_PIXEL(format), DFB_ALPHA_BITS_PER_PIXEL(format)
  and DFB_PIXELFORMAT_INV_ALPHA(format).
- Added DFB_PIXELFORMAT_ALIGNMENT(format) which is non-zero if alignment
  is required to do byte aligned access, e.g. 7 for DSPF_A1.
- Added DSPF_NV12 (planar YUV).
  (8 bit Y plane followed by one 16 bit quarter size CbCr [15:0] plane)
- Added DSPF_NV16 (planar YUV).
  (8 bit Y plane followed by one 16 bit half width CbCr [15:0] plane)

System
- Use gettid() instead of getpid() if available.

Graphics Core
- Minimize state changes during text drawing.
- Drivers can choose between byte/pixel pitch alignment, or even use both.
- Added convenience macros and inline functions for setting state members.
- Added CoreGraphicsSerial storing the "serial" of a certain graphics operation.
- Added GetSerial() and WaitSerial() to the graphics driver API:
  GetSerial() returns the serial of the last queued graphics operation.
  WaitSerial() waits until the operation with the specified serial is finished.
- Store the serial of the most recent accelerated graphics operation that has
  been queued for writing to a surface buffer.
- dfb_layer_region_flip_update() is no longer waiting for an idle accelerator,
  if the buffer that is becoming the front has or had a write operation queued.
  Instead it waits exactly for the last operation that is or was about to write
  to this buffer. If WaitSerial() is not supported by the driver and/or hardware,
  the fallback, of course, is to wait for each and every operation to finish.
- Wait for only the last write operation queued for a buffer,
  if the software needs to access it.
- Speed up tiled blitting by clipping in advance.
- Implemented software clipping for hardware accelerated DrawRectangle().
- Use hardware accelerated FillRectangle() if DrawRectangle() is not accelerated.
- Removed the surface listeners attached by dfb_state_set_destination() and  
  dfb_state_set_source().
- Added dfb_state_update() which does the work of the removed listeners
  if direct_serial_update() returns true. Updating the source is optional.
  Only surfaces set via dfb_state_set_*() are handled.
- Use dfb_state_update() in dfb_gfxcard_state_acquire() and gAcquire().
- Added parameter "write_front" to dfb_surface_flip_buffers() which is useful  
  for triple buffering. If true, the new back buffer will be the front buffer.
  Drivers should detect if the current front buffer is not being shown already,
  in which case the idle buffer might be still shown and should not be written.
- Added "__u32 dfb_color_to_aycbcr( const DFBColor *color )".

Display Layer Core
- Refactored display layer core.
- Added contexts along with regions allocated within them.
- Drivers are only aware of regions. Usually a driver supports one region
  per layer. Hardware windows are implemented via hardware regions.

Input Core
- Added dfb_input_add_global() and dfb_input_set_global() to register global
  reactions at run time, e.g. from another library or module in which case the   
  static reaction table can't be initialized with the address of those functions.
- Cleaned up input core code, e.g. by replacing the "inlined" singly linked list
  code by using a "DirectLink" and the "direct_list_*()" functions, or by adding
  usage of D_MAGIC_ASSERT() etc.

Windowing Core
- Pressing <Meta>-<Ctrl> + Left/Right Click generates 3rd/4th button event.
- Switch to color keyed cursor if shape doesn't have alpha or if translucent
  windows are disabled.
- Changed <Meta>-'S' to raise the lowest window, e.g. to revert a <Meta>-'A'.
- Added <Meta>-<Escape> to switch from fullscreen mode to the desktop.
  (currently not advisable if a flipping fullscreen app is still rendering)
- Modularized window management for different implementations on desktop
  and embedded systems.
- Added new experimental window manager "UniQuE" with window decorations.
- Added a CoreWindowConfig containing position, size, opacity, stacking,
  options, events, color key and opaque region.

Software Driver
- Added DSBLIT_DEINTERLACE support to gBlit.
- Implemented missing blending modes.
- Implemented lots of missing format specific code.
- Implemented stretchblitting for YUV.
- Fix a8 font rendering for argb1555, i.e. remove alpha pits around glyphs.
- Replaced gDrawLine() by gFillRectangle() in rectangle outline drawing code.
- Allocate accumulators dynamically.
- Lots of optimizations and fixes.

Debugging Support
- Major speed up by using thread specific data instead of gettid().
- Use popen("nm -n ...") to load symbols of any module on demand.
- Show static symbols in stack traces.
- Produce gdb like stack dumps (output formatting).
- Added thread names to debug output, stack traces etc.
- Added interface instance tracking in debug mode, showing remaining
  instances at exit time (like it's done for allocated memory).
- Added debug domains which can be enabled/disabled separately.
- Added "<Meta>-<BackSpace>" debugging shortcut for
  dumping the stack of each thread of the master process.
- Align debug output of domains.
- Indent debug output if trace support is enabled
  by using direct_trace_debug_indent() which sets the flag TF_DEBUG for the
  current frame and returns the current debug message indention level by
  examining the stack, counting any upper frames that produced debug output.
- Added tons of assertions and assumption, mostly to new code.
- Added support for A8,YUY2 and UYVY surfaces in dfb_surface_dump().

Fixes (excerpt)
- No need to call SetOpacity() before RequestFocus() for input only windows.
- Don't allow GetWindow() on the cursor window.
- Don't wait for Fusion Dispatch Thread during emergency shutdown.
- Fixed missing MMX initialization in slaves, only the master used MMX before.
- Use RTLD_NOW to detect undefined symbols before the module is used at all.

libdirect
- Migrated base functionality (threads, signals, interfaces, debugging,
  lists, modules etc.) into a separate library that can even be used by apps.
- Added direct_clock_set_start() that is called by Fusion's initialization
  to synchronize time stamps of debug messages.
- Added a minimalistic hash table implementation for usage with IDs as keys.
- Added DirectResult which is the DFBResult outside of DirectFB.
- Added message macro D_UNIMPLEMENTED which prints a warning once.
- Added a name argument to direct_thread_create(),
  printed during creation and termination of threads.
- Added direct_thread_self(), direct_thread_get_name(thread)
  and direct_thread_self_name().
- Added DIRECT_UTIL_RECURSIVE_PTHREAD_MUTEX_INITIALIZER.
- Added direct_list_append() and changed the list structure to have
  the first element's 'prev' pointing to the last element of the list.
- Added DirectThreadInitHandler which can be installed/uninstalled using   
  direct_thread_add_init_handler() and direct_thread_remove_init_handler().
  The registered init handler function is called at the beginning of new threads.
- Allow per file debug mode forcing via definition of DIRECT_FORCE_DEBUG.
- Added D_DERROR(ret,message) which acts like D_PERROR(message), but takes
  a DirectResult (DFBResult) instead of using errno.
- Added D_ARRAY_SIZE(array) to calculate the size of an array.
- Added D_FORMAT_PRINTF(n) to check the format of (debug) messages.
- Added flag manipulation macros D_FLAGS_*.
- Added D_CONST_FUNC to declare const functions.
- Added DirectSerial providing a 64 bit serial number with functions
  for initialization, increasing, copying and updating.
- Added D_DEBUG_ENABLED which is defined depending on three other macros.
  It's defined to be 1, if the D_DEBUG* macros produce code. Useful for
  embracing code that is just required for the debugging output.
- Added D_OOM() which prints the warning "out of memory" and gives
  DFB_NOSYSTEMMEMORY if used as a (return) value.
- Added D_OOSHM() which is the same as D_OOM() in single app build.
  Only in multi app build it prints the warning "out of shared memory"
  and gives DFB_NOSHAREDMEMORY if used as a (return) value.
- Renamed direct_list_contains() to direct_list_contains_element_EXPENSIVE()
  to ensure that developers know that they shouldn't use it in non-debug code.
- Added direct_list_count_elements_EXPENSIVE().
- Added direct_util_count_bits(), slow version,
  but at least optimized for bit sets with lower bits set only.

libfusion
- Migrated Fusion into a separate library to be used without DirectFB,
  e.g. using FusionSound without initializing DirectFB.
- Added fusion_object_globalize() doing the often used combination of
  fusion_object_link() and fusion_object_unref(), i.e. increasing the global
  reference counter and decreasing the local reference counter.
- Removed FusionResult using DirectResult instead.
- Use new Fusion API for entering the world (including version checking).
- Added fusion_ref_inherit() using the new ioctl FUSION_REF_INHERIT.
- Added fusion_object_inherit() to inherit the local reference count
  from another object of any type.
- Added "docs/ReferenceMaps.txt" which explains references
  and visualizes different cases of inter object referencing.
- Heavily cleaned up code of FusionReactor and added lots of debug messages and
  comments. You should add "no-debug = fusion/reactor" to disable these loads
  of debug messages, while still showing other messages if "debug" is used.
- Cleaned up FusionObject code and debug messages.
- Added some assertions and assumptions to the shared memory code.
- Added a parameter to fusion_skirmish_init() and fusion_reactor_init() to  
  set the name of the skirmish or reactor using the ioctl FUSION_ENTRY_SET_INFO.
- Don't create a skirmish for each reactor's global reactions, but use a single
  skirmish for all reactors which is created during Fusion's initialization.
- Added fusion_reactor_set_lock() to use another skirmish for the global
  reactions of the reactor.
- Added fusion_object_set_lock() to set the skirmish for the global reactions
  of the object's reactor, while default is the skirmish used to lock the pool.

libvoodoo
- Added network transparency to DirectFB, called Voodoo.
  (see the related news entry on the web page for more details)

Reference Manual
- Parse preceding comments within enums.
- Fixed hyper link generation for "const" parameters.
- Improved layout of types page.
- Added macro definitions to types page.
- Added callback definitions to types page.
- Automatically generate links if comments include function names,
  e.g.: "... IDirectFB::GetDisplayLayer() ...".
- Show index of types and definitions on the index page.

directfb-config
- Added "--fusionsound" and "--voodoo" to generate static linking
  parameters for FusionSound and Voodoo respectively.
- Use new ".o" versions for all modules (static linking).

directfb-csource
- Support for combining multiple images into one surface.

dfbdump
- Dump layer contexts.
- Option "-s" shows a list of all shared memory allocations (debug mode only).

dfbinfo
- Show all mixers, encoders and outputs.
- Show display layer sources.

dfblayer
- Added option "-L, --level <level>" to change the level of a layer.

dfbscreen
- Added configuration tool for mixers, encoders and outputs.

fusion_bench
- Replaced getpid() reference benchmark by an flock(2) benchmark.
- Use recursive mutexes in threaded mutex benchmark.
- Each benchmark runs for one second now.
- Added shmalloc/shfree benchmark.

FreeType2 Font Loader
- Added DSPF_A1 (monochrome font) support.
- Speed up kerning cache.

Video4Linux Video Provider
- Added deinterlacing support for grabbing mode,
  i.e. added dfb_surface_set_field() calls to grabbing thread and added   
  second frame callback to the loop (to make 50Hz out of the 25Hz of v4l).
- Use CSLF_FORCE, fixes failing PlayTo() on a fresh surface.
- Some other fixes.

FBDev System
- Print error message if the given mode (via "mode=" option) is not supported.

OSX System
- Added native OSX support without using SDL.

Matrox
- Backend Scaler (BES) fixes and improvements.
- SGRAM auto-detection via /proc/bus/pci.
- Added sysfs support to i2c detection code. Now it works on 2.6 kernels.
- Use better constants for black/white level calculation on G450/G550 CRTC2.
- Implemented TextureTriangles().
- Added texture LUT support (G200) and some other 8bpp improvements.
- Added support for DSPF_NV12 (BES).
- Cleanups and optimizations.

VIA CLE266
- Added video underlay mode.
- Added DLOP_DEINTERLACING support to video layer.
- Use fbdev to map registers, obsoletes cle266vgaio.
  Code still works with cle266vgaio for vesafb users...
- Implemented DSBLIT_DEINTERLACE.
- Implemented TextureTriangles().
- Fixed the broken fonts problem.
- Thanks to Bryce Nichols <bryce@bnichols.org> for reducing the hardware
  rounding errors in 16 bit mode by rendering the upper left and lower right
  triangle pair instead of the upper right and lower left.
- Other major improvements and fixes.

VIA Unichrome
- New driver based on the CLE266 driver.
- Support for multiple north bridges.
- DVD Sub Picture Layer support.
- Destination Color Keying for the Video Layer.

nVidia
- Impressive improvements by Claudio Ciccani <klan82@cheapnet.it>.
- Added support for ARGB1555, RGB32 and ARGB.
- Added support for blit with conversion (ARGB1555,RGB32,ARGB to all).
- Added support for YUY2 and UYVY on Primary Layer.
- Added support for adjusting Brightness, Contrast, Saturation and Hue.
- Destination Color Keying for Video Layer.
- Implemented TextureTriangles().
- Implemented StretchBlit().
- Implemented alpha blended blitting and drawing.
- Added experimental support for Colorizing.
- Added sysfs support.
- Added a fast Flip() function (not using ioctl).
- Experimental WaitForSync() support.
- Fixed ram amount detection on Xbox (thanks to Oliver Schwartz).
- Giant cleanup and rewrite of the objects configuration routines:
  we use runtime configuration instead of fixed tables now.
- Cleanups and fixes.

SiS 315
- Added by Andreas Oberritter <obi@tuxbox.org>.
- Rectangle Filling/Drawing, Line Drawing in 8, 16 and 32 bit.
- Blitting (with Source Color Keying) in 8 and 16 bit.
- Destination Color Keying, Clipping.

ATI Mach64
- Added by Ville Syrjala <syrjala@sci.fi>.
- Drawing and (Stretch)Blitting with keying, blending, conversion etc.
- Video Overlay with source and destination color keying.
- SGRAM block write support.
- Added texture engine blitting code using power of two textures.

ATI Radeon
- Video Overlay support by Vadim Catana <vcatana@registru.md>.
- State handling fixes.

NSC Geode
- Improvements by Ed Millard <emillard@direcway.com>.
- Blitting on GX1, though it is constrained by hardware to only blit
  surfaces whose width matches the stride of the frame buffer.

LibMpeg3 Video Provider
- Added FusionSound support for audio playback.
- Moved to DirectFB-extra package.

Linux Input
- Take Linux Input key code as hardware keycode.
- Use EVIOCGRAB ioctl to grab the device.
- Primary mouse is also identified as a mouse now.
- Added keyboard LED support.
- Copied keymap support from the keyboard driver.
- Support more axes.

LIRC Input
- Emulate keyboard like key repeat behaviour using select() with timeout
  and a counter to drop the first few repeats.

PS/2 Mouse Input
- Added /dev/misc/psaux.
- Just use one of "/dev/psaux" and "/dev/misc/psaux" if both are available.
- Don't try them at all if uname() yields release "2.5.*" or "2.6.*".

Serial Mouse Input
- GPM repeater support by Micha Nelissen <micha@neli.hopto.org>.

ELO Touchscreen Input
- Added by Brandon M. Reynolds <breynolds@comtime.com>.

SDL Input
- Wheel event support by Tom Bridgwater <genuss@gmail.com>.


0.9.20
------

- Added CLE266 driver by Andreas Robinson <andro134 at student.liu.se>, thanks!
  The driver supports alpha blending, color keying, video overlay etc.
- Added WM97XX Touchscreen driver,
  thanks to Liam Girdwood <liam.girdwood@wolfsonmicro.com>!
- Added DWOP_SHAPED which enables shaped input handling, windows with an alpha
  channel or a color key are ignored if the pixel under the cursor is completely
  transparent. Thanks to Monge Maurizio <monge@sns.it>!
- Added IDirectFBEventBuffer::WakeUp() causing any WaitForEvent() or
  WaitForEventWithTimeout() to return with DFB_INTERRUPTED.
- Added new display layer buffer mode DLBM_WINDOWS where the layer itself
  has no surface, but the hardware is aware of each window and displays
  the window stack. Added DLCAPS_WINDOWS, too.
- Added <Meta>-<Print> hot key to make a screenshot of the focused window
  including its alpha channel if present. Creates a ppm (RGB) and a pgm (alpha).
  Use "pnmtopng -alpha foo.pgm foo.ppm > foo.png" to combine them.
- Added IDirectFBSurface::Dump() similar to <Meta>-<Print>, see above.
- Added "memcpy = <method>" option to save a lot of startup time.
  "time dfbinfo" went from 0.080 secs to < 0.010 secs on my machine.
- New environment variable "DFBARGS" is now parsed like the "--dfb:" parameter.
- Added Fusion Kernel Device patch for Linux 2.6.
- Added a patch to set proper clocks on a G400 (great performance boost).
- Updated vmwarefb for VMware Workstation 4.0 with resolution and depth switch
  at run time, can disable acceleration at run time. Also fixed palette mode.
- Video4Linux 2 support by Michael Hunold <hunold@convergence.de>, thanks!
- Send valid button events in MuTouch driver,
  thanks to Tim Wright <tim.wright@iosystems.co.uk>.
- Added support for color keyed PNGs (palette converted to RGB with color key).
- Enable key repeat in SDL input driver.
- Fixed segfault in slave processes when no graphics driver is loaded.
- Signal handler now displays the faulting address in case of SIGSEGV.
- Added configure option "--enable-trace" activating stack trace dumps in the
  signal handler. Uses "-finstrument-functions" and therefor only includes
  functions of DirectFB unless you compile your code with that option, too.
- Optimized window stack updates by Maurizio Monge <monge@sns.it>.
- Optimized auto-video surface handling, speeding up Create/Clear a lot.
- Software driver optimizations for LUT8 (e.g. colorkeyed blitting).
- Switching single/multi between builds doesn't require "make clean" anymore.
- Improved output of dfbdump (multi app resource monitor).
- Important bug fix in state handling (multi app only).
- Enhanced stability and bug fixes.


0.9.19
------

- Initial version of a Radeon DirectFB driver featuring solid drawing/filling
  and simple blitting with or without key by Michel Dänzer <michel@daenzer.net>.
- Added VT switching support which has to be enabled via option "vt-switching".
  It's pretty well working already, though there are some minor issues left.
- Added support for multiple multi application worlds with new option
  "session=<num>" selecting the multi application world being joined or created.
  VT switching between multiple DirectFB sessions rocks!
- Added option "primary-layer=<id>" to swap the primary with the specified one,
  this way all applications can be started on the second head (Matrox).
- Added "dfblayer", a display layer configuration tool (for multi app).
- Added IDirectFB::GetInterface() to load interface modules like "IFusionSound".
- Added time stamp to DFBWindowEvent.
- Quitting the master (first multi app process) sends SIGTERM to all slaves
  and waits for them to quit (with a timeout).
- Core systems (currently FBDev and SDL) are dynamically loaded as modules,
  which prevents DirectFB from being linked against SDL if support is enabled.
- Added window manager key 'E' to focus the window under the mouse cursor.
- Moved all global variables of the software driver to a new struct resulting
  in a major increase of primitive throughput, e.g. FillRectangle(1x1) by 16%.
- Enhanced tmpfs detection and added option "tmpfs=<dir>" to set it explicitly.
- Enhanced locking and safety in v4l video provider.
- Improved graphics primitive throughput up to 100% by saving locks.
- Added shared memory allocation tracking like for local memory.
- Modules and drivers are now binary compatible with single/multi app library.
- No more bone collector threads (3/master), almost instant object destruction.
- Other bug fixes and cleanups.


0.9.18
------

- National Semiconductors Geode driver by Sarma Kolluru <Sarma.Kolluru@nsc.com>.
  Great thanks to NSC for their support!!!
- nVidia Overlay support by Oliver Schwartz <Oliver.Schwartz@gmx.de>, currently
  hard coded to XBox. For plain nVidia graphics adapter you need to change line
  618ff of nvidia_overlay.c (uncomment line 618, comment out line 620).
- Added multi application support to SDL backend.
- Added triple buffering for display layers.
- Added DPMS support via IDirectFBDisplayLayer::SetScreenPowerMode().
- Added IDirectFB::GetClipboardTimeStamp().
- Added optional time stamp return value to IDirectFB::SetClipboardData().
- Added DFB_KEY_IS_ASCII for your convenience.
- Split DSFLIP_WAITFORSYNC into DSFLIP_WAIT and DSFLIP_ONSYNC.
- Added DSPF_ALUT44, a new pixel format having 4 bits of alpha and 4 bits
  being an index to a color lookup table.
- Added DIEF_GLOBAL indicating that the event was received without focus.
- Added IDirectFBWindow::SetOpaqueRegion() which excludes one rectangle of
  the window from alpha blending, e.g. for blended borders around fast opaque
  content. This is especially useful if the content has no valid alpha values.
- Added DWOP_OPAQUE_REGION which enables the opaque region.
- Made all unsigned width, height in the API signed.
- Made text drawing honor DSDRAW_BLEND flag to render translucent text.
- Added Intel i810 driver from Tony Daplas < adaplas at users.sourceforge.net >.
- New Fusion synchronous RPC mechanism speeds up fbdev layer flipping by slaves.
  Benchmark shows that RPC flips take as long as three non-RPC flips.
- Non global input event buffers now also get events if any window of the
  application is focused.
- The cursor is no longer enabled in DirectFBCreate(), but automatically when
  the first window is created unless the cursor was enabled/disabled before.
  Option "no-cursor" now forces the cursor to be disabled forever.
- Implemented more software driver routines for DSPF_LUT8.
- Always blit from top to bottom if source and destination buffers differ
  in the software driver.
- Fixed state handling and other bugs in the ATI driver.
- Significantly improved speed of DrawString() with matrox driver,
  other fixes and improvements to the matrox driver.
- Multi application core fixes and improvements.
- Improved graphics card locking for coexistence with DRI drivers.
- Improved video memory management.
- Improved matroxfb-vsync-irq and matroxfb-32mb patch.
- Added Matrox TV output cable type selection.
- Added README describing Matrox TV-out functionality.
- Fixed DSCAPS_SEPARATED with planar formats in software driver.
- Fixed tiled layer background mode.
- Fixed bug which resulted in black screens with some framebuffer drivers.
- Fixed segfault in MPEG2 I-Frame image provider by avoiding alloca.
- Nicer debug output (show time in seconds with three digits after the comma).
- Many bug fixes, gcc-3.3 fixes, build cleanups, optimizations, updated patches.


0.9.17
------

- Added input driver for Microtouch serial touchscreens.
- Added input device name and vendor to DFBInputDeviceDescription.
- Added clipboard functionality via IDirectFB::Set/GetClipboardData()
  including mime type. This is an intermediate solution that will be replaced.
- Added new tool "dfbinfo" which currently enumerates input devices and layers.
- Added IDirectFBDisplayLayer::SetFieldParity(), thanks to Ville.
- Added cooperative level restrictions to many display layer functions.
- Readded DSPF_RGB15 (= DSPF_ARGB1555).
- Graphics drivers are now able to return false in graphics functions to
  trigger a 'late' software fallback. Useful if blitting direction can't be set.
- It is finally possible to specify which gfxdrivers should be built.
        ./configure --with-gfxdrivers=<list>
- Fix "could not adjust heap offset message" if the primary layer surface
  consumes the whole video memory (thanks to Ville Syrjala).
- Fix for planar formats and other fixes by Ville Syrjala <syrjala@sci.fi>.
- Fixed "directfb-config" for static linking.
- Fixed destination color keying for blended drawing in software driver.
- Fixed blitting within one buffer with NeoMagic (scrolling errors).
- Reject YUV for fbdev layer, thanks to Jiri Svoboda <Jiri.Svoboda@seznam.cz>.
- Many bug fixes, code cleanups, comments and assertions added etc.


0.9.16
------

- Added IDirectFBWindow::GrabKey() and UngrabKey().
- Added IDirectFBWindow::SetColorKeyIndex().
- Added IDirectFBWindow::SetCursorShape().
- Added IDirectFBDisplayLayer::WaitForSync(), thanks to Ville Syrjala.
- Made IDirectFBWindow::SetColorKey() lookup the index if the format is indexed.
- Removed DSPF_RGB15 in favor of DSPF_ARGB1555, not completely tested yet.
- Added DFB_COLOR_EQUAL macro to compare two DFBColor.
- Added <Meta>-P shortcut to enable the cursor manually.
- Added new multi app core shortcut Ctrl-Alt-Break which sends a SIGKILL to
  fullscreen applications, useful if a fullscreen app hangs.
- Added optimized memcpy routines for PPC (disabled in default build).
- New automatic grabbing mechanism for fullscreen applications running windowed.
- Added options for statically linking applications with selected modules
  to directfb-config.
- DirectColor visual support by Antonino Daplas <adaplas@pol.net>.
- Color adjustment support on primary layer (via gamma ramp in direct color
  mode) by Antonino Daplas <adaplas@pol.net>.
- Fixed implementation of window stacking classes.
- Fixed segfault with default font provider (non-FT2).
- Some essiential fixes of outstanding multi app bugs related to layers.
- Only detach slave processes from their terminal if it's really necessary.
  Framebuffer ioctls are executed by the master only via fast RPC mechanism.
- Avoid short single frame flicker when starting fullscreen apps by
  temporarily switching to KD_GRAPHICS mode.
- New configure option "--disable-text" which disables all init, debug and
  error messages and saves about ~20k binary size (tested on i386).
- Other minor bug fixes and improvements.


0.9.15
------

- IDirectFB::CreateEventBuffer() no longer attaches input devices and doesn't
  take input capabilities. It just creates an empty event buffer.
- Added IDirectFB::CreateInputEventBuffer() which implements both the 0.9.14
  and pre 0.9.14 behaviour of CreateEventBuffer().
- Added DFBBoolean (with DFB_TRUE and DFB_FALSE).
- DFBWindowEvent fields cx, cy, buttons, locks and modifiers are always valid.
- Added implicit key grabbing while a key is held down in a window.
  Fixes interoparability ugliness between XDirectFB and DFBTerm (e.g. Ctrl-D).
- Great improvement of performance and stability of the multi application core
  via new Fusion Kernel Device. SysV IPC usage completely dropped.
- Added Fusion benchmark application (no graphics, just for testing).
- Added desktop background configuration tool for multi app sessions.
- Implemented additional config file loading for each application.
  E.g. running ".../foo" loads "/etc/directfbrc.foo" and "~/.directfbrc.foo".
- Option 'no-hardware' now only disables acceleration, but driver is loaded
  and additional layers can still be used.
- Options 'mode=' and 'pixelformat=' are now always fully supported.
  Fullscreen applications forced to run windowed (with 'force-windowed' option)
  will have a window with the size and format specified.
- Fixed fatal bug in FreeType2 font loader that made many apps look wrong.
- Fixed off-by-one bug in image loading code. Fixes color keyed blits in df_dok.
- Some other bug fixes and optimizations.


0.9.14
------

- Added IDirectFB::CreatePalette().
- Added IDirectFBSurface::SetPalette().
- Added IDirectFBPalette::GetCapabilities().
- Added IDirectFBPalette::CreateCopy().
- Added IDirectFBSurface::SetSrcColorKeyIndex() and SetDstColorKeyIndex().
- Added experimental blitting flag DSBLIT_DEINTERLACE which is implemented
  only in the Matrox driver for now.
- Added DFDESC_FIXEDADVANCE forcing proportional fonts to be fixed width.
- Added LUT8 and RGB332 acceleration to NeoMagic driver.
- Added Meta (or Windows) key to wm hack (moving window etc.).
- Added MPEG2 I-Frame image provider derived from mpeg2decode (mpeg.org).
- Added driver for ucb1x00 based touchscreens.
- Added dfbdump, a DirectFB debugging tool.
- Renamed DSCAPS_SEPERATED to DSCAPS_SEPARATED.
- Started abstraction of the "core system" featuring the "fbdev" system like
  before and a new experimental "sdl" system. Yepp, DirectFB running on SDL.
  Use "--dfb:system=sdl" to run applications under X.
- Made the code compile on a variety of BSD flavours.
- Enabled support for RGB332 by default.
- Implemented YUV rectangle filling support for planar and non-planar
  formats in software driver (Ville Syrjala <syrjala@sci.fi>).
- Added gfxdriver for CyberPro 5xxx, a card found mainly in settop-boxes.
- Matrox second head support via additional layers.
  New option "matrox-crtc2" to activate this (Ville Syrjala <syrjala@sci.fi>).
- Updated matrox vsync irq patch to support the second head.
- Planar YUV blitting support in Matrox driver (Ville Syrjala <syrjala@sci.fi>)
- Fixed nVidia driver for big endian hosts.
- The window stack and video mode are now restored even if a fullscreen
  application simply exits or gets killed by any signal (multi app core).
- Improved multi application core stability via optional kernel device.
- Some bug fixes, especially (de/re)initialization, multi app.
- Added a directfb.spec file (Till Adam <till@adam-lilienthal.de>).


0.9.13
------

- Added new interface IDirectFBDataBuffer with three implementations
  (File, Memory and Stream).
- Made image providers use the new IDirectFBDataBuffer.
- Added DFBDisplayLayerTypeFlags for a basic layer classification.
- Added DFBDisplayLayerDescription (changes DFBDisplayLayerCallback).
- Added (yet unimplemented) IDirectFBImageProvider::SetRenderCallback().
- Added input_only windows (windows w/o a surface).
- Added support for interlaced surfaces with seperate field buffers to
  all drawing and blitting functions.
- Added new drawing flag DSDRAW_XOR.
- Added support for color lookup tables. Added new surface type DSPF_LUT8
  and IDirectFBSurface::GetPalette() and IDirectFBSurface::SetPalette().
- Added DSDESC_PALETTE to IDirectFBSurfaceDescription.
- Added DSCAPS_STATIC_ALLOC to DFBSurfaceCapabilities.
- Added DWDESC_SURFACE_CAPS to DFBWindowDescriptionFlags.
- Added DWOP_ALPHACHANNEL to DFBWindowOptions.
- Added IDirectFBSurface::SetColorIndex() for indexed pixel formats.
- Added pre/demultiplication to drawing functions.
- Added IDirectFBDisplayLayer::GetWindow().
- Added input driver for linux input driver (/dev/input/eventX).
- Improved resource management with automatic cleanup (multi app core).
- Cleaned up vertical retrace handling.
- Added DFFA_NOCHARMAP to DFBFontAttributes to allow to access glyphs by
  their raw indices.
- Improved V4L video provider, added support for grabbing and planar YUV. Thanks
  to Ville Syrjala <syrjala@sci.fi> and Mike Pieper <mike@pieper-family.de>.
- Fixed color key handling in GIF provider.
- Improvements to the layer driver API.
- Renamed DLCAPS_INTERLACED_VIDEO to DLCAPS_DEINTERLACING.
- Renamed DLOP_INTERLACED_VIDEO to DLOP_DEINTERLACING.
- Enabled acceleration for the second head of a dual head Matrox card.
- Updated Matrox vsync IRQ patch.
- Improved S3 Savage drivers, thanks to Alex Song <alexsong@comports.com>.
- Added directfb-csource, a C code generator for inline images.
- Lots of bug-fixes, multi app core improvements.


0.9.12
------

- Added IDirectFBSurface::DrawGlyph().
- Added IDirectFBFont::GetKerning().
- Added IDirectFBFont::GetGlyphExtents().
- Added experimental blitting flags DSBLIT_SRC_PREMULTIPLY,
  DSBLIT_DST_PREMULTIPLY and DSBLIT_DEMULTIPLY.
- Added dfb_utf8_prev_char() and fixed dfb_utf8_next_char().
- Added a mask of currently pressed buttons to input and window events.
- Added structs DFBPoint and DFBDimension.
- Added DIDTF_VIRTUAL for virtual input devices.
- Added DSFT_BOTTOM to DFBSurfaceTextFlags.
- Added DFB_NUM_PIXELFORMATS macro.
- Give font providers control over pixel format and blending function.
- Define DFBKeyIdentifierNames in directfb_keynames.h.
- Some smaller fixes to the keyboard mapping.
- Support all keysymbols in the lirc input driver.
- Implemented planar YUV blitting in software driver.
- Optimizations in the software driver.
- Fixed blitting and drawing to ARGB in matrox driver.
- Implemented missing BES flipping in matrox driver.
- Lots of bug-fixes.


0.9.11
------

- Added IDirectFBSurface::Clear().
- Added IDirectFBWindow::EnableEvents() and DisableEvents().
- Added IDirectFBWindow::SetStackingClass().
- Added IDirectFBDisplayLayer::GetLevel() and SetLevel()
- Added IDirectFBInputDevice::GetKeymapEntry() (see below).
- Redone keyboard handling. Each key now has a unique key_id which is mapped
  to a Unicode-compatible key_symbol using the keymap provided by the driver.
- Use kernel keymapping table in keyboard driver.
- Added kernel patch for VMware SVGA frame buffer.
- Added kernel patch for S3 Savage frame buffer (experimental).
- Added S3 Savage driver (experimental).
- The Print key can now be used to dump screenshots in PPM format.
- Left and right modifiers have seperate key identifiers now.
- Introduced kerning cache in FT2 font provider.
- Added module probing to FT2 font provider.
- Speed up text rendering by using a special state.
- Allow to change the buffermode of layers.
- Support buffermode changes for additional layers.
- Fixed A8 font blitting bug in Matrox driver.
- Install directfb headers in a directfb subdirectory.
- Install and look for modules in versioned subdirectory.
- Fixed vsync polling when MDA emulation is active.
- Cleaned up config options (directfbrc and command-line options).
- New option "videoram-limit=<amount-in-kb>".
- New option "dont-catch" to disable signal handlers.
- Added directfbrc(5) man-page.
- Made shared memory handling thread-safe (multi-application core).
- Optimizations in software driver.
- Lots of bug-fixes.


0.9.10
------

- Added options "mode=<width>x<height>" and "depth=<bpp>".
- Added SonyPI Jogdial input driver acting as a third axis and button.
- Added a destination rectangle to IDirectFBImageProvider::RenderTo().
- Added IDirectFBEventBuffer::HasEvent().
- Added IDirectFBDisplayLayer::SetCursorAcceleration().
- Added IDirectFBWindow::PutAtop and PutBelow for restacking windows relatively.
- Added destination colorkeying for display layers (like Xv does).
- Added IDirectFBWindow::SetOptions() and GetOptions().
- Added color keying option for windows (e.g. for shaped windows).
- Added window options to disable moving, resizing, stacking and destruction by
  wm hack. Added an option to turn a window into a passive output only window.
- Added brightness control to neomagic video overlay (by Martin Mueller).
- Added tmpfs mount point detection by Sebastian Klemke <packet@convergence.de>.
- The shared memory area is now reinitialized during startup if it already
  existed, but with no DirectFB apps running. Other multi app core fixes.
- Added more cleanup code, less IPC resource leakage after shutdown.
- Bit depths of fb.modes entries are ignored now when looking for a requested
  mode. However, the default bit depth is the one of the first entry.
- Improved RGB332 rendering using precalculated lookup tables with 4/8 entries.
- Greatly optimized 16Bit StretchBlit in generic driver doubling performance
  on PowerPC systems (others than Intel/PowerPC not tested).
- Windows can now be resized and destroyed via wm hack (CapsLock shortcuts).
- Window stack compositing optimizations.
- Simplified and cleaned up internal layer driver API.
- Major code cleanups in windowing and layer core.
- Fixed NeoMagic driver, that was broken in 0.9.9.
- Fixed doubled and interlaced video modes.
- Enhanced reference manual including an introduction to IDirectFB.
- Many, many bug/stability fixes. More code commented. Bigger TODO file ;)


0.9.9
-----

- Added DSPF_I420 and DSPF_YV12, two planar YUV formats.
- Added ATI Overlay support for all four YUV formats.
- Added NeoMagic YUV Overlay support.
- Added static linking support. Minor changes to driver and interface modules.
- There's a general IDirectFBEventBuffer now that can be connected to
  input devices and windows. Added DFBEvent union that can contain
  any specific event class.
- Added DFBUserEvent that can be used by developers (user of the library).
- Added IDirectFBEventBuffer::PostEvent that can be used for any event class.
- Each window has a unique window id now. DFBWindowEvent contains the id.
- Added GetID functions to IDirectFB- DisplayLayer, Window and InputDevice.
- Added IDirectFBSurface::TileBlit.
- IPAQ buttons support by Ara Hacopian <ahacop@anthrotronix.com>.
- Windows can now be created with a specific pixel format, e.g. YUV.
- RGB332 acceleration on Matrox cards (including alpha blending).
- Added fast memcpy routine that uses MMX, MMXEXT or SSE.
- Changed DirectFB command-line parsing: The only recognized options are
  --dfb-help and --dfb: follow by a comma-separated list of DirectFB options.
  The format of the options is the same as used in the directfbrc file.
- Surfaces can now be created using existing surface data.
- New option "[no-]cursor" to enable/disable the default cursor on startup.
- New option "disable-window-opacity" for testing/tweaking purposes.
- New option "lefty" that enables swapping of left and right button.
- Applied patch from Till Adam <till@adam-lilienthal.de> that adds
  DFBInputDeviceLockState, IDirectFBInputDevice::GetLockState() and
  LED handling in keyboard driver.
- Rewritten Libmpeg3 provider based on OpenQuicktime provider (YUV/Sound).
- Make usage of CON2FBMAP (by Jiri Svoboda <Jiri.Svoboda@seznam.cz>).
- '/dev/input/js*' support by W. Michael Petullo <mike@flyn.org>.
- Detailed documentation of dbox2 remote driver code (example driver).
- More code documentation, especially state handling.
- Additional frame buffer device can be used to debug the surface manager.
- All global DirectFB symbols have the prefix "dfb_" now.
- Enno Brehm <enno@convergence.de> added dlopen on libdirectfb with RTLD_GLOBAL.
- Completely rewritten shmalloc stuff (used by Multi Application Core)
  based on libc5's GNU malloc. It now uses tmpfs (former shmfs).
- Some optimizations, Matrox colorkeying fixes.
- ATI state fix by Topi Kanerva <topi.kanerva@eke.fi>.
- USB and PS/2 mice fixes, endian fixes on parisc, many other bugfixes.


0.9.8
-----

- Merged multi application core, which is currently under development. Must be
  enabled at compile time (--enable-multi). It is *NOT* stable yet.
- Input/Gfx driver API changes to be ready for multihead and multi application
  core.
- Added OpenGL support via the new interface "IDirectFBGL".
- Added support for IMPS/2 mice including wheel support.
- Added remote control driver for dbox2.
- Added DWET_WHEEL window event. Focused windows now receive events if the
  mouse wheel is use.
- Added simple blitting support for nVidia cards <dfoesch@cs.nmsu.edu>.
- Added "wm_hack" feature: press shift lock over a window and spin the mouse
  wheel to change the window opacity.
- Completed support for RGB332 (8bit mode), not fully optimized yet.
- New triange fillig code from Holger Waechtler. Adds clipping support and
  utilizes accelerated rectangles as a fallback if possible.
- Removed rounding factor when blitting non-scaled with tmu,         
  very big fonts looked incorrect (matrox driver).
- Fixed triangle filling in tdfx driver <DWood@daedalcorp.com>
- Fixed segfault when rendering pipeline is empty, e.g. using DSDRAW_BLEND
  with SrcFunc DSBF_ZERO and DstFunc DSBF_ONE.
- In RGB332 mode initialize alpha values in palette. Corrected color
  values in palette.
- Fixed segfault in jpeg provider with large images.
- Fixed some small memory leaks.
- Include SMF_SOURCE in SMF_ALL, could have caused blitting from the wrong
  source recently (longer for a very few drivers) when switching to another
  state.
- Fixed "--fbdev=" option.
- ABI version handling for all drivers.
- Moved examples to extra package (DirectFB-examples).
- The mouse cursor is now activated by default.
- DirectFB can be build with dietlibc.
- Some namespace cleanups.
- Updated aty128fb patch for linux 2.4.16.

0.9.7
-----

- Added deinterlacing for interlaced video sources to Matrox Backend Scaler.
- Added DSPF_UYVY and clarified description of both YUV formats.
- Added acceleration for Matrox Mystique, Millennium I&II, G100.
- Added support for YUV in V4L video provider.
- Added support for deinterlacing in df_layer example.
- Added option "--fbdev=<device>" to specify another device than "/dev/fb0".
- Added support for 'gsync true', 'csync high' and 'extsync true' in fb.modes.
- Added 8bit RGB332 pixelformat, implementation is not complete yet.
  If you want RGB332, you have to enable it using ./configure --enable-rgb332.
- Optimized RGB15/RGB16 color keyed blit (doubled performance on some CPUs).
- Allow RGB15 mode on fbdev drivers that report to use one bit for alpha.
- Fixed blocking of CreateImageProvider when called on /dev/video with BTTV.
- DirectFB now restores the palette during deinitialization, turns cursor and
  blanking back on and restores the terminal attributes like local echo.
  These fixes help a lot when using DirectFB with the option "--no-vt-switch".
- Updated NeoMagic frame buffer driver patch for 2.4.10 and above.
- Updated aty128fb frame buffer driver patch. The patch was tested with kernel
  versions from 2.4.7 - 2.4.12. It may work with older versions too.
- IDirectFBSurface::SetSrcColorKey has to be called on the source now,
  when blitting to a surface which has source color keying enabled.
- SetSrcColorKey and SetDstColorKey take three values now: r, g and b.
  They will be converted to the pixelformat of the surface automatically.
- Some minor fixes.

0.9.6
-----

- Added H3600 (ipaq) Touchscreen input driver.
- We now accept compatible pixelformats,
  e.g. IPAQ's RGB 444 format is compatible with RGB 565.
- Matrox Backend Scaler support as additional display layer.
- YUY2 format added for video playback.
- Added 'IDirectFBDisplayLayer::Set/GetColorAdjustment()'.
- Added simple layer example which plays a video onto the second layer.
- Added new window capability DWCAPS_DOUBLEBUFFER to create windows with
  two back buffers. This is useful for overlapping windows which both
  cause frequent updates of the window stack.
- Added 'IDirectFBWindow::Close()' that puts a 'DWET_CLOSE' event into the
  window's event queue. The event dispatcher thread can then decide to close it.
- Added 'IDirectFBWindow::Destroy()' which actually destroys the window after
  sending a 'DWET_DESTROYED' event, so the event dispatcher thread can notice
  and release any interfaces belonging to it.
- Added result 'DFB_DESTROYED' which is currently returned by 'IDirectFBWindow'
  and 'IDirectFBSurface' if the window or surface has been destroyed.
- Fixed surface manager bug causing inconsistency between video/system memory.
- More changes to surface manager fixing problems when using many many threads.
- Fixed segfault when loading big PNGs, seemed to be a problem with alloca.
- Minor fixes to window stack code.
- Some fixes to deinitialization code.

0.9.5
-----

- Added 'IDirectFB->CreateInputBuffer()' that allows to easily
  create input buffers for specific events.
- Added 'IDirectFBInputDevice->AttachInputBuffer()' to
  attach an existing input buffer to another input device.
- Added 'IDirectFBImageProvider->GetImageDescription()' to obtain information
  about alpha channel availability and possible color keys.
- New LIRC input driver, name your keys (lirc config file) like the DirectFB
  keycode enum does without the "DIKC_" prefix, e.g. "OK", "MENU" or "VOLUMEUP".
- First version of nVidia RIVA TNT/TNT2/GeForce driver (very limited right now).
- Updated kernel patches, improved synchronization for FBIO_WAITFORVSYNC.
- New pkg-config file "directfb-internal.pc" for better support
  for third party modules built outside the DirectFB source tree.
- You can move windows with the mouse when holding down CapsLock.
- Font width can now be set independent from height, e.g. for non-square pixels.
- Set gamma ramp, fixes "strange-colors-effect" with some frame buffer drivers.
- Accept interlaced or double scan modes, 320x200 looks really cool in some way.
- Deinitialization code cleaned up and reactivated.
- V4L capturing is now stopped by exit and signal handlers.
- Matrox driver cleanup and blending state fixes.
- More detailed generated API Reference (more comments in directfb.h).
- Many bug fixes, some compile fixes.

0.9.4
------

- Software driver pipeline optimization giving me 70% speed up for solid lines.
- Several bugfixes for image loading, Matrox driver, mode handling and more.
- Removed 'realloc()s' that caused callback functions to write into the
  old memory location if 'realloc()' returns a new one.
- API rewrite for IDirectFBDisplayLayer with new capabilities, e.g. flicker
  filtering, better configuration handling by 'Get/Set/TestConfiguration()'.
- Sub surface handling improved, especially for surface resizing.
- More safety and sanity checks and new error codes
  (DFB_MISSINGIMAGE, DFB_INVAREA, DFB_THIZNULL and DFB_IDNOTFOUND).
- Additions to IDirectFBVideoProvider: 'GetCapabilities()' retrieves info about
  the provider, 'Set/GetColorAdjustment()' set/get values like contrast etc.
- Cursor can be enabled/disabled and opacity can be set independently.
  Also cursor appears centered now.
- Experimental support for VT switching during runtime ;-)
- New command line option "--force-windowed" which already works with most of
  the examples, levels other than DFSCL_NORMAL give DFB_ACCESSDENIED.
- GIF loading to ARGB fixed, transparent GIFs are now supported as ARGB.
- Several fixes to video mode list and pixelformat handling in
  'read_modes()', 'fbdev_set_mode()' and 'fbdev_get_pixelformat()'.
- Added IDirectFBSurface->DrawLines(), used by df_dok now.
- Some optimizations in DrawString and core font handling.
- Fixed font problems with Matrox cards, their texture cache is flushed
  now after writing the glyph into the frame buffer (i.e. into the texture).
- Mouse cursor movements are now clipped by the screen ;-)
- Fixed 'directfb.h', identifier "id" was also a keyword in Objective C.
- Added IDirectFBInputBuffer->WaitForEventWithTimeout,
  was missing in last release.

0.9.3
------

- All modules (drivers/providers) are built conditionally, can be
  disabled. configure spits out a summary of all modules.
- Some license headers were forgotten to change to LGPL.
- New remote control keycodes and remote control input type.
- df_window can play video files and behaves like a window manager.
- New "thanks to" section in README.
- Window stack repaints optimized through recursive function.
- Added DirectFBSetOption from Till Adam <till@adam-lilienthal.de>.
- Added IDirectFBInputBuffer->WaitForEventWithTimeout.
- Changed to pthread conditions in waiting code.
- Matrox driver fixed when blitting from 32bit without blending.
- Added DFBInputDeviceTypeFlags, removed DIDID_TYPE.
- Several cleanups in core, common code moved into helper functions.
- Fonts can be loaded monochrome and/or without kerning.
- Console blanking now disabled.
- Software alpha blending performance boost for non MMX machines.
- Added inputdriver for serial mice with config option "mouse-protocol".
- Modularized inputdrivers.
- Even faster DrawString() software implementations.
- New function Font->GetStringExtents.
- Use of antialiasing, kerning and hinting for fonts is now configurable.
- Some fixes in the software rendering functions.
- Support for interlaced PNGs (thanks to Johannes Zellner).
- Two new example applications in very early stage.
- New function IDirectFB->WaitForSync.

0.9.2
------

- Fix for loading jpegs unscaled into 24bpp surfaces
- 15bpp support for jpeg provider
- v4l provider support for devfs (/dev/v4l/video*)
- API change for DFBSurfaceDescription (pixelformat field instead of bpp
  field, removed DSCAPS_ALPHA.)
- DrawString() and GetStringWidth() support UTF-8 encoded strings now. They
  take an additional parameter that specifies the number of bytes to use from
  the passed string or -1 for the complete string.
- Fonts are no longer loaded completely, instead glyphs are loaded on demand
  and are cached for later use.
- Font kerning tables are no longer loaded by the core.
- Removed default font from the core and made it a IDirectFBFont interface.
  Pass NULL as filename to CreateFont() to get the default font.
- Added MPEG video provider written by Kim JeongHoe based on libmpeg3.
- Performance improvements in the software functions for DrawLine(), 16 bit
  drawing functions and DrawString() in all depth.
- Added GetPos() and GetLength() functions to the video provider API.
- Use /dev/tty0 or /dev/vc/0 (for devfs) instead of /dev/console so DirectFB
  works on machines with serial consoles.
- Removed dependency on libm.

0.9.1
------

- pkg-config files are available for optionally installed interfaces
  like IDirectFBVideoProvider_AviFile, so apps can test for their existence.
- Added IDirectFBInputDevice->GetButtonState() which returns the
  state of the specified button. GetButtons() is also still available.
- New demo called "df_knuckles" draws a three dimensional lighted skull
  that can be rotated by the mouse. (Port from Mark Vojkovich's DGA demo)
- Fixed accelerator ids in neomagic driver to match the ids in the
  current neofb kernel patch that is now included in "patches".
- Moved command-line parsing out of DirectFBCreate() into DirectFBInit().
  This means to inititalize DirectFB() there are now two calls necessary:
  DirectFBInit( &argc, &argv ); DirectFBCreate( &dfb );
- Added IDirectFBSurface->FillTriangle() for solid and blended triangles.
  Implemented in generic driver and Voodoo, Matrox acceleration.
- Interfaces with a reference counter of zero are automatically freed
  unless you enabled debugging during configure. In debug mode a released
  interface returns DFB_DEAD if a function has been called.
- Added Shockwave Flash Video Provider written by Joachim 'Roh' Steiger.
  You will need the libflash, that can be downloaded as a shared library
  from our download section. No modifications of libflash code.
- Added an option to directfb-config that makes "--libs" output
  the suitable LDFLAGS that are needed to have AviFile symbols resolved.
- Mouse cursor is no longer enabled by default.
- AviFile Provider now probing for ".asf" files, too.
- Fixed Stop in AviFile Provider, work around crashing AviFile call
  Player->Stop by using Pause and Continue. PlayTo can now be called
  several times without stopping to change the destination on the fly.
- V4L Video Provider no longer gets a NULL pointer as the filename,
  but "/dev/video0" and so on. Removed v4l code from core.
- AviFile Provider updated to compile with newest AviFile version.
- Implemented flipping of surfaces that are no window or layer surfaces,
  when the surface is a subsurface, a flipping region has been specified
  or the flipping flag DSFLIP_BLIT has been used.
- Improved documentation generator, a few parsing fixes.
- Added missing "void *callbackdata" to
  DFBInputDeviceCallback and DFBVideoModeCallback.
- Some minor fixes and cleanups.


0.9.0
------

Initial release.