SVG

Overview

This page describes the status of the implementation in the GPAC project of the Scalable Vector Graphics (SVG) language. It describes the features that are implemented and the roadmap for missing or new features.

The GPAC project includes support for the playback and rendering of SVG content. The goal is not to provide yet another mixed HTML/SVG browser (Opera or Firefox are very good at that) but to focus on the integration of multimedia description languages with audio/video data. The GPAC player will therefore remain in between a document browser and a traditional audio/video player with support for languages like BIFS, SVG, X3D …

For Windows, the player is available: in command line (MP4Client), with an MFC GUI (Osmo4), with a cross-platform GUI (wxOsmo4) or as plugins of Internet Explorer (GPAX), Firefox or Opera (Osmozilla). For Linux, MP4Client, wxOsmo4 and Osmozilla are also available. For PocketPC and smartphone, the player is called respectively OsmoCE and Osmophone, and GPAX is also available. Finally, MP4Client can also be used on Linux Familiar and Linux on Nokia 770. A player is also available for some Symbian platform.

The binary installer for Windows is available here. For Linux users, please download the source code, compile and install (debian packages are not yet provided).

The implementation of the SVG support in GPAC is divided into 3 parts as follows:

  • SVG Parsing
  • The GPAC framework reads SVG files (or streams) and builds the memory tree. It uses a (simple, limited, but functional) SAX parser. The parser can load, progressively or not, an SVG document into memory. If you are interested, the source code for this part is here.

  • SVG Tree Managment
  • This part of the SVG support is common in the GPAC implementation with the MPEG-4 BIFS tree managment, and is called in general Scene Graph Managment. The Scene Graph part is responsible for the creation of elements, the handling of attributes (parsing, dump, cloning …). It also handles the animations and scripting features of SVG.
    If you check out the source code, look for svg_nodes.h, scenegraph_svg.h,src/scenegraph/svg_*.*.

  • SVG Compositing and Rendering
  • The compositing and rendering operations consists in applying animations, triggering user interactions, rasterizing the vector graphics and producing the final image. The GPAC project has two rasterizers: GDI Plus on Windows platforms, and the GPAC 2D Rasterizer, based on FreeType.
    If you check out the source code, look for src/compositor/svg*.c.

Status

GPAC currently supports SVG Tiny 1.2. Some elements, supported at parsing, are not yet implemented in the rendering. Scripting support using MicroDOM is provided by the use of the SpiderMonkey engine. Detailled support for each element, attribute, property and script interfaces is available here.

Obviously, the current implementation has some limitations, which we would like to remove and bugs we would like to fix. You can report bugs here and ask for feature support there.

Results of the GPAC behavior on the SVG 1.2 Tiny Test Suite can be found here.