DirectFB - Home of the pragmatist


News

2004-12-21   DirectFB 0.9.21

We are happy to announce the release of DirectFB 0.9.21 which could actually be 0.9.30 judging from the progress it made.
Read more...
Update: FusionSound 0.9.21 tar ball was replaced on 2004-12-22 08:15 CET containing an important fix, sorry.

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=" 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 .
  • 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 -'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 " 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>.

dok

2004-12-21   CE Linux Technical Conference

The CE Linux Forum is holding a technical conference in San Jose, CA from January 25th to 26th. There will be 28 sessions and lots of technical demonstrations. Denis Oliver Kropp will be there to introduce DirectFB.

dok

2004-09-28   First autogenerated news from new web site

This is the first news entry that was loaded from file and converted to HTML/CSS by PHP.

dok

2004-06-03   Voodoo - The network transparency layer of DirectFB

The recent development of Voodoo enables DirectFB applications to run over a network connection without modifications.

The concept is quite simple and working great. Each interface has two new implementations: "Requestor" on client side and "Dispatcher" on server side. Between them is a very small libvoodoo which manages network connections and provides fast and powerful message encoding and decoding.

Each Dispatcher instance gets an ID which is also managed by libvoodoo. The Requestor sends a request message for each method call, specifying the remote instance ID and the method that is to be called. Parameters are appended to that message before it gets sent to the server. On the server side the Dispatcher interface is looked up in a hash table using the instance ID. After fetching the parameters from the message without copying any data except for some rare cases, the Dispatcher calls the "real" implementation.

Some requests have a corresponding response and some don't, e.g. all drawing related methods return immediately after sending out the request. Methods that require a response block until the response is received. Each response contains at least the result (DFBResult). Further response data is appended to the response message and returned to the application after being processed by the Requestor.

Not every Dispatcher is server side and not every Requestor is client side. IDirectFBEventBuffer and IDirectFBDataBuffer have a client side Dispatcher and a server side Requestor. The server has to send events to the client side by making a PostEvent request (without response). It also has to fetch data via requests to the client side data buffer (with response), e.g. while it is dispatching a RenderTo request. The client will send its compressed data (PNG for example) over network to the server!

Another advantage is that existing applications can be used without changes.

The setup is quite simple: There's a new program called "dfbproxy" which just waits for incoming connections (currently port 2323). It doesn't even call DirectFBCreate() before clients request that.

Running applications via the proxy is done by passing "--dfb:remote=<host>".

dok

2004-05-20   3D Window Management Preview

There's a brand new screenshot that shows the new TextureTriangles() method using existing windows as the texture. Every change in the original window is immediately visible in the transformed presentation.

dok

2004-05-19   CE Linux Forum Specification recommends DirectFB

The Specification released by the CE Linux Forum includes DirectFB for Video/Graphics part.

dok

2004-03-04   Another interview

Presence PC has another interview as part of a FOSDEM article.

dok

2004-02-06   Software MPEG decoding library based on DirectFB and FusionSound

A new library dedicated to software based MPEG decoding is born. It focuses on live video streaming with audio/video synchronization based on libavcodec, DirectFB and FusionSound.

Hi,

many people have recently decided to work on software only mpeg decoderes. The goal is to have a cheap box with a DVB card and vdr or MythTV on it, but only using a so-called budget DVB card without onboard mpeg decoder.

There are, however, the following problems to be solved:

  • low-delay buffering (for fast channel switches)
  • mpeg audio decoding
  • audio and video syncronization
  • audio rendering
  • video rendering
  • long term playback stability

In the past, there have been different approaches to solve these problems, but they are not quite satisfying yet.

For example, while "mplayer" and "xine" are excellent movie players, they use huge buffers for buffering and therefore make channel switching nearly unbearable. Additionally, they lack long-term stability, because they don't synchronize to the incoming stream and buffer over- and underrums quite frequently occur. (see below for details)

The "softdevice" plugin from VDR is on the right way, but unfortunately it is bound to VDR. Other projects like "mythtv" and the like need to duplicate the code or invent the wheel again,

Because of this, I'd like to invite everyone interested to participate on the "linuxtv-softmpeg" project, which tries to provide the "libsoftmpeg" library, a thin library on top of existing technologies that adresses all the problems mentioned above.

I've already written some parts of "libsoftmpeg" which currently do the following:

  • low-delay buffering for audio and video, adjustable audio prebuffering (currently 500ms, channel switching is usually done in less than a second)
  • mpeg audio decoding via libavcodec from "ffmpeg" project
  • mpeg video decoding via libavcodec from "ffmpeg" project
  • audio and video synchronization using a "sync-to-audio-pts" approach and "free flowing video display" (see below for a a link to the file)
  • video rendering using DirectFB (http://www.directfb.org), a thin library ontop of the Linux framebuffer device. DirectFB hosts a "cle266" driver which drives the tv out of the EPIA/cle266 boards very well
  • audio rendering using FusionSound (http://www.directfb.org/fusionsound.xml), a thin library on top of DirectFB and Fusion (fast interprocess communication), which supports sound mixing, pitch adjustment and other neat features. Sound mixing is very important, other applications can overlay system sounds onto the live tv audio.

All this is working fairly well, a demonstration application is included with the library that reads from the DVR device (so you need "szap" for example to tune to a service and have the data put to the DVR device) and displays audio and video. It should be easily possible to use "libsoftmpeg" in "vdr", too.

The code was written in the last few weeks and naturally it still lacks some features:

  • fixed to 48kHz output soundrate, but others can be supported easily
  • in some parts, the code is very "hackish" and quick-and-dirty
  • lot of clean up code is missing, error paths are missing
  • much memory for buffers is wasted
  • the api is not very clean and has some "rough" edges
  • only a multiplexed TS can be used by the library, support for PS streams should be added (DVD playback)
  • on some systems, there is a constant audio offset, perhaps this depends on the soundcard used

The current code is licensed under the LGPL. If you'd like to participate in this project please note that it's not allowed to directly copy & paste code from other projects, especially not from GPL projects.

Because of this, only LGPL libraries can be used in combination with it: fortunately libavcodec, DirectFB and FusionSound are LGPL. 8-)

The code is currently part of the LinuxTV.org CVS archive. You can check it out like this.

 > cvs -z9 -d :pserver:anonymous@linuxtv.org:/cvs/linuxtv co libsoftmpeg

There is currently no webpage, but this will change in the future.

You need:

  • DirectFB and a supported gfx adapter (cle266 or Matrox G200/4x0/5x0 is fine, vesafb is only enough if you have a horibbly fast machine ;-)
  • FusionSound, which needs OSS or ALSA (with oss emulation) sound drivers
  • libavcodec, version 0.4.8 from http://ffmpeg.sf.net is fine

You'll get a demo application called "dfb_ts", which reads a transport stream from the DVB dvr device. You need to tune your frontend with "szap" for example and redirect the data to the dvr device with the "-r" switch. For example:

 > szap -r "Das Erste"
Then you can start the demo application and provide the video and audio pids for the service you like to watch (have a look at "szap", it tells you the correct pids):
 > ./dfb_ts /dev/dvb/adapter0/dvr0 0x7ff 0x800

What's currently completely missing is long-term playback stability. As you probably know, the problem arises due to the different clocks used for dvb encoding and decoding.

I've added the file "IDEAS" to the CVS, where I try to explain the current approach for audio/video synchronization and what can be done for long-term a/v sync.

You can visit the file with this link.

The next major step would be to add the ideas of long-term playback stability and to change to code that video part currently using libavcodec can be replaced for example with the cle266 mpeg decoder stuff, sot that cle266 users can use the hw acceleration of their chipsets.

I've created a mailing list for this project. Write a mail to <ecartis@linuxtv.org> with "subscribe linuxtv-softmpeg" in the subject to subscribe.

Please subscribe to the mailing-list if you're interested. Please don't reply to this mail on the mailing-lists I crossposted.

If you'd like to actively participate in the project, or use libsoftmpeg in your project, please contact me or write to the mailing-list.

CU
Michael

dok

2004-02-03   Monterey Linux includes DirectFB for TI digital media processors

Pigeon Point Systems announced that the Monterey Linux (tm) distribution now supports DSP-based digital media processors from Texas Instruments. Amoung other multimedia features the TMS320DM310 provides "Versatile on-screen display (OSD) support with multiple windows, zoom, double buffering, blending and scaling", while the key features of Monterey Linux DM310 Edition include "DirectFB GUI layered atop of the framebuffer driver".
...can't wait for the first digital camera running DirectFB ;)

From linuxdevices.com:
"Pigeon Point Systems is marketing GPL 'editions' of its Monterey Linux that support three Texas Instruments (TI) DSP-based digital media processors [...] and target digital media receivers, set-top boxes, video conferencing, and other consumer electronics products." [...]
"The DM310 Edition leverages the native Linux frame buffer infrastructure to support the advanced On Screen Display (OSD) and adds DirectFB, a thin open source graphics hardware abstraction layer that provides a modular set of Graphical User Interface (GUI) facilities."

Read the full article from linuxdevices.com and check out the Press Release and DM310 Product Data Sheet at montereylinux.com.

More details about the hardware are available from Texas Instruments.

dok


directfb.org / Main / News