Changelog for Snowmix

Updated for version 0.5.1


This document tracks changes to the functionality of Snowmix and its accompanying scripts and files.

  • ChangeLog for version 0.5.1
  • ChangeLog for version
  • ChangeLog for version 0.5.0

Changelog for older versions are availble here:

Changelog for Snowmix 0.5.1


  • Debian support now has its own additional bootstrap file to be executed automatically when running bootstrap. Will check for GStreamer 1.0 and offer to download relevant packages.

  • Including OpenGL GLUT support now requires '--enable-snowmixglut' when running configure. Full OpenGL support can be enabled by:
./configure --prefix=$prefix --libdir=$prefix/lib --enable-snowmixosmesa \ --enable-snowmixx11 --enable-snowmixglu -enable-snowmixglut

Replace $prefix with the correct path.

  • On Mac OS X, a pipeline closing connection to Snowmix output control connection setup by GStreamer shmsrc, would under certain circumstances make Snowmix exit without any explanation. This happened when Snowmix would "send" data to the control connection of the connecting shmsrc and the shmsrc had broken the connection. Due to OS X not supporting MSG_NO_SIGNAL, a SIGPIPE would make Snowmix exit without warnings. Snowmix now correctly sets the socket option SO_NOSIGPIPE for OS X and catches the signal and closing the socket nicely. Linux just sets MSG_NOSIGNAL flag when sending. This bugfix has also been implemented on the feed control connection although so far, the bug has not been reproduced on OS X on the fed control connection.

  • Deleting a loaded image or loading an image into an already used image id, would leak memory. This is now fixed. This is a bugfix.

  • Error in CCairoGraphic::OverlayText() and UTF8Bytes() would in some cases lead to incorrect fewer number of characters being overlayed when using "text grow" combined with a string containing multibyte charaters. In some cases libPango would object to malformed UTF8 string with a for Snowmix unpredictable result. This is a bugfix.

  • In addition to loading PNG images WITH an alpha channel/layer, Snowmix now also support loading PNG images without an alpha channel/layer.

  • The command "text backgr rgb" with argument would switch the green and blue value. The correct order is red, green and blue. This is a bugfix.

  • For Mac OS X, updating bootstrap-OSX for GStreamer 1.6.3 and MacPort 2.3.4.

  • The tcl command "snowmix info xxxx ids" would in many cases overwrite memory unintended for image load, test, shape, virtual feed, feed, audio feed, audio mixer and audio sink leading to unpredictable results, usually a crash. This is a bugfix.

  • Clipping of audio was detected as being outside the range of -32768 to 32767. The valid range for audio with no clipping is now set to -32767 to 32767. The previous range is not considered a bug and the change is as such just a minor adjustment.

  • When having a source in CAudioMixer with fewer channels than the mixer itself, the mixer would, if volume of the source for the mixer was different from 1.0, for some samples of the source frequently multiply the volume to the source more than once. This was most clearly heard as clicking when volume for the source in CAudioMixer was set beyond 1.0 and very clearly heard when volume was set above 1.2-1.3. If volume was set to 1.3, then for most samples for the source these would be multiplied by 1.3, but some every now and then would be multiplied by 1.3*1.3. This is a bugfix.

  • Adding/mixing multiple sources in CAudioMixer would not correctly set newbuf->clipped to 100, if result exceeded +-32767, but it was rather set to true (=1) thus mostly avoiding detection of clipping. This is a bugfix.

  • Adding a new option for the snowmix command of the embedded interpreter. The command can be used to import settings and states from the output modules of Snowmix into the embedded Interpreter. The syntax of the new command option is:
snowmix info output ((info | status) [ format ]) | syntax

One way to use the command can be like this:

tcl eval snowmix message [snowmix info output info]
  • The command "tcl help" would print lines for "snowmix info shapes" and "snowmix info system" twice and the second print was not correct. Seconds removed. Cosmetic change.

  • The command "audio feed delay " would print to stderr, aka the Snowmix console instead of the controller issuing the command. Verbose mode for audio feed is needed. This is a bugfix.

  • The command "audio sink status" was missing a parameter name "queue" in the format list included in the beginning of the list. This is a bugfix.

  • The tcl command "snowmix info audio mixer source extended format" was missing the parameter name delay in its list. When using the format list to index output from "snowmix info audio mixer source extended ..." it would lead to a misinterpretation of the data. This is a bugfix.

  • The tcl command "snowmix info audio mixer source info ..." would return an unbalanced tcl list if any of the mixer sources had a source map configured. This is a bugfix.

  • The tcl command "snowmix info audio mixer source" would print signed/unsigned instead of muted/unmuted and it would print the value for signed/unsigned. Should be the value for muted/unmuted. This is a bugfix.

  • The tcl command "snowmix info audio mixer source ..." would miss a space between an ending '}' and a starting '{' and mess up the use of this list if used as a list in tcl. This is a bugfix.

  • The tcl commands "snowmix info audio feed status ..." and "snowmix info audio sink status ..." would print signed/unsigned instead of muted/unmuted. It would also return a malformed tcl list with unbalanced '{}'. This is a bugfix.

  • The tcl command "snowmix info audio mixer source extended ..." would access sample_count of an audio queue, also when none was appointed leading to a NULL pointer seg fault. This is a bugfix.

  • Setting the Windows attribute override_redirect to true should now make the glx COpenglVideo class bypass the window manager. Enhancement.

  • Update to slib/scenes.slib. SceneSetFrameActive used to set or list active frame/frames. Used without arguments, it will list the all frame states for all scenes. Used with scene_id as argument, it will list all frame state for that scene Used with scene_id and frame_id as argument, it will list frame state for that scene and that frame. Enhancement. The syntax is:
SceneSetFrameActive [ scene_id [ frame_id [ active silent ] ] ]
  • Adding support for compiling Snowmix with Cairo Graphics older than version 1.10. This however limits the list of Cairo Graphics Operators. See Cairo Operators.

  • In we now actually test for libtcl8.6, libtcl8.5 and libtcl in that order instead of just assuming it existence from location of header files.

  • Adding freebsd as platform to Used for FreeBSD distro PCBSD.

  • Updating bootstrap files in bootstrapd for all platforms

Changelog for Snowmix - Never Released


  • Adding xfc4-terminal and lxterm to possible terminal emulators for the demo script. Enhancement.

  • The images/CS directory was not installed rendering the demo example for ini/sapphire-basis flawed when using the scene tab in snowcub. Bugfix.

  • The script scripts/av_output2screen used 'nc' rather than $NC. Potential stall on some systems. Bugfix.

  • The script scripts/demo installed as snowmix_demo is missing a '&' preventing the demo script from working correctly on Linux/*nix systems (except MacOSX) if gnome-terminal is not installed. See Forum discussion on the matter. Bugfix.

  • The line with 'audiorate' in the script av_output2screen would in some cases stall the pipeline. The line has now been removed although on some systems it may be needed to avoid clicking sounds building up over time where the audio device is running slightly faster than system clock. Seen on Macs and some Linux systems. Sort of a bugfix.

Changelog for Snowmix 0.5.0

  • The following 72 new commands has been added to Snowmix providing OpenGL support.
    • glshape add [<glshape id> [<shape name>]]
    • glshape arcxz <glshape id> <angle> <aspect> <slices> <texleft> <texright> <textop> <texbottom>
    • glshape arcyz <glshape id> <angle> <aspect> <slices> <texleft> <texright> <textop> <texbottom>
    • glshape begin <glshape id> <form>
    • glshape blendfunc <glshape id> <s factor> <d factor>
    • glshape clear <glshape id> (depth | color | color+depth)
    • glshape clearcolor <glshape id> <red> <green> <blue> [<alpha>]
    • glshape color <glshape id> <red> <green> <blue> [<alpha>]
    • glshape context [(osmesa|glx|auto)]
    • glshape disable <glshape id> <mode>
    • glshape enable <glshape id> <mode>
    • glshape end <glshape id>
    • glshape entry <glshape id> (active|inactivate|number)
    • glshape finish <glshape id>
    • glshape flush <glshape id>
    • glshape glucylinder <glshape id> <quad id> <base> <top> <height> <slices> <stacks>
    • glshape gludisk <quad id> <inner> <outer> <slices> <loops>
    • glshape gludrawstyle <glshape id> <quad id> (fill|line|point|silhouette)
    • glshape glunormals <glshape id> <quad id> (none|flat|smooth)
    • glshape gluorientation <glshape id> <quad id> (outside|inside)
    • glshape glupartialdisk <quad id> <inner> <outer> <slices> <loops> <start> <sweep>
    • glshape gluperspective <glshape id> <fovy> <aspect> <znear> <zfar>
    • glshape glusphere <glshape id> <quad id> <radius> <slices> <stacks>
    • glshape glutexture <glshape id> <quad id> (0|1)
    • glshape if (osmesa|glx) <glshape id> <glshape command>
    • glshape info
    • glshape inshape <glshape id> <inglshape id>
    • glshape light <shape id> <gllight i> <pname> <value>
    • glshape lightv <shape id> <gllight i> <pname> <vector id>
    • glshape loadidentity <glshape id>
    • glshape materialv <glshape id> <face> <pname> <vector id>
    • glshape matrixmode <glshape id> (projection | modelview | texture | color)
    • glshape modify <glshape id> <line> (<no>[,<no>...] (<value> | values>)
    • glshape moveentry <shape id> <entry id> [<to entry>]
    • glshape normal <glshape id> <x> <y> <z>
    • glshape noop <glshape id>
    • glshape ortho <glshape id> <left> <right> <bottom> <top> <near> <far>
    • glshape popmatrix <glshape id>
    • glshape pushmatrix <glshape id>
    • glshape recursion <glshape id> <level>
    • glshape rotate <glshape id> <angle> <x> <y> <z>
    • glshape scale <glshape id> <scale x> <scale y> <scale z>
    • glshape scissor <glshape id> <x> <y> <width> <height>
    • glshape shademodel <glshape id> (flat|smooth)
    • glshape snowmix <glshape id> <snowmix command>
    • glshape translate <glshape id> <x> <y> <z>
    • glshape texcoord <glshape id> <s> [<r> [<t> [<q>]]]
    • glshape texfilter2d <glshape id> <near filter> <mag filter>
    • glshape texture add [<texture id> [<texture name>]]
    • glshape texture bind <glshape id> <texture id> [<min> <mag>] [(2d | cube)]
    • glshape texture source [<texture id> (feed <feed id>|frame <frame id>|image <image id>)|none [<id>]]
    • glshabe vbo add <vbo id> <name>
    • glshabe vbo config <vbo id> [(static|dynamic|stream) <form> (c3 | c4 | n3 | t1 | t2 | t3 | t4 | v2 | v3 | v4) ...]
    • glshabe vbo data <vbo id> [<data 0> <data 1> ...]
    • glshabe vbo indices <vbo id> [<index 0> <index 1> ...]
    • glshabe vbo <glshape id> <vbo id>
    • glshape vector add [<vector id> [<vector name>]]
    • glshape vector value [<vector id> <a> <b> [<c> [<d>]]]
    • glshape verbose [<level>]
    • glshape vertex <glshape id> <x> [<y> [<z> [<w>]]]
    • glshape help [form | mode | filter | factor | light | modify]
    • glshape place help
    • glshape copyback [frame | image <image_id> <x> <y> <width> <height>]
    • glshape [ place ] overlay (<id> | <id>..<id> | <id>..end | all) [(<id> | <id>..<id> | <id>..end | all)] ....
    • glshape place [<place id> [ <shape id> <x> <y> <z> [<scale x> <scale y> <scale z> [<rotation> <rx> <ry> <rz> [<red> <green> <blue> [<alpha>]]]]]
    • glshape place alpha [<place id> [<alpha>]]
    • glshape place coor [<place id> [<x> <y> <z>]]
    • glshape place rgb [<place id> [<red> <green> <blue> [<alpha>]]]
    • glshape place rotation [<place id> [<rotation> <rx> <ry> <rz>]]
    • glshape place scale [<place id> [<scale x> <scale y> <scale z>]]
    • glshape place help
  • Adding 4 entries to be listed for the command 'help'. The entries are: glshape help glshape place help shape help shape place help

  • As announced in EndOfLifeAnnouncements in earlier versions, this version no longer supports the following commands:

    Removed commandReplacement command
    cairoverlay -- no replacement --
    image place align image align
    image place alpha image alpha
    image place anchor image anchor
    image place clip image clip
    image place coor image coor
    image place filter image filter
    image place image image image
    image place matrix image matrix
    image place move alpha image move alpha
    image place move clip image move clip
    image place move coor image move coor
    image place move offset image move offset
    image place move rotation image move rotation
    image place move scale image move scale
    image place offset image offset
    image place rotation image rotation
    image place scale image scale
    overlay feed feed overlay
    overlay image image overlay
    overlay virtual feed vfeed overlay
    overlay text text overlay
    text place align text align
    text place alpha text alpha
    text place anchor text anchor
    text place backgr alpha text backgr alpha
    text place backgr clip text backgr clip
    text place backgr linpat text backgr linpat
    text place backgr round text backgr round
    text place backgr alpha text backgr alpha
    text place backgr move alphatext backgr move alpha
    text place backgr move clip text backgr move clip
    text place backgr rgb text backgr rgb
    text place backgr text backgr
    text place clip text clip
    text place clipabs text clipabs
    text place coor text coor
    text place grow text grow
    text place move alpha text move alpha
    text place move clip text move clip
    text place move coor text move coor
    text place move rotation text move rotation
    text place move scale text move scale
    text place offset text offset
    text place repeat move text repeat move
    text place rgb text rgb
    text place rotation text rotation
    text place scale text scale

  • As announced in EndOfLifeAnnouncements in earlier versions, this version no longer execute returned strings from the Tcl Interpreter as Snowmix commands. Version 0.4.4 introduced the embedded tcl command snowmix parse to excute Snowmix commands from within the embedded interpreter.

  • Adding new command feed drop to drop frames from the input FIFO for feeds. It is not possible to drop more frames that the fifo contains minus one. The syntax is:

    feed drop <feed id> <n drops>
  • If a feed was connected but a frame never arrived, the feed would have the state RUNNING. It should be STALLED. This is a bugfix.

  • A TCP connection to Snowmix's control port where the connection IP address was not allowed (ie. not in the allow list) would cause Snowmix to exit. This is a bugfix.

  • If verbose is set using the command verbose 1, a connecting TCP connection to Snowmix will now cause the IP address to be printed at console. Before the IP would be printed as an integer and a hex.

  • The command image move scale could reduce the scale of an image to zero. When a overlayed placed image was reduce to scale zero, overlaying other images would be affected (they became invisible). This is now fixed by ensuring the move command can not make the scale become zero. This is a bugfix.

  • Testing for existence of a loaded image is now possible as it has been and is possible to test for the existence of a command macro. Example:

    command create TestImage14 if exist(image,14) message image 14 is loaded else message image 14 is not loaded endif loop command end
  • Image loaded and image placed now have a sequence number. This number will for each image_id or place_id be incremented when deleted or a new image is loaded. Currently the sequence number for a placed image is currently not incremented.

  • Making CVideoMixer m_geometry_width and m_geometry_height private and exposing the geometry through the calls GetSystemWidth(), GetSystemHeight() and SystemGeometry().

  • In We now check for libcairo and fail if it is not available. We now check for libpangocairo and fail if it is not available. We now skip checking GTK+ if snowmixgui is not enabled. We now skip checking for OSMesa if snowmixosmesa is not enabled. We now skip checking for GLEW if snowmixglew is not enabled.

  • Adding command shape newsubpath to add the Cairo Graphic primitive newsubpath. The syntax is:

    shape newsubpath <shape id>
  • When a shape includes a shape arcrel_cw or shape arcrel_ccw, it is now checked if the there is a current point. If there is no current point, a relative arc is not possible and a warning is printed on the console. There is no current point right after a shape newpath.

  • Support for CentOS Linux 7.0 added to bootstrap. However at current state CentOS is missing AAC codec and H264 codec for both GStreamer 0.10 and 1.0. Furthermore the 1.0 version is at current state version 1.0.7, which is buggy. Version 1.2.4 or 1.4.x would be preferable.

  • Bootstrap for Fedora forced system update. Fixed. Now it is optional. Package libpng12-devel changed to libpng-devel.

  • Renaming ini files so they end in .ini

  • There was a double free error when deleting a loaded image. This is a bugfix.

  • The script demo would only run the basic_feeds demo case. any other choice would make the script exit. This is a bugfix.

  • Version 0.4.5 would print to Snowmix console when adding or deleting fonts. Fixed.

  • The program snowcub.tcl is now installed as a symbolic link typically in /usr/local/bin or /opt/local/bin to snowcub.tcl in the tcl directory of the lib/Snowmix-0.5.0 typically in /usr/local or /opt/local. The program can now be executed anywhere assuming you have set enviroment variable PATH to include the bin directory. The syntax for snowcub.tcl is still:

    snowcub.tcl [-- -FLAGS] [ IP:PORT ]
  • where FLAGS are any of the characters 'avsrto'. If IP:PORT is not specified, it will use default settings which are whatever the environment variables SNOWMIX_IP and SNOWMIX_PORT is set to. If these variables are not set, snowcub.tcl will use for IP and 9999 for PORT.

  • When snowmix starts, it will no longer write the node name on the Snowmix consol. Use command system info to see the node name. By default, the system name is set to the node name of the system running Snowmix.

  • If Snowmix was started with an ini file without a reasonably system frame rate, Snowmix would wait for a very long time in deleting CVideoOutput class when the command quit was given. This bug has now been fixed.

  • Snowmix is now installable and SHOULD be installed running the command:

    $ cd WHERE_YOU_UNPACKED_SNOWMIX_TO $ ./bootstrap $ make $ sudo make install
  • You only need sudo if you install Snowmix to a place that needs sudo rights. By default Snowmix will be installed into /usr/local. If you want to install it to somewhere else, you can execute the following command after the bootstrap and before the make:

    $ ./configure --prefix=WHERE_EVER_YOU_WANT_TO_INSTALL_SNOWMIX
  • When Snowmix is installed it will install the following in the prefix directory:

    bin/snowmix lib/Snowmix-VERSION/frames/..... lib/Snowmix-VERSION/images/..... lib/Snowmix-VERSION/ini/..... lib/Snowmix-VERSION/scripts/..... lib/Snowmix-VERSION/slib/..... lib/Snowmix-VERSION/tcl/..... lib/Snowmix-VERSION/test/.....
  • and it will make symbolic links for all scripts in the scripts directory in bin. The VERSION must be replaced by the version number of Snowmix here 0.5.0. The symbolic links will potentially overwrite programs in the bin directory with similar names. After installation you will need to set the enviroment variable SNOWMIX to point to the Snowmix diretory holding the frames, images etc. directories. You do this by adding the following line to your ~/.profile or ~/.bashrc or ~/.bash_profile depending on you system and choice of shell AND installation point:

    export SNOWMIX=/usr/local/lib/Snowmix-0.5.0
  • typical for Linux depending on your installation point. For Mac OS X you will typically have to add the following to your ~/.bash_profile

    export SNOWMIX=/opt/local/lib/Snowmix-0.5.0
  • After adding the setting to your ~/.profile or ~/.bashrc or your ~/.bash_profile depending on system and shell, you must logout and login again for the settings to take effect.

  • Snowmix now requires the environment variable SNOWMIX to be set to either the base directory of the Snowmix file tree or the installation directory of Snowmix.

  • The SNOWMIX variable setting depends on the version of Snowmix and where you choose to install Snowmix. The program snowmix will exit if the environment variable SNOWMIX is not set to point to the installation directory. After setting the enviroment variable, and after logging out and in again, you can test it by executing the commands in seperate windows:

    $ snowmix ini/basic_feeds $ output2screen
  • Enforcing that control socket name for a feed file name MUST be absolute by starting with a '/'

  • Enforcing the system socket path file name MUST be absolute by starting with a '/'.

  • Snowmix now creates a search path with by default the following 3 paths in the listed order using environment variables:

    Current working directory $HOME/$SNOWMIX_PREFIX $SNOWMIX
  • Snowmix will exit if the the environment variables HOME and SNOWMIX is not set. If SNOWMIX_PREFIX is not set, Snowmix will use the following default prefix: Unix : '.snowmix' Mac OS X : 'Snowmix' Windows : 'Application Data/Snowmix'

  • Snowmix is not yet fully ported to Windows because GStreamer does not yet support shmsink and shmsrc. Snowmix will in the $HOME/$SNOWMIX_PREFIX create the following directories, if they do not exist.

    frames : for your personal Snowmix raw frames. images : for your personal Snowmix png images. ini : for your personal Snowmix ini files. scripts : for your personal Snowmix scripts. slib : for your personal Snowmix libraries. tcl : for your personal Snowmix tcl scripts. test : for your personal Snowmix test movies.
  • NOTE: Because of the search path feature, you may have to change your ini file if it contains relative paths to loading images, including files or writes audio sink to a file with relative path. Typically you will change '../images/someimage.png' to 'images/someimages.png'. The following script can do it for you: # Use with caution cd YOUR_INI_FILE_DIRECTORY files=`ls` for file in $files ; do sed -e 's/\.\.\///g' < $file >tmpfile ; mv tmpfile $file ; done

  • You can use the 'ls' command to set the files you want the change for. THINK AND USE WITH CAUTION.

  • Snowmix will now use the search path when loading the intital ini file unless file name is absolute, ie starting with a '/'.

  • Snowmix will list the search path on the Snowmix console when starting Snowmix.

  • The command system info will now include information about the absolute file name for the initial ini file.

  • Snowmix will now use the search path when including files using the include command unless file name is absolute, ie starting with a '/'.

  • Snowmix will now use the search path when loading images unless the file name given is absolut, ie starting with a '/'. Further more when using the command image load to list loaded images, the absolute file name loaded will be listed.

  • Snowmix will now use the search path when opening a file for writing for audio sink unless file name is absolute, ie. starting with a '/'.

  • bootstrap for Mac OS X will now offer to install GStreamer 1.4.5 instead of 1.4.4. 1.5.0-1.5.2 have issues with matroskamux and tsmux/tsdemux.

  • The bootstrap script was calling a subscript with sh rather than bash. This could result in minor printing confusion if /bin/sh was not bash. Now testing for bash and uses bash over sh.

  • The bootstrap process will now look for libpng15 in addition to libpng16 and libpng12.

  • The command image source missed the alignment parameter in its call to OverlayFrame messing up parameters. This is a bugfix.

  • Banner message when connecting to Snowmix now adds a '.' in the end.

  • For the command *audio sink help* the audio volume was listed as going from 0..255. Valid volume is from 0.0..4.0. This has now been corrected.