Sunday, June 2, 2013

v0.9.0 released with new property animation API

Earlier in the year we announced the introduction of OpenGL-based image processing on the GPU. However, now it is finally available in a release version of the software. Not only that, but we have also added a new, properly integrated property animation API to replace the limited, awkward mlt_geometry API. Here are the features of the new API:
  • The time of a keyframe can be set using frame number, time clock string, or a timecode string.
  • A negative time value makes it relative to the end of an object's duration.
  • Keyframes support 3 forms of interpolation: discrete (no interpolation), linear, and a smooth Catmull-Rom  spline.
  • Supports a new mlt_rect propery type in addition to string (discrete only), integer, and floating point.
  • API for most apps is just a few new, simple methods on the Properties object.
  • Integrated with the OpenGL-based effects only at this time to ease the migration - will be extended to other plugins in the next version or two.
Above is a plot of the curve described by the following property value.
0|=50; 50|=100; 100=200; 200~=60; -7:00~=180; -2:00~=100; -1=220
This shows that it is possible to combine a number of things in the same curve. It starts out with discrete keyframes (|), switches to a linear interpolated keyframe (=), and ends with a few smooth spline keyframes (~) set using timecode relative to the end/width (-).

Here are other highlights of the release:
  • Improved pause behavior when using buffered rendering in mlt_consumer.
  • Added mlt_color type.
  • Deprecated mlt_geometry API.
  • Support for the latest versions of FFmpeg and Libav (but dropping support for 0.5 and 0.6 versions).
  • Added alpha channel output to avformat consumer.
  • Added reconnect and exit_on_disconnect properties to avformat producer.
  • Added qglsl consumer to use opengl with avformat, sdi, and decklink.
  • Added avsync module with blipflash producer and consumer for testing.
  • Added new "count" producer to gtk2 module.
  • Changed frei0r to use index-based property names making it impervious to param name changes (param name still accepted for compatibility). 
  • Added default parameter values to frei0r metadata.
  • Added more python example web services.
  • Started a unit test suite.