DirectFB - Home of the pragmatist


2008-11-15   In Jail

Web Server process went to jail, "special" pages will be up again soon, only Wiki does yet, but other services are still functional behind the scenes.


2008-11-11   Disko V1.5 is entering the dancefloor

It's done. The first release candidate of Disko V1.5 is now downloadable in our download-section. And like the version number already suggests, you may expect a lot of optimizing and new features all over the place.
First of all we have a very basic improvement referring to the performance with the conversion to the taff-file-format. The effect of this conversion is, that all pics and xml-files are parsed only once, which will save a lot of startup-time.

In addition Disko V1.5 comes along with an integrated basic flash-support based on swfdec 0.8, it supports the mySQL-interface, and it contains a basic implementation of a SIP-client. And of course all the results of our efforts in bug-fixing and performance-optimizing during the last month have been integrated.

Stay tuned for further informations, releases, and patches. Please also visit the new headquarter of the Disko team - Disko homepage.


2008-09-29   DirectFB 1.3.0 - first development release with OpenGL based acceleration

The 1.3.x series will have development releases with a new stable DirectFB 1.4.x series within a few weeks. Some of the changes for DirectFB 2.0 are already in there, but most of them are being developed in a side branch and will first be released with the 1.5.x series before the final 2.0 release is made early next year.

Major improvements include:

  • OpenGL based acceleration with a new graphics driver and GLX surface pool in X11 system
  • Rotated layers and windows with 90°, 180° or 270° as seen on the screenshot to the right
  • Sub window support with each having its own buffer (one level only for DirectFB 1.4)...
  • Surface Pool Bridge[tm] technology to speed up transfer between pools

Click on news title...

   ~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.3.0 |~~~~~~~~~~~~~~~~~~~~~~~~~~
        (c) 2001-2008  The world wide DirectFB Open Source Community
        (c) 2000-2004  Convergence (integrated media) GmbH

(*) DirectFB/Core: Single Application Core. (2008-09-29 11:52) 
(*) Direct/Memcpy: Using Generic 64bit memcpy()
(*) GLX/Surfaces: Using visual 0x2e (24bit) and 0x64 (32bit)
(*) Direct/Modules: suppress module 'linux_input'
(*) Direct/Thread: Started 'X11 Input' (19571) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/Input: X11 Input 0.1 (
(*) DirectFB/Genefx: MMX detected and enabled
(*) DirectFB/Graphics: OpenGL Acceleration - GeForce 8800 GTX/PCI/SSE2 0.5 (Denis Oliver Kropp)
(*) DirectFB/Core/WM: Default 0.3 (
(*) X11/Window: Creating  700x 600 RGB32 window...
(*) X11/Display: Using XShm.
(*) Direct/Interface: Loaded 'PNG' implementation of 'IDirectFBImageProvider'.
(*) Direct/Interface: Loaded 'FT2' implementation of 'IDirectFBFont'.
(*) Direct/Interface: Using 'GIF' implementation of 'IDirectFBImageProvider'.

Benchmarking 256x256 on 700x580 RGB32 (32bit)...

                                                                                  CPU Load
Anti-aliased Text                              3.000 secs (* 4737.600 KChars/sec) [ 99.6%]
Anti-aliased Text (blend)                      3.000 secs (* 4738.800 KChars/sec) [ 99.6%]
Fill Rectangle                                 4.291 secs (*13293.529 MPixel/sec) [100.0%]
Fill Rectangle (blend)                         5.496 secs (* 6880.326 MPixel/sec) [100.1%]
Fill Rectangles [10]                           4.616 secs (*13303.126 MPixel/sec) [100.0%]
Fill Rectangles [10] (blend)                   6.130 secs (* 6874.330 MPixel/sec) [ 99.8%]
Fill Triangles                                 4.845 secs (*13365.556 MPixel/sec) [ 99.7%]
Fill Triangles (blend)                         6.566 secs (* 6920.405 MPixel/sec) [100.0%]
Draw Rectangle                                 3.000 secs (* 1094.433 KRects/sec) [ 99.6%]
Draw Rectangle (blend)                         3.000 secs (* 1090.866 KRects/sec) [100.0%]
Draw Lines [10]                                3.000 secs (* 4453.000 KLines/sec) [ 99.6%]
Draw Lines [10] (blend)                        3.000 secs (* 4479.666 KLines/sec) [100.0%]
Fill Spans                                     3.001 secs (* 1941.402 MPixel/sec) [ 99.6%]
Fill Spans (blend)                             3.000 secs (* 2035.985 MPixel/sec) [100.0%]
Blit                                           4.866 secs (* 9146.218 MPixel/sec) [ 99.3%]
Blit 180                                       4.867 secs (* 9191.467 MPixel/sec) [100.2%]
Blit with colorizing                           4.873 secs (* 9165.356 MPixel/sec) [100.2%]
Blit from 32bit (blend)                        5.905 secs (* 5883.257 MPixel/sec) [ 99.8%]
Blit from 32bit (blend) with colorizing        5.918 secs (* 5883.622 MPixel/sec) [ 99.8%]
Stretch Blit                                   4.680 secs (*11857.995 MPixel/sec) [100.0%]

Post your results, e.g. to or the users mailing list!

Summary of changes since 1.2.6:

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.


  • 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.


  • 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.


2008-09-29   DirectFB 1.2.6 - shutdown fix

Shutdown fixes for those who ever want to shutdown :)

Click on news title...


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

WM Core

  • Lots of useful debug messages.


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


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


  • 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.


2008-09-25   DirectFB 1.2.5 - just arrived

...with a few more fixes.

Click on news title...


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

Software Rendering

  • Don't switch to FillRectangle() in DrawLine() if matrix is used.


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


2008-09-19   DirectFB 1.2.4 - you've been waiting for

Again some fixes, but also optimizations and interesting new features like:

  • DWCAPS_NOFOCUS for easy on-screen-keyboard implementation in conjunction with DiVine
  • Min/max axis value reporting per event (allowing dynamic ranges for devices like WiiMote)
  • Initial support for Renesas SH7723 hardware acceleration

Click on news title...

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


  • Added exported dfb_pixelformat_names[] and replaced relevant code.


  • 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.


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


2008-08-19   DirectFB 1.2.3 - a minor fix

This is a minimal release fixing a remaining bug after recent fixes to the X11 system.

X11 System

  • Fixed new bug with reopening X11 window when layer resizes.


2008-08-15   DirectFB 1.2.2 - a one week production

Another bug fixing release of the 1.2 series is available!

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.


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


  • 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.


2008-08-08   DirectFB 1.2.1 - the essential bug fix release!

The first real vacation after years - one week horse back riding and other recreational activities on and around a nice farm of the medieval Lilienbund - has brought fresh energy to make this essential release.

Major enhancements are in surface management, especially the displacement of (multiple) older allocations for a newer one, but also major bugs had to be fixed...

Click on the news header for more info!

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

  • 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().


  • 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.


  • 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.


2008-07-13   Final DirectFB 1.2.0 release

This is the final release of the new stable 1.2 series!

We can focus on 2.0 now :-)


  • 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!


  • 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!


  • 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!


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


2008-06-02   DirectFB 1.2.0-rc1

This is the first release candidate of the new stable 1.2 series

Major feature additions include blitting with a color or alpha mask using a third surface and ongoing affine transformation support in software & hardware.

There are also lots of other improvements for embedded chips such as Renesas SH7722 or TI Davinci and an exquisite X11 system module which gives PC based prototyping of embedded software a boost.

The screenshot shows three different processes, Firefox on GTK+ with two DirectFB example programs. All run in the same X11 window which is the screen of the multi application core DirectFB session.

Click on the news header...

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.


  • 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.


  • 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 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.


2008-05-27   DirectFB Apparel and Gifts

As some of you might have already noticed by looking at the Main menu or by being subscribed to the users mailing list, we have opened our first merchandizing shop at

So if you like DirectFB and want to propagate that, stop by at our shop and get some nice clothing, or a cup for your coffee. They look nice, help you stay awake to contribute to the project and you donate money to the community, since all the money we receive will be spent to buy hardware for DirectFB and Open Source Community programmers, or support them otherwise.

If you have special wishes about styles, or some nice graphics for our store, feel free to contact me.


2008-05-21   CELF-Videos

Finally available on

The CELF-Keynote video from the conference held at the Computer Museum in Mountain View, CA, can be watched here.

To see the Renesas-Presentation on Writing DirectFB Graphics Drivers follow this link.

And last but not least the Disko Application Presentation.


2008-05-13   Liaison Statement to (SC 29 N 9423)

In accordance with Resolution 13.1.1 taken at the 84th 
ISO/IEC JTC 1/SC 29/WG 11 meeting, 2008-04-28/05-02, 
Archamps, France, I am pleased to send the following 
Liaison statement.

SC 29 N 9423 [SC 29/WG 11 N 9868] :
Liaison Statement from SC 29/WG 11 on 
MPEG Extensible Middleware (MXM) "

Click on news title...


Response to

Thank you for your interest in our work in the area of multimedia platforms.

We are pleased to see your commitment in providing open source solutions for the industry.

At this meeting we have decided to issue a Call for Proposals on MPEG Extensible Middleware (MXM). As planned, this new project will be developed as an Open Source Software project.

Deadline for submissions is 15th July 2008.

We look forward to working with you on this exciting project.


2008-05-02   Recent developments

While we're still working out our business plan, we're also looking for investors and other people willing to help. If you're interested, please send me a mail, preferably something with DirectFB in the subject to avoid me deleting it by accident :)

Furthermore, newer technologies will remain closed source until they can be fully used and would take a lot of time to be copied, especially regarding Water, which is already quite different from what you get in git!

I'm tired of companies using my ideas in their own closed source products...


2008-04-25   Disko fever in Mountain View

ELC 2008 - we were there! This year we presented the disko framework on the ELC 2008 in Mountain View. You will find our presentation here.
Anything else?
Yes, we created an initial step by step tutorial, which can help you start writing your own Disko application/plugins. Check it out and share your experiences with us.


2008-03-28   First screenshot of DirectVG (OpenVG API on old IDirectFBSurface)

First screenshot of Claudio's glorious work :)


2008-03-14   Disko dancing on DaVinci

A video capture of a User Interface demonstrates that Disko performs well on a TI DaVinci chipset. The video shows a navigation caroussel that switches between different applications and plays TV.

A number of set-top boxes and internet appliances are running Linux and DirectFB. So the chance is good that Disko applications will run on a number of devices that come into the market.

If you consider using Disko for your own project, you can download and play with Morphine.TV, which is a media center system based on the Disko framework. Afterwards you should be able to implement Disko on your embedded hardware. We are looking forward to discuss bugs and feature requests in the Morphine.TV forums.

For more detailed benchmark information click on the news title...

Benchmarking 256x256 on 640x464 ARGB (32bit)...
                                                               CPU Load
Anti-aliased Text                           129.556 KChars/sec [100.0%]
Anti-aliased Text (blend)                   129.761 KChars/sec [100.0%]

Fill Rectangle                               51.555 MPixel/sec [  6.4%]
Fill Rectangle (blend)                       51.575 MPixel/sec [  6.3%]
Fill Rectangles [10]                         51.641 MPixel/sec [  0.7%]
Fill Rectangles [10] (blend)                 51.654 MPixel/sec [  0.7%]
Fill Spans                                   39.731 MPixel/sec [ 51.7%]
Fill Spans (blend)                           39.756 MPixel/sec [ 46.0%]

Blit                                         29.296 MPixel/sec [  5.7%]
Blit colorkeyed                              32.985 MPixel/sec [  6.4%]
Blit from 32bit (blend)                      31.606 MPixel/sec [  6.2%]
Blit from 32bit (blend) with colorizing      31.595 MPixel/sec [  6.8%]

Stretch Blit                                 15.054 MPixel/sec [  2.9%]

Benchmarking 256x256 on 640x464 RGB16 (16bit)...
                                                               CPU Load
Fill Rectangle                               59.831 MPixel/sec [  7.2%]
Fill Rectangles [10]                         59.861 MPixel/sec [  0.8%]
Fill Spans                                   45.916 MPixel/sec [ 97.1%]

Blit                                         48.232 MPixel/sec [  9.8%]
Blit colorkeyed                              48.032 MPixel/sec [  9.7%]
Blit with format conversion                  19.291 MPixel/sec [  3.9%]


2008-03-13   Water - fresh and universal

First checkin of new rendering, acceleration (and media) architecture and API!

The new rendering architecture will be the optimal solution with best scalability for any graphics accelerator from most primitive (DMA copy/fill) to most advanced with/without OpenVG support.

There will always be hardware with only limited vector graphics support if at all and for these it is DirectFB's job to provide decent acceleration with breakdown of higher level or unsupported vector graphics operations down to the hardware primitives.


2008-02-11   FusionSound 1.1.1

Released FusionSound 1.1.1.

API | IFusionSoundMusicProvider

  • Added WaitStatus(), waits until one of the states in the specified mask is reached.

Drivers | WAVE

  • Fixed wrong return value in GetBuffer().
  • On suspend, close the output file only if it is not a fifo.
  • Enable Close-On-Exec flag on the file descriptor.

Drivers | OSS

  • Enable Close-On-Exec flag on the file descriptor.

Drivers | ALSA

  • Autodetect the device name according to the channels configuration.

Music Providers

  • Rewritten Timidity provider against libtimidity 0.1.0 (
  • Fixed snprintf() related vulnerability in CDDA music provider.
  • Added ASX and XSPF support to the playlist provider.
  • Added AAC to the list of formats supported by the ffmpeg provider.
  • Avoid locking when destroying the interface.

Build Options

  • Changed --enable- to --with-.

Tools | fsplay

  • Supports switching to the previous track.
  • Set volume and pitch units to 1/32.
  • Removed signal and exit handlers.


2008-02-08   This is Disko - makes disco (1.1.0)

Disko is a plugin based framework providing components to create media oriented applications with special user interfaces on embedded platforms. It is closely connected to the DirectFB hardware abstraction library and specialized in touchscreen and remote control navigation. There's a plugin based management component, which enables easy development, customization and extension of embedded applications.

Disko has been ported to the TI Davinci platform together with DirectFB and runs on x86 as well. The goal is to have Disko up and running on every single platform DirectFB is working on.

Disko is maintained by the Morphine.TV team but hosted on A complete API documentation can be found in the Morphine.TV Wiki.


2008-01-18   FusionSound 1.1.0

Finally released FusionSound 1.1.0, bringing you DMA, Digital Surround (5:1) and Network support (Voodoo Sound).


  • Added FSChannelMode, defining channels configuration.

API | IFusionSound

  • Added GetMasterVolume()/SetMasterVolume().
  • Added GetLocalVolume()/SetLocalVolume(), specifying a volume level affecting all local playbacks.
  • Added Suspend() and Resume().

API | IFusionSoundStream

  • Added Access() and Commit(), implementing direct access to the ring buffer.

API | IFusionSoundPlayback

  • Added SetDownmixLevels(), specifying the downmixing levels for the center and rear channels in case of digital surround to stereo/mono conversion.

API | IFusionSoundMusicProvider

  • Now GetBufferDescription() returns the total amount of frames in the current track.


  • Implemented Direct Memory Access to the output device.
  • Added a fork+wait behaviour that, instead of killing the slaves on exit, makes the master fork and wait until they have finished playing.
  • Added deinitialization checking.

Mixing Core

  • Implemented conversion from digital surround to stereo/mono and vice versa.


  • ALSA supports DMA.
  • Implemented Suspend and Resume.

Music Providers

  • Added FFmpeg music provider, supporting wma, real audio, ac3 and flac.
  • Implemented missing channel conversions.


  • Added network support to FusionSound, i.e. Voodoo Sound.
  • Implemented a fast audio compression method (called DPACK) for remote sessions.

Runtime Options

  • Added option "channelmode", specifying channels configuration.
  • Added option "[no]-wait", specifying whether fusionsound should wait until slaves have finished playing instead of terminating them.
  • Added option "[no]-deinit-check", disabling deinitialization checking.
  • Added option "[no]-dither", enabling dithering.
  • Added option "[no]-dma", enabling DMA (if supported by the driver).
  • Added option "remote", to select the remote session for Voodoo Sound.
  • Added option "remote-compression", to select the compression method for Voodoo Sound.

Build Options

  • Removed "enable-dithering", now enabled runtime.
  • Added "disable-multichannel", builds stereo/mono only.
  • Added "with-voodoo".


  • Added fsvolume, to query/change the master volume level.
  • Added fsproxy.

klan / Main / News